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
microservicesにおけるAPI自動テストにまつわるエトセトラ
Search
Kunio Okita
March 07, 2017
Technology
12
5.4k
microservicesにおけるAPI自動テストにまつわるエトセトラ
Test Engineers Meetup #2
https://test-engineers-meetup.connpass.com/event/50496/
Kunio Okita
March 07, 2017
Tweet
Share
More Decks by Kunio Okita
See All by Kunio Okita
DeNA品質管理部を支えるカルチャーと取り組み
okitan
0
990
VCRを更新するPRが自動で飛ぶ世界で気をつけたこと
okitan
1
510
DeNAの取り組むテストエンジニアリング
okitan
5
13k
SWETの現在とこれから
okitan
3
7.9k
Other Decks in Technology
See All in Technology
OSSで構築するIT基盤管理実践事例: NetBox・Snipe-IT・FreeRADIUS+PrivacyIDEA / Practical Case Studies of IT Infrastructure Management Using OSS
nttcom
0
200
男(監査)はつらいよ - Policy as CodeからAIエージェントへ
ken5scal
5
730
20260305_【白金鉱業】分析者が地理情報を武器にするための軽量なアドホック分析環境
yucho147
1
170
Datadog Cloud Cost Management で実現するFinOps
taiponrock
PRO
0
140
オンプレとGoogle Cloudを安全に繋ぐための、セキュア通信の勘所
waiwai2111
3
1.1k
ソフトウェアアーキテクトのための意思決定術: Create Decision Readiness—The Real Skill Behind Architectural Decision
snoozer05
PRO
30
9k
越境する組織づくり ─ 多様性を前提にしたチームビルディングとリードの実践知
kido_engineer
1
110
Claude Codeの進化と各機能の活かし方
oikon48
12
3.4k
AI Agentにおける評価指標とAgent GPA
tsho
1
300
Oracle Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
4
1.1k
生成AI活用によるPRレビュー改善の歩み
lycorptech_jp
PRO
5
2.1k
【SLO】"多様な期待値" と向き合ってみた
z63d
2
310
Featured
See All Featured
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4k
Accessibility Awareness
sabderemane
0
73
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.1k
Thoughts on Productivity
jonyablonski
75
5.1k
Skip the Path - Find Your Career Trail
mkilby
1
72
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
210
Designing Experiences People Love
moore
143
24k
Design in an AI World
tapps
0
160
Code Review Best Practice
trishagee
74
20k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Art, The Web, and Tiny UX
lynnandtonic
304
21k
A Soul's Torment
seathinner
5
2.4k
Transcript
Copyright © DeNA Co.,Ltd. All Rights Reserved. Microservices における API⾃動テストに
まつわるエトセトラ March 7, 2017 Kunio Okita (@okitan) SWET Group DeNA Co., Ltd.
Copyright © DeNA Co.,Ltd. All Rights Reserved. ⾃⼰紹介 ! 沖⽥
邦夫 ! @okitan ! 株式会社ディー・エヌ・エー ! SWETグループリーダー ! Selenium実践⼊⾨ ! みなさま第2刷も買ってください 2
Copyright © DeNA Co.,Ltd. All Rights Reserved. SWETとは ! Software
Engineer in Test の略 ! Google SETを参考にはじめて ! 独⾃のVisionをもとに活動の幅を広げてきました ! 活動の幅 ! SET ! TE (Test Engineer) ! SETI (Software Engineer, Tools and Infrastructure) の⼀部 ! かつての RE (Release Engineer) / BE (Build Engineer) もここの分類? 3
Copyright © DeNA Co.,Ltd. All Rights Reserved. Microservices Architecture !
いろいろ定義があると思いますが ! 今⽇の話は RESTful な API サーバがたくさんある ! くらいのゆるふわ認識で⼤丈夫です 4
Copyright © DeNA Co.,Ltd. All Rights Reserved. RESTful API開発のスタイル !
リソース設計をしっかりする ! リソース定義をしっかり⾏い責務割当をきちんと設計する ! 具体的にDeNAでやっているのは ! JSON Hyper Schema (2013版) で API specification を記述する ! 要は JSON Schema draft4 に対応しているやつです ! OpenAPI specification (a.k.a swagger) でも基本同じです ! JSON Schema draft5以降は。。。 ! リソース設計のレビューはJSON Hyper Schemaに対して⾏う 5
Copyright © DeNA Co.,Ltd. All Rights Reserved. RESTful APIのテスト !
基本は各APIに対して ! 開発者が開発しながらテストも開発 ! コンポーネントテスト ! コンポーネント統合テスト ! APIとしてHTTPで叩けるか ! 他のAPIを叩きに⾏くところはstub ! システム統合テスト ! テスト環境にデプロイし、stubも基本使わない ! コンポーネント統合テストを流⽤可能 ! SWET(TE)によるテスト ! テスト対象をきちんと分析したテスト ! その他、APIのオーケストレーションによるシナリオテスト 6
Copyright © DeNA Co.,Ltd. All Rights Reserved. SWETのRESTful APIのテスト !
きちんとテスト対象分析して設計したテスト以外には ! 例えばFuzzing ! JSON Schema と API テスト ! https://www.slideshare.net/naokishimizu/yapc-2014 ! 現状やらなくなった ! その代わりJSON Schema⾃体のテストを推奨 7
Copyright © DeNA Co.,Ltd. All Rights Reserved. SWETのRESTful APIのテスト !
システム統合テストでのFuzzing ! JSON Schema と API テスト ! https://www.slideshare.net/naokishimizu/yapc-2014 ! やらなくなった理由 ! 「システム統合テストならでは」のバグ検出数が少ない ! microservicesといっても実装が各APIでバラバラではなく ! ミドルウェア・フレームワークで⼀度対応していればOK ! 検出されるバグのリスクが少ない 8
Copyright © DeNA Co.,Ltd. All Rights Reserved. JSON Schema⾃体のテスト !
Fuzzing で⾒つかった多くはJSON Schema⾃体の不備 ! 意図通りschemaを記述できていない ! レビューだけでは担保できていなかった ! JSON Schemaを書くのと同時にJSON Schema⾃体のテストを書く ! あるJSONがvalidになるかinvalidになるか ! 副次的な効果 ! 書いたテストがサンプルになりわかりやすい ! TDDと同様にリソースデザインの助けになる 9
Copyright © DeNA Co.,Ltd. All Rights Reserved. JSON Schema⾃体のテストのカバレッジ !
コンポーネントテストでどれだけ担保できているかを測りたくなる ! スキーマ定義に対するテストとそのメトリクス ! http://qiita.com/okitan/items/a7cddc536755493b3452 ! 記事中では静的解析的なアプローチでやっていたが ! C0(resourceのpropertyカバレッジ)あたりで限界を感じた ! やるなら動的解析かなと。。 10
Copyright © DeNA Co.,Ltd. All Rights Reserved. JSON Schemaの静的解析 !
コンポーネントテストだけだとFuzzingをやめる理由にはならない ! 静的解析 ! JSONとしての正しさ ! $ref (別のオブジェクトへのリファレンス) が解決可能かのチェック ! property の typo がないかのチェック ! よくあったのが title が tilte になってる ! validationの不備 ! type: “string” なのに maxLength がないとか 11
Copyright © DeNA Co.,Ltd. All Rights Reserved. ここまでのまとめ ! microservices
でのAPI specificationに対して ! 意図通りかけているかのテストを書く ! specificationに対して静的解析 ! システム統合テストレベルでやっていた⽋陥の検出をより早期に 12
Copyright © DeNA Co.,Ltd. All Rights Reserved. API specificationの活⽤ !
コード⽣成 ! JSON Schemaだと ! 例えば Heroku 製 https://github.com/interagent ! heroics: HTTP Client for Ruby ! schematic: for Go ! committee: stub server (Rack Middleware) ! prmd: API Documentation ! pliny: code template ! OpenAPI specification ! swagger-codegen ! API Dashboard ! 負荷試験スクリプト(JMeter)も可能 13
Copyright © DeNA Co.,Ltd. All Rights Reserved. API specificationのSWETでの活⽤ !
JSON Schemaからのコード⽣成 ! ⾃前で実装。。 ! HTTP Client ! stub サーバを内包 ! API Dashboard ! テストコード⽣成 ! RESTのセマンティクスを利⽤ ! 負荷試験スクリプト⽣成 (Gatling) ! Gatling⽤HTTP Clientも⽣成 ! ⾃動⽣成に⾜りない情報はJSON Schemaを独⾃拡張 ! 例: OpenAPI Specificationでいうところの Security Schema ! ドメインに特化した仮定を置いているので公開できない 14
Copyright © DeNA Co.,Ltd. All Rights Reserved. API specificationからのテスト⽣成 !
浅いテスト対象分析程度のテスト⽣成 ! 最⼩限のパラメータセットで ! 最⼩限+個別パラメータのセットで ! 最⼤限のパラメータセットで ! (外部仕様からわかる)境界値試験 ! 権限が⾜りない場合 ! validationがきちんと動いているか ! JSON Schemaの単体テストによりvalidation⾃体は保証されている前提 ! 競合テスト ! 簡単なシナリオテスト ! これにプラスしてテスト対象分析をきちんとした⾃動テストを⼿動作成 ! ただし、リリース後リグレッションテストとしてメンテするかは別 15
Copyright © DeNA Co.,Ltd. All Rights Reserved. API specificationからのテスト⽣成の課題 !
かなりドメイン限定の拡張や前提があり汎⽤的には使えない ! リソースの依存関係 ! OpenAPI specification v3 (3/1にrc0が出た) ! Callback Object ! 簡単なシナリオ的なテストの⽣成に利⽤できる 16
Copyright © DeNA Co.,Ltd. All Rights Reserved. API specificationからのテスト⽣成の課題 !
API⾃動テストのデータ駆動化 ! 現状 RSpec のコードを⽣成している ! テストフレームワークや実装⾔語⾮依存の形式で出⼒したい ! 特にいろんな実装でテストスイートを共有できる ! データの追加だけでよくなるので開発者にもとっつきやすくなる ! なぜこれまでデータ駆動をやらなかったのか ! リソースの依存関係を汎⽤的に書く⽅法がなかった(知らない) ! これもCallback Objectで解決するとは思う ! UML Testing Profile 2.0って関係あるのかな ! よくしらない 17
Copyright © DeNA Co.,Ltd. All Rights Reserved. まとめ ! microservices
でのAPI specificationに対して ! 意図通りかけているかのテストを書く ! specificationに対して静的解析 ! API specificationを活⽤し ! テストも⾃動⽣成できるよ ! 今後の展望 ! OpenAPI specification v3 に移⾏していきたい⽅向? 18