Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Pactの紹介
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Daisuke Kameda
April 26, 2016
Programming
0
590
Pactの紹介
2016/4/25 にFiNC社内で行われたMicroservices 勉強会内で使用した、Pactの紹介に関する資料です。デモについては、諸般の事情で概要のみとしています。
Daisuke Kameda
April 26, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
「ブロックテーマでは再現できない」は本当か?
inc2734
0
1k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
650
Architectural Extensions
denyspoltorak
0
290
20260127_試行錯誤の結晶を1冊に。著者が解説 先輩データサイエンティストからの指南書 / author's_commentary_ds_instructions_guide
nash_efp
1
970
CSC307 Lecture 09
javiergs
PRO
1
840
AI Schema Enrichment for your Oracle AI Database
thatjeffsmith
0
280
CSC307 Lecture 02
javiergs
PRO
1
780
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
100
Implementation Patterns
denyspoltorak
0
290
AI によるインシデント初動調査の自動化を行う AI インシデントコマンダーを作った話
azukiazusa1
1
730
Fragmented Architectures
denyspoltorak
0
160
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
1
2.5k
Featured
See All Featured
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
270
How To Stay Up To Date on Web Technology
chriscoyier
791
250k
My Coaching Mixtape
mlcsv
0
48
AI: The stuff that nobody shows you
jnunemaker
PRO
2
260
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
1
100
Abbi's Birthday
coloredviolet
1
4.7k
Navigating Weather and Climate Data
rabernat
0
110
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
50
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
160
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
210
Transcript
Pact の紹介 ~Microservices のテストに困っているあなたへ~ 2016/04/25 亀田 大輔
自己紹介 • 2014年8月までピクスタ株式会社で勤務 • 2014年9月に転職するも、腰痛のため2ヶ月で退職せざるをえない状況に・・・ • その後、在宅でフリーランスとして働く • 2016年5月、株式会社FiNCに入社(予定)
アジェンダ 1. Microservices のテストにおける課題とPactのメリット 2. Pact の概要 3. デモを交えた紹介
Microservices におけるテストの課題と Pact のメリット
Microservices のテストの難しさ 基本:Modelなどの単体テスト/request specやfeature spec で機能(結合)テスト → 他サービスを呼び出す必要があると、そこはstubを使わざるをえない 「結合させてちゃんと動くのだろうか?」という不安
考えられる対処法1 関連する実際のサービスで結合テスト • 実行に時間がかかりすぎる => デプロイにも時間がかかる • メンテナンスが大変 • サービスを分割したのに、テストで依存関係が発生
考えられる対処法1 関連する実際のサービスで結合テスト • 実行に時間がかかりすぎる => デプロイにも時間がかかる • メンテナンスが大変 • サービスを分割したのに、テストで依存関係が発生
非現実的
考えられる対処法2 モックを使う(例:webmock + vcr) 実際のサービスを使って request/response のモックを作成 →各consumer がテストを実行 •
全 cosumer でテストを実行しないと、変更が問題ないか不明 ◦ デプロイには時間がかかる 可能性が高い • 検証コードや検証用のrequest/response を用意するのは誰の仕事? ◦ テスト作成で各サービス担当チーム間で連携が必要
考えられる対処法2 モックを使う(例:webmock + vcr) 実際のサービスを使って request/response のモックを作成 →各consumer がテストを実行 •
全 cosumer でテストを実行しないと、変更が問題ないか不明 ◦ デプロイには時間がかかる 可能性が高い • 検証コードや検証用のrequest/response を用意するのは誰の仕事? ◦ テスト作成で各サービス担当チーム間で連携が必要 まだサービス間の依存度合いが高い
考えられる対処法3 コンシューマ駆動契約(例:Pact) メリット • テスト自体は各サービスで閉じて実行できる ◦ デプロイまでの手順がシンプル • テスト作成作業の責任が明確 ◦
テストを作成する際のチーム間の連携を抑えられる • (Pactは)対応言語が豊富 ◦ Ruby、JVM(Java、Scala など)、Javascript、Swift などに対応ライブラリが存在
Pact の概要
Pact の概要 Consumer Pact で作成したmock http request http response Provider
Pact ファイル 生成
Pact の概要 Consumer Provider Pactツール (rake タスク) Pact ファイル 状態セットアップ
コード セットアップ http request 再現 http response 入力 比較
デモ
登場サービス チャットサービス アカウントサービス ログインユーザーの 情報を要求 チャット相手の 情報を要求
Pact を使う上で難しそうなところ • どうやってCIに組み込むか ◦ (私は未検証ですが) Pact Broker というのがあります •
pactファイルだけでは Provider 側が状態を再現するのは難しい ◦ 必要なコミュニケーションはとりましょう • デバッグが少ししづらい ◦ まとめてではなく、1つずつテストを作成しましょう
ディスカッション