Sphereとともに

scalaとかplayframeworkとか。技術ブログにしたいなと。環境は Windows7x64, mac です。たまに声優さん情報が混ざります。最近ちょっとClojure触りました。

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を用いた仕組み

  1. CIでConsumerのテストを回す
  2. テストを実施するとjson形式のpactファイルが出力される
  3. Pact Brokerにpactを送信する
  4. 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のすべてをまかなえるのだろうか?

プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化

プロダクションレディマイクロサービス ―運用に強い本番対応システムの実装と標準化