香港不眠症CLIとGithubアクションによるAPIのためのCI


不眠症からのデスクトップアプリケーションですKong これはバックエンドAPIの構築、デバッグ、テストに最適です.一方、アドホックマニュアルのテストは良いですが、それは私たちの継続的な統合(CI)パイプラインでAPIテストを含めることも良いでしょうか?INSO、香港不眠症のCLIツール、我々はすることができます!
Insoはあなたの自動化されたAPIのテストを直接実行することができますコマンドラインから、それはgithubアクションでワークフローを設定することを意味スナップです.
この記事では、ノードを持つ簡単なサーバーを作成します.jsとExpress , APIテストを書くKong Insomnia , そして、これらのテストをCIパイプラインでInso and GitHub Actions .

デモアプリ:任天堂ゲームデータベース
我々はすべての情報が含まれてゲームのデータベースを構築したNES これまでに公開されるゲーム.アプリは、ゲーム、カテゴリ、開発者、出版社、リリース年に関するデータを取得するためにエンドポイントを使用して残りのAPIを実装するサーバーです.
あなたはfind the complete code on GitHub .

手動テストのためのコング不眠症の使用
APIを開発している間、あなたのAPIがあなたが望むデータを望む方法で働くのを確実にするのを、急速なフィードバックサイクルは助けます.香港不眠症は、この種のアドホックテストに最適です.
我々のNESゲームAPIを始めるために、我々は新しいものをつくりましたDesign Document インサイド・コング.デザインタブを空白にし、タブをクリックしてデバッグを開始しました.以下に、我々のサーバーが提供する各APIエンドポイントの要求があります.我々は、香港不眠症の中で各要求を実行することができますし、結果のデータは、UIで表示されます.

不眠症の例API要求

香港不眠症のテスト
手動でAPIのエンドポイントを押すと、アドホックテストやデバッグに最適ですが、最終的に我々は我々のアプリが正しく動作していることを保証する自動テストスイートです.Kong Insomnia allows you to write tests デスクトップアプリケーション内のテストタブで.
テストは、デバッグタブからの要求のいずれかを選択し、サーバーが返すデータについてアサーションを作成することによって作成されます.個々のテストまたはテストの全体のスイートを実行することができます.
下記のように、我々はテストスイートで11テストの合計のためのAPIのエンドポイントのそれぞれのテストを書いている.

不眠症のAPIテスト
これらのテスト(そして、我々のデザイン文書の情報)はgitで同期されることができて、我々のコードRPOに含まれます.そのように、誰も、香港不眠症のデスクトップアプリケーションを使用して、これらの要求やテストを実行することができます.
To sync Kong Insomnia with Git , 単に“セットアップGit同期”ボタンのアプリの上部をクリックします.

不眠症のセットアップGit同期ボタン
そこから、あなたのプロジェクトのGitレポと香港不眠症を接続するには、関連する詳細を提供することができます.

あなたのgithubレポで不眠症を結びつけること
あなたのGitレポを使用してコング不眠症を同期認証トークンが必要です.簡単にできますcreate a personal access token GitHubのアカウント設定内.

Githubにおける個人アクセストークンの作成

コマンドラインからの実行テスト
我々は現在、我々のデバッグとテストを手伝っている香港不眠症の中で、一連の要求とテストのスイートを持っています.しかし、我々はまだこれらのテストの実行を自動化していないので、今それをしましょう.これは、香港不眠症のCLI、INSOは、遊びに来るところです.
INSOはNPMパッケージとしてインストールできますので、プロジェクトに対するdev依存性を追加しました.yarn add --dev insomnia-inso .
テストスイートを簡単に実行するには、NPMスクリプトを作成しましたpackage.json ファイル.以下のスクリプトruns our tests with Inso : "test": "inso run test \"NES Games API Test Suite\"" . つまり、我々は単に走ることができるyarn test コマンドラインからテストを実行するには、いつでも.

