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
Daisuke Kameda
April 26, 2016
Programming
0
570
Pactの紹介
2016/4/25 にFiNC社内で行われたMicroservices 勉強会内で使用した、Pactの紹介に関する資料です。デモについては、諸般の事情で概要のみとしています。
Daisuke Kameda
April 26, 2016
Tweet
Share
Other Decks in Programming
See All in Programming
パフォーマンスを求めてDBに機能を寄せる戦略
aoyagikouhei
0
110
Go製Webアプリケーションのエラーとの向き合い方大全、あるいはやっぱりスタックトレース欲しいやん / Kyoto.go #50
utgwkk
6
1.9k
AWS CDKコントリビュートTIPS / aws-cdk-contribution-tips
gotok365
4
540
Compose-View Interop in Practice (mDevCamp 2024)
stewemetal
0
170
障害対応を起点としたもっといい開発と運用のサイクル作りのためにできること / Hatena Enginner Seminar #29
polamjag
0
420
if constexpr文はテンプレート世界のラムダ式である
faithandbrave
3
700
Fast JSX: Don't clone props object #28768
yossydev
1
210
はてなにおける CSS Modules、及び CSS Modules に足りないもの / CSS Modules in Hatena, and CSS Modules missing parts
mizdra
7
1k
Build Apps for iOS, Android & Desktop in 100% Kotlin With Compose Multiplatform (mDevCamp 2024)
zsmb
0
480
Docker_OSS_ホスティング入門
satokoki645
0
110
Anthropic Cookbook のおすすめレシピ
schroneko
7
1.4k
使ってみよう Azure AI Document Intelligence
kosmosebi
2
370
Featured
See All Featured
What the flash - Photography Introduction
edds
64
11k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
117
18k
Faster Mobile Websites
deanohume
300
30k
[RailsConf 2023] Rails as a piece of cake
palkan
28
4k
Git: the NoSQL Database
bkeepers
PRO
423
63k
Embracing the Ebb and Flow
colly
80
4.2k
Automating Front-end Workflow
addyosmani
1357
200k
Docker and Python
trallard
35
2.7k
How To Stay Up To Date on Web Technology
chriscoyier
782
250k
What's in a price? How to price your products and services
michaelherold
238
11k
Pencils Down: Stop Designing & Start Developing
hursman
117
11k
Product Roadmaps are Hard
iamctodd
45
9.8k
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つずつテストを作成しましょう
ディスカッション