Symmetric API Testing
Synmetric API Testing?
Symmetric API Testingという言葉は、この記事が使っている言葉のよう。
単純に言えば、通常は何らかのクライアントライブラリにを作成したときに、実際のリクエストとテスト用に利用するリクスエストを分けたい、外部への通信などの密結合を自動テストのタイミングなどでは避けたい、このときに特殊な書き方をしてコードを分ける(asymmetric)のではなく、同様のコードをそのまま使うようにして行いたい(symmetric)という趣旨らしい。
実際のところどうやっているかといえば、responseをどこかに保存しておくというようなことをしている。
requestを飛ばすときに以下のようなコードを書くことで標準出力にresponseを出力する事ができる。
余談
では、go-vcrが最高に便利か?というと個人的には不満を持っていたりもしている。
例えば、go-vcrは1つのrecorderが対応できるmock request(cassette)は1つだけという制限がある。これは複数のrequestで構成されている様な処理のテストには不適。
あと、こういうケースは無理。
GET /x
PATCH /x
GET /x
1つ目と3つ目は同じパラメーターで別のresponseというようなケース。
あと、Synmetric API testingという考え方に疑義があるときがある。go-vcrは実際のrequestを飛ばすか飛ばすかを条件に合致するファイルの存在の有無で決めているのだけれど、テスト中は一切実際のリクエストが飛ばされる余地が無いようにしたいことがある。
Symmetric API Testing は実際のリクエストとレスポンスを自動で保存しておいて、テスト実行時に保存したデータを参照する手法
実際にリクエストを投げるのは最初の1回のみ
テストはローカルで完結するので早い
モックサーバーを立てる手間が不要となる
API のドキュメントの不備や仕様変更があっても、レスポンスを保存し直せばよいだけ
少ない手間で堅牢なコードを作成できてとてもいいぞ
Symmetric というのは、リクエストとレスポンスを保存しておくことで、モックサーバーとモッククライアントを対照的にテストできるというところからきているようですね。
関連ツール