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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Kunio Okita
March 07, 2017
Technology
5.4k
12
Share
microservicesにおけるAPI自動テストにまつわるエトセトラ
Test Engineers Meetup #2
https://test-engineers-meetup.connpass.com/event/50496/
Kunio Okita
March 07, 2017
More Decks by Kunio Okita
See All by Kunio Okita
DeNA品質管理部を支えるカルチャーと取り組み
okitan
0
1k
VCRを更新するPRが自動で飛ぶ世界で気をつけたこと
okitan
1
520
DeNAの取り組むテストエンジニアリング
okitan
5
13k
SWETの現在とこれから
okitan
3
8k
Other Decks in Technology
See All in Technology
コミュニティ・勉強会を作るのは目的じゃない
ohmori_yusuke
0
280
生成AI時代のドキュメントに対する期待の整理と実践から得た学び / Rethinking Documentation for LLM: Lessons from Practice
bitkey
PRO
1
120
Claude Code を安全に使おう勉強会 / Claude Code Security Basics
masahirokawahara
12
38k
Practical TypeProf: Lessons from Analyzing Optcarrot
mame
1
1.4k
AIはハッカーを減らすのか、増やすのか?──現役ホワイトハッカーから見るAI時代のリアル【MEGU-Meet】
cscengineer
PRO
0
240
Anthropic「Long-running a gents」をGeminiで再現してみた
tkikuchi
0
720
AIでAIをテストする - 音声AIエージェントの品質保証戦略
morix1500
1
150
Shipping AI Agents — Lessons from Production
vvatanabe
0
290
今年注目する!データ分析プラットフォームでのAIの活用
nayuts
0
170
Oracle Cloud Infrastructure:2026年4月度サービス・アップデート
oracle4engineer
PRO
0
200
20260423_執筆の工夫と裏側 技術書の企画から刊行まで / From the planning to the publication of technical book
nash_efp
3
660
生成AIが変える SaaS の競争原理と弁護士ドットコムのプロダクト戦略
bengo4com
1
2.9k
Featured
See All Featured
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
The Pragmatic Product Professional
lauravandoore
37
7.2k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
160
Deep Space Network (abreviated)
tonyrice
0
130
Unsuck your backbone
ammeep
672
58k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
170
The Cost Of JavaScript in 2023
addyosmani
55
9.9k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.7k
Building an army of robots
kneath
306
46k
Chasing Engaging Ingredients in Design
codingconduct
0
180
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.6k
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