Consumer-Driven Contractの雑なまとめ
Consumer-Driven Contractとは
用語
Consumer サービスを使う側(リクエストを投げてレスポンスを受ける側)
Provider サービスを提供する側(リクエストを受けてレスポンスを返す側)
Contract Consumerが期待するリクエストとレスポンスの定義
Mock Service Provider Consumerのテストを実施する際に利用するもの
Pact Broker https://github.com/bethesque/pact_broker ConsumerとProviderでのpact共有の課題を解決する
仕組み
ConsumerがProviderに期待する振る舞い(Contract)を提供し、Providerはそれに準じた挙動をしているか検証する。 Providerの挙動がContractと異なる場合にProvider側での検知が可能となる。 サービス間の振る舞いを、より大きな枠で担保する仕組み。
Consumer側が主導権を握っている。
Mock Service Providerを利用するので、テストコードにいちいちMockを書かなくても良い。
pact brokerを用いた仕組み
- CIでConsumerのテストを回す
- テストを実施するとjson形式のpactファイルが出力される
- Pact Brokerにpactを送信する
- Pact Brokerの最新のpactでProviderのテストを回す
なぜCDCが必要か
- それぞれの単体テストでMockを書いたとして、そのMockが本当に正しい振る舞いをしているかが保証されていない
pactとは
consumer-driven contract testing tool.
example project
http://io.itv.com/scala-pact/examples/index.html
pactStubber
で簡単にスタブサーバーを立てることが出来る。
CI用にスタンドアローンにすることも可能。
コスト
- すべてのサービスを立ち上げて結合テストを回すことと、CDCでテストを回すことのどちらがコストが高いのか
- contractのすべてをまかなえるのだろうか?
プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化
- 作者: Susan J. Fowler,佐藤直生,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2017/09/13
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る