【こんしゅーまーくどうけいやくてすと】

コンシューマー駆動契約テスト とは?

最終更新:
💡 利用側が必要とする通信を契約で確かめる

APIなどの利用側(コンシューマー)が必要とするやり取りを契約として表し、提供側(プロバイダー)が満たすか検証するテスト手法。利用側と提供側を個別に検証し、契約に含まれる通信の互換性を確かめる。

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

参考資料

← 用語集にもどる