🆕
ScenarigoのシナリオファイルをOpenAPI Specから自動生成するツール作った
はじめに
今回、業務でAPIの自動E2Eテストを整備することになり、E2Eテストのシナリオを作成するツールを作ったので、共有します!
対象読者
- バックエンドのシステムを保守運用している方
- DevOps的にシステムに関わる方
- 現状、DEV環境における動作確認を手動で、本番/ステージング環境における動作確認をステータス200でよしとしている方
Scenarigoとは?
- メルペイのQAチームの方が、作ったGo製OのOSSツール
メルカリ、メルペイにおけるscenarigoの活用事例
自動E2Eテストを導入する経緯
- CloudFormationからTerraformに移行するにあたりインフラ構築が別になった
- それに伴い、インフラの変更が入るたびに別チームから移行後の動作確認依頼が来るのはコストが高い
- Nodeのバージョンアップや各種ライブラリのバージョンアップで毎回手動動作確認はコストが高い
- 手動確認に工数が割かれて、本来見つけなければいけない、Nodeのバグによる不具合等の発見ができずに本番障害につながる可能性がある
ツールを作った経緯
- APIが100本以上ある
- レスポンスのjsonもでかい。30以上のプロパティを持つものもある
- 手動で作るのは無理ゲーすぎる
要件
- 実際にDEV環境のAPIをリクエストしてシナリオの期待値とする
- 入力として、OpenAPI Specファイルを受け取る
- クエリパラメータやパスパラメータを柔軟に受け取ることができる
- Scenarigoのシナリオ形式でファイルを出力することができる
ツールの仕様
インストール/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-case
:200
、404
、400
、500
といった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