見出し画像

【CI/CD】GitHub Actions で APIのE2Eテストを実行する


はじめに


初めまして。SHIFT ITソリューション部DevOps推進グループの水野です。

私が過去に携わったプロジェクトにて、バックエンドの仕様変更がある毎に、Dev環境、STG環境、本番環境のそれぞれでAPIのE2Eテストを実行する必要があり、毎回手動で行っているため、E2Eテスト実行に関するコストがかかっていました。
そこでバックエンドの変更に合わせて、CIで自動的にE2Eテストが実行されるようにしました。

今回はAPIのE2EテストをCIで自動化した手順について紹介できればと思います。

使用する環境について


身近で簡単に環境を構築できることから、GitHub ActionsとPostmanを利用します。

GitHub ActionsはGitHub が提供しているCI/CDのプラットフォームです。
GitHubリポジトリと連携して容易にCI環境を構築できます。

Postman はAPIの実行・テストをするためのプラットフォームです。
GUIでの操作が一般的ですが、newmanと呼ばれるCLIでの操作も可能で今回はそちらを利用します。

どちらも無料でアカウントを作成できます。

Postman - API作成


最初にPostmanでE2Eを実行するコレクション、環境変数、APIを設定します。

コレクション

単一のAPIだけでなく、コレクション単位でテストを実行することができます。

※コレクション変数を利用することもできます。

環境変数

アカウントで利用する環境変数も利用可能です。

API

APIリクエストとテストを作成します。 ここでは例として、GoogleへGETリクエストを実行しています。

※リクエストパラメータにコレクション変数、環境変数を利用しています。

GETリクエストのレスポンスで取得したHTMLにある、Googleのロゴに設定されている、alt属性が「Google」であることをチェックしています。

Postman - API Key 作成


CIでPostmanを利用するため、API Keyを作成します。

GitHub Actionsワークフローの作成


GitHub Actionsを利用するために、GitHub上にリポジトリを作成しておきます。

GitHub Secrets の設定

GitHub ActionsとPostmanを連携するために、GitHubのsecrets変数に以下を設定する。

  • API Key:外部からPostmanのAPIを利用するためのKey

  • Collection UID:テスト対象のコレクションの情報を取得するためのID

  • ENV UID:利用する環境変数の情報を取得するためのID

ワークフロー作成

Postmanで作成したAPIリクエスト・APIテストを実行するために、Newman CLIを利用します。

name: E2E Test
on:
  push:
    branches:
      - 'feature/*'
      - 'hotfix/*'
      - 'main'

jobs:
  e2e-test:
    name: Run E2E Test
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
      - uses: actions/checkout@v3
      - name: Install newman
        run: |
          yarn add newman
          yarn add newman-reporter-html
      - name: Run newman
        run: newman run https://api.getpostman.com/collections/${{ secrets.POSTMAN_COLLECTION_UID }}?apikey=${{ secrets.POSTMAN_API_KEY }}
          -e https://api.getpostman.com/environments/${{ secrets.POSTMAN_ENV_UID }}?apikey=${{ secrets.POSTMAN_API_KEY }}
          -r html,cli,junit
      - name: store_artifacts
        uses: actions/upload-artifact@v3
        with:
          name: e2e-test_article
          path: ./newman

動作確認


最後に上記のワークフローファイルをリポジトリにpushすることで、GitHub Actionsに組み込んだ、E2Eテストが自動的に実行されます。

※Newman での処理結果がGitHub Actionsのログに出力されます

おわりに


最後まで記事を読んでいただきありがとうございます。
簡単な説明ではありますが、少しでも読んでいただいた方のお力になれれば幸いです。

また、サンプルでは1つのAPIの結果しか取り扱っていませんが、複数のAPIを利用したパターンや、バックエンドの開発に合わせたテストも実行することができます。

SHIFTでは、ソフトウェアテストをはじめ、テスト自動化やCI/CDの導入支援などのサービスも提供しているので、テストに関して、お困りごとがあれば、こちら のサービスページから是非お問い合わせください!


執筆者プロフィール:Mizuno Yusaku
SIer で数年AWS、Salesforceに関する開発を経験し、SHIFTへ入社。
DevOps推進として、テスト自動化、CI/CDに関するサービスを提供しています。

お問合せはお気軽に

SHIFTについて(コーポレートサイト)
https://www.shiftinc.jp/

SHIFTのサービスについて(サービスサイト)
https://service.shiftinc.jp/

SHIFTの導入事例
https://service.shiftinc.jp/case/

お役立ち資料はこちら
https://service.shiftinc.jp/resources/

SHIFTの採用情報はこちら
https://recruit.shiftinc.jp/career/

PHOTO:UnsplashMohammad Rahmani