GithubアクションによるInsoの統合
今私たちが今まで設定したすべての集大成のために:継続的な統合パイプラインの一部として、自動テストを実行します.コマンドラインからテストを実行することはできますが、今、私たちは自動的にどこにでも私たちのために実行していない.すべての新しいプルリクエストでテストスイートを実行したいです.そうすることで、テストが新しい枝をマスターブランチにマージする前にパスします.これは、最高級の連続統合です.
GitHub Actions YAMLファイルを使用して任意の継続的な統合を設定できます.私たちは.github/workflows ディレクトリとunit-tests.yml ファイルの中に.このファイルは以下のように再現されます:
name: NES Games API CI

on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2

      - name: Use Node.js 14.x
        uses: actions/setup-node@v2
        with:
          node-version: 14.x
          cache: 'yarn'

      - name: Install dependencies
        run: yarn install --frozen-lockfile

      - name: Start server and run unit tests
        run: yarn ci:start-and-test
ご覧のように、私たちのワークフローは私たちの現在のブランチをチェックして、ノードV 14を使用して、糸で我々の依存関係をインストールして、それから我々のアプリのサーバーを開始して、APIテストを走らせるためにカスタムスクリプトを走らせます.このワークフローは、マスターブランチにコードがプッシュされたり、マスターブランチに対して新しいプル要求が開かれるたびに起動されます.
このci:start-and-test スクリプトは別のNPMスクリプトですpackage.json ファイル.NPMパッケージの使用wait-on and concurrently , このスクリプトを使用してサーバーを起動し、APIテストを実行し、テスト終了後にサーバーをkillします.我々のNPMスクリプトの完全なリストpackage.json 以下のファイルを再生します.
"scripts": {
  "ci:start-and-test": "concurrently -k -s=first \"yarn start\" \"yarn ci:test\"",
  "ci:test": "wait-on http://localhost:3000 && yarn test",
  "format": "prettier --write .",
  "format-watch": "onchange . -- prettier --write {{changed}}",
  "start": "node index.js",
  "test": "inso run test \"NES Games API Test Suite\""
},
そして今、我々は美しい作業CIパイプラインを持っている!
我々は、すべてが適切に我々のrepoに小さなプル要求を作成することによって動作していることをテストすることができます.プルリクエストを実行した後、CIパイプラインが動作していることがわかります.

CIパイプラインは、Githubでのプルリクエストを実行しています
詳細情報をクリックすると詳細な情報が表示されます.

パイプラインステップ
ジョブが通過すると、結果は以下のようにプルリクエストに戻ります.

のためのCIパイプラインが渡されました
私たちはそれをやった!すべての小切手が経過しました.
我々が完全性のためにすることができた最後のことは、すべてのチェックがプルリクエストが合併されることができる前に、GiTubで通過するのを必要とします.Github内でrepoの設定でこれを行うことができます.

GATHUBのプル要求をマージする前にステータスチェックを渡す必要があります
あなたがもう一つの潜在的CIセットアップを調査したいならばexample workflow INSOをCIパイプラインでジョブの一部としてインストールします.setup-inso GitHub Action .

結論
では、今日何を成し遂げたか.全くたくさん!ノードを使用してサーバーを作成しました.JSエクスプレス.我々は、開発とAPIのデバッグを支援するために、香港不眠症内のアドホック要求を作成しました.我々は、香港不眠症の中でテストを書いているとinsoを使用してコマンドラインからそれらを実行することを学んだ.そして最後に、我々のAPIのテストを実行するためにGithubのアクションを持つCIパイプラインを作成しました.
コング不眠症、INSO、およびGithubアクション一緒に自信を持って我々のアプリを開発するために働いている.私たちの継続的な統合パイプラインはいつでも我々のアプリを展開する準備をしています.成功!
さらに進むために、我々はこのワークフローを全体のAPI開発ライフサイクルを管理するためのより広い戦略に合併することができましたKong Gateway .
読書のおかげで、ハッピーコーディング!