💯

runn を 使った E2E テスト

2024/02/21に公開

はじめに

今まで業務では Postman と Newman を使って CI/CD に自動テストを組み込むことが多かったが、
今回はじめて runn を使用して実装したのでシナリオを作りで工夫した点などをまとめていく。

https://github.com/k1LoW/runn
https://zenn.dev/k1low/books/runn-cookbook/viewer/about

以下のページも大変参考になった。
https://zenn.dev/katzumi/articles/api-scenario-testing-with-runn

実装方針

各APIのテストは極力シンプルにして再利用可能 かつ テストパターンはJSONで定義して発展させる という点を特に意識して実装した。

シナリオについて

ファイル構成

各APIのファイル構成は、全て以下の4つの構成とした。

  • base.yml
    • テスト対象 API の最小の実行単位で、実際のテスト対象 API をコールする
    • API をチェーンさせる場合にはこのファイルをインクルードして再利用する
  • data.json
    • リクエストの内容とレスポンスの組み合わせを定義することで、データ駆動的なテストを可能とする
  • detail.yml
    • data.json の各テストパターンに対する一まとまりのシナリオ
  • scenario.yml
    • テストの実行単位で、data.json を読み込んで各テストパターンに対して detail.yml のシナリオを1回以上実行する

サンプル実装

長々と説明をするよりサンプルを見たほうが理解が早いと思うので、個人のサンプルリポジトリ向けにシナリオテストを実装してみた。

テスト対象のリポジトリ
https://github.com/htnk128/kotlin-ddd-sample

シナリオテストのリポジトリ
https://github.com/htnk128/runn-scenario-test

さいごに

参考ページに書いてあったことだが、runn を使ってシナリオテストを実装すると API チェーンやデータ駆動テストを容易に実装できる点は大変大きな魅力である。
一度シンプルにシナリオテストを実装することができてしまえば、JSON の修正のみでテストパターンをどんどん増やしていけるため、E2E テストの本来の目的である全体的な動作確認、ユーザ体験の確認、リグレッションの検出、信頼性の担保などの役割に注力していけるのではないかと思う。

また、Postman ではシナリオテストを追加・修正後に PR を出されてもレビューできない。といった問題も解決するうえ、Go コマンドとして実装されているので実行環境も選ばないため CI/CD に組み込むことも容易である。

@k1LoW さんには感謝とともに今後の発展を見守っていきたい。

Discussion