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.2k
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
790
VCRを更新するPRが自動で飛ぶ世界で気をつけたこと
okitan
1
350
DeNAの取り組むテストエンジニアリング
okitan
5
13k
SWETの現在とこれから
okitan
3
7.7k
Other Decks in Technology
See All in Technology
プロダクト開発を加速させるためのQA文化の築き方 / How to build QA culture to accelerate product development
mii3king
1
260
Amazon Kendra GenAI Index 登場でどう変わる? 評価から学ぶ最適なRAG構成
naoki_0531
0
100
Snykで始めるセキュリティ担当者とSREと開発者が楽になる脆弱性対応 / Getting started with Snyk Vulnerability Response
yamaguchitk333
2
180
生成AIをより賢く エンジニアのための RAG入門 - Oracle AI Jam Session #20
kutsushitaneko
4
220
GitHub Copilot のテクニック集/GitHub Copilot Techniques
rayuron
24
11k
5分でわかるDuckDB
chanyou0311
10
3.2k
ずっと昔に Star をつけたはずの思い出せない GitHub リポジトリを見つけたい!
rokuosan
0
150
OpenAIの蒸留機能(Model Distillation)を使用して運用中のLLMのコストを削減する取り組み
pharma_x_tech
4
550
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
Oracle Cloud Infrastructure:2024年12月度サービス・アップデート
oracle4engineer
PRO
0
170
UI State設計とテスト方針
rmakiyama
2
420
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
380
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
191
16k
Bootstrapping a Software Product
garrettdimon
PRO
305
110k
The Cost Of JavaScript in 2023
addyosmani
45
7k
Navigating Team Friction
lara
183
15k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Unsuck your backbone
ammeep
669
57k
Measuring & Analyzing Core Web Vitals
bluesmoon
4
170
Fontdeck: Realign not Redesign
paulrobertlloyd
82
5.3k
Side Projects
sachag
452
42k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Optimising Largest Contentful Paint
csswizardry
33
3k
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