🆕

ScenarigoのシナリオファイルをOpenAPI Specから自動生成するツール作った

2024/04/20に公開

はじめに

今回、業務でAPIの自動E2Eテストを整備することになり、E2Eテストのシナリオを作成するツールを作ったので、共有します!

対象読者

  • バックエンドのシステムを保守運用している方
  • DevOps的にシステムに関わる方
  • 現状、DEV環境における動作確認を手動で、本番/ステージング環境における動作確認をステータス200でよしとしている方

Scenarigoとは?

  • メルペイのQAチームの方が、作ったGo製OのOSSツール

メルカリ、メルペイにおけるscenarigoの活用事例

https://github.com/zoncoen/scenarigo

https://engineering.mercari.com/blog/entry/20230509-29effd7294/

https://engineering.mercari.com/blog/entry/20221018-mtf2022-day3-3/

https://engineering.mercari.com/blog/entry/20210928-mtf2021-day5-3/

自動E2Eテストを導入する経緯

  • CloudFormationからTerraformに移行するにあたりインフラ構築が別になった
  • それに伴い、インフラの変更が入るたびに別チームから移行後の動作確認依頼が来るのはコストが高い
  • Nodeのバージョンアップや各種ライブラリのバージョンアップで毎回手動動作確認はコストが高い
  • 手動確認に工数が割かれて、本来見つけなければいけない、Nodeのバグによる不具合等の発見ができずに本番障害につながる可能性がある

ツールを作った経緯

  • APIが100本以上ある
  • レスポンスのjsonもでかい。30以上のプロパティを持つものもある
  • 手動で作るのは無理ゲーすぎる

要件

  • 実際にDEV環境のAPIをリクエストしてシナリオの期待値とする
  • 入力として、OpenAPI Specファイルを受け取る
  • クエリパラメータやパスパラメータを柔軟に受け取ることができる
  • Scenarigoのシナリオ形式でファイルを出力することができる

ツールの仕様

https://github.com/o-ga09/spec2scenarigo

インストール/Install

$ go install github.com/o-ga09/spec2scenarigo@v0.0.15
  • テスト対象のAPIのレスポンスを使用して、シナリオを生成する
  • パスパラメーターや、クエリパラメーターにOpenAPIの記述を使用したくない場合にcsvで別途指定できる
  • --dry-runオプションを指定すると、シナリオファイルの生成なしにOpenAPI Specから値が取得できているかを確認できる

ツールの使い方

  • csv-file:OpenAPI Specのパラメータを指定したくない場合に、パラメーターを別途指定するcsvファイル
    • ヘッダなし
    • カラムの順序は、テスト対象パス(文字列)、HTTPメソッド(文字列)
    • テスト対象パスに、パスパラメーターやクエリパラメーターを含む
param.csv
/v1/health/xxxxx?companyname=xxxxxx&company=yyyyyyy,GET,
/v1/company/000000/project/1729712947901?user=xxxxxx,GET
/v1/user/000000?company=xxxxxx,GET
  • dry-run:シナリオファイルの生成なしに、デバッグ可能にする
  • host:APIサーバのURL(OpenAPI Specに複数指定されている場合に、一番最初の要素のURLが使用される仕様のため)
    • 現在のバージョンでは、x-api-keyのみ認証を通過できます
    • export API_KEY=xxxを設定する必要があります。
  • output-file:シナリオのファイル名を指定可能
  • test-case200404400500といったHTTPステータス毎にテストシナリオを生成できる。
Usage:
  spec2scenarigo [input file] [flags]

Flags:
  -c, --csv-file string      add test pattern parameter
  -d, --dry-run              dry run mode. not generate scenario file
  -h, --help                 Help message
  -s, --host string          API EndPoint
  -o, --output-file string   output file name
  -t, --test-case string     determine use test case
  -v, --version              version for go-spec-to-scenarigo

今後のアップデート

  • APIをリクエストする認証に対応する(basic認証、Bearer認証、awssigv4)
  • リクエストボディ(文字列)をcsvで指定できるようにする

まとめ

まだ、ツールのテストが書けていなかったり、各種APIの認証が通過できないなど機能として不足している箇所もありそうですので、
どんどん改善していきたいと思っています。使っていただいていいなと思った方はGitHubのスターをよろしくお願いいたします。

Discussion