
【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:UnsplashのMohammad Rahmani