【こんしゅーまーくどうけいやくてすと】
コンシューマー駆動契約テスト とは?
最終更新:
💡 利用側が必要とする通信を契約で確かめる
APIなどの利用側(コンシューマー)が必要とするやり取りを契約として表し、提供側(プロバイダー)が満たすか検証するテスト手法。利用側と提供側を個別に検証し、契約に含まれる通信の互換性を確かめる。
📌 このページのポイント
- 利用側が必要とするリクエストとレスポンスなどを契約にする
- Pactでは利用側のテスト実行から契約ファイルを生成する
- 提供側で実際の応答と契約を照合する
- 通信の互換性を検証するもので、画面や業務処理全体のテストとは範囲が異なる
利用側がAPIの仕様を全部決めるの?
利用側が必要とするやり取りを契約に表す、という意味だよ。たとえばユーザー情報のうちnameを使うなら、そのリクエストと必要な応答を示す。API全体の設計を一方的に決めるものではなく、両側の認識を合わせるためのテストなんだ。
契約ファイルは手で書くの?
提供側では何を確認する?
契約にあるリクエストを提供側へ送り、実際の応答を照合するよ。nameを必要とする契約なのに、変更後の応答にnameがなくなれば検証に失敗する。ユーザーが存在するなどの前提状態も、テストで用意するんだ。
Pact Brokerは何のためにあるの?
契約やバージョンごとの検証結果を共有するために使えるよ。デプロイ先にあるバージョンも記録すれば、can-i-deployで、これから入れる版と相手の版の組み合わせに成功した検証結果があるか確認できるんだ。
E2Eテストの代わりにこれだけでいい?
契約テストは通信部分を個別に検証できるけれど、画面操作や業務処理全体を確認するテストとは範囲が違うよ。必要な検証を組み合わせよう。また、サービスが3つ以上でなければ使えないわけではなく、利用側と提供側の2つから適用できるんだ。
まとめ:ざっくりこれだけ覚えればOK!
「コンシューマー駆動契約テスト」って出てきたら「利用側が必要とする通信を契約で検証するテスト」と思えばだいたいOK!
📖 おまけ:英語の意味
「Consumer-Driven Contract Testing」 = 利用側が駆動する契約テスト
💬 Consumerは利用側、Contractは契約のこと。利用側が実際に必要とするやり取りを出発点にして、提供側との接続を検証するんだ。