💯
runn を 使った E2E テスト
はじめに
今まで業務では Postman と Newman を使って CI/CD に自動テストを組み込むことが多かったが、
今回はじめて runn を使用して実装したのでシナリオを作りで工夫した点などをまとめていく。
以下のページも大変参考になった。
実装方針
各APIのテストは極力シンプルにして再利用可能
かつ テストパターンはJSONで定義して発展させる
という点を特に意識して実装した。
シナリオについて
ファイル構成
各APIのファイル構成は、全て以下の4つの構成とした。
- base.yml
- テスト対象 API の最小の実行単位で、実際のテスト対象 API をコールする
- API をチェーンさせる場合にはこのファイルをインクルードして再利用する
- data.json
- リクエストの内容とレスポンスの組み合わせを定義することで、データ駆動的なテストを可能とする
- detail.yml
- data.json の各テストパターンに対する一まとまりのシナリオ
- scenario.yml
- テストの実行単位で、data.json を読み込んで各テストパターンに対して detail.yml のシナリオを1回以上実行する
サンプル実装
長々と説明をするよりサンプルを見たほうが理解が早いと思うので、個人のサンプルリポジトリ向けにシナリオテストを実装してみた。
テスト対象のリポジトリ
シナリオテストのリポジトリ
さいごに
参考ページに書いてあったことだが、runn を使ってシナリオテストを実装すると API チェーンやデータ駆動テストを容易に実装できる点は大変大きな魅力である。
一度シンプルにシナリオテストを実装することができてしまえば、JSON の修正のみでテストパターンをどんどん増やしていけるため、E2E テストの本来の目的である全体的な動作確認、ユーザ体験の確認、リグレッションの検出、信頼性の担保などの役割に注力していけるのではないかと思う。
また、Postman ではシナリオテストを追加・修正後に PR を出されてもレビューできない。といった問題も解決するうえ、Go コマンドとして実装されているので実行環境も選ばないため CI/CD に組み込むことも容易である。
@k1LoW さんには感謝とともに今後の発展を見守っていきたい。
Discussion