Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
事例から学ぶAPIテスト ~観点別で考えてみよう~
Search
CUONG MAI
February 27, 2024
300
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
事例から学ぶAPIテスト ~観点別で考えてみよう~
CUONG MAI
February 27, 2024
More Decks by CUONG MAI
See All by CUONG MAI
APIテスト、どうやっていますか?
maicuong
0
170
DevOpsにおけるAPIテスト
maicuong
0
430
Featured
See All Featured
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
300
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k
Crafting Experiences
bethany
1
380
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
540
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
My Coaching Mixtape
mlcsv
0
360
What the history of the web can teach us about the future of AI
inesmontani
PRO
2
740
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.7k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
270
Transcript
© 2022 HumanCrest Co., Ltd. 事例から学ぶAPIテスト ~観点別で考えてみよう~ 株式会社ヒューマンクレスト
© 2022 HumanCrest Co., Ltd. ❖ 名前: マイ マイ クオン ❖
経歴 2011 来日 2012 横浜国立大学入学 2016 大学卒業、 HC入社 現在: RakAPIt PO Profile
© 2022 HumanCrest Co., Ltd. ダナン ホイアン
© 2022 HumanCrest Co., Ltd. 会社紹介
© 2022 HumanCrest Co., Ltd. ダナン ホイアン ぜひダナンに来てください。
© 2022 HumanCrest Co., Ltd.
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト Agenda
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト Agenda
© 2022 HumanCrest Co., Ltd. BACK END FRONT END Coding
Unit Testing Coding Unit Testing UI Testing なぜAPIテストを行うのか? 遅延リスク バグ修正コスト
© 2022 HumanCrest Co., Ltd. BACK END FRONT END Coding
Unit Testing Coding Unit Testing UI Testing API Testing なぜAPIテストを行うのか? バグ修正コスト↓ 遅延リスク↓
© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか? 出典:https://www.stickyminds.com/article/shift-left-approach-software-testing
メリット① 早期にテストを開始できる
© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか? UI APIテスト UIテスト
© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか? メリット②
UIテストで実施できないケースでも実施できる
© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか? 出典:https://www.mostafableu.com/blog/test-automation/
© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか? UI APIテスト UIテスト 実行時間が短い
実装がシンプル 安定性が高い
© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか? メリット③
自動化しやすい
© 2022 HumanCrest Co., Ltd. APIテストの現状 API Testing Software Testing
2019 2019 USD 661.69 million USD 40 billion 1.7% 2020~2026 2020~2026 伸び率19.82% 伸び率6% ~3.5% (2026) 出典:https://www.verifiedmarketresearch.com 出典:https://www.gminsights.com/
© 2022 HumanCrest Co., Ltd. APIテストの課題 どんなテストをするか? どうテストすれば良いか?
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト Agenda
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ 何をみるか ~ ユーザは(UIを通じて)APIに対し
てRequestを投げる APIは出力処理を行う前に、ユーザの 入力値の妥当性を検証する →バリデーション UI 正常なデータ:受け付けて仕様通りに処理 異常なデータ:適切なエラーメッセージを返す
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ 何をみるか ~ HEADER
BODY HEADER BODY STATUS CODE REQUEST RESPONSE
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ 何をみるか ~ HEADER
BODY STATUS CODE HEADER BODY Path Query Header Key Body Property パラメータ化する箇所 それぞれのパラメータに対し て、正常系と異常系のテスト データを抽出 そのデータを駆動してテストを 実施
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ 何をみるか ~ HEADER
BODY HEADER BODY STATUS CODE Assertion Assertion Assertion スキーマ検証
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ 例 ~ テスト対象として考え
る
© 2022 HumanCrest Co., Ltd. RAKU API TESTING
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施 正常データ サンプルデータ vinfast vf e34 文字列長最小 A 文字列長最長 vinf … e34 (100文字) 2バイト文字 トヨタ 異常データ キーが存在しない 空、null 文字列長 最長の境界値 vinf … e344 (101文字) typeチェック (int)12, (boolean)true
© 2022 HumanCrest Co., Ltd. バリデーションチェック観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施
© 2022 HumanCrest Co., Ltd. バリデーションチェック観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施 Status Code アサーション Header アサーション Bodyアサーション スキーマ検証
© 2022 HumanCrest Co., Ltd. JSON Schema JSON Schema
is a vocabulary that allows you to annotate and validate JSON documents. 出典:https://json-schema.org/
© 2022 HumanCrest Co., Ltd. JSON Schema JSON Schema
© 2022 HumanCrest Co., Ltd. JSON Schema JSON Schema Pass
JSON
© 2022 HumanCrest Co., Ltd. JSON Schema JSON Schema Fail
JSON
© 2022 HumanCrest Co., Ltd. JSON Schema JSON Schema Fail
JSON
© 2022 HumanCrest Co., Ltd. バリデーションチェック観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施 Status Code アサーション Header アサーション Bodyアサーション スキーマ検証
© 2022 HumanCrest Co., Ltd. バリデーションチェック観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施
© 2022 HumanCrest Co., Ltd. バリデーション観点 ~ どう実施しているか ~ テストデータ
テストケース アサーション設 定 テスト実施
© 2022 HumanCrest Co., Ltd. バリデーション観点 事例 Coding Unit Test
Coding Unit Test Integaration BACK END FRONT END 結合する際のAPI側の問題: ・不具合が多い。特にインターフェース関連 の不具合。 ・ APIの仕様は決まりきっていないところが 多々ある 手戻りが発生 問題
© 2022 HumanCrest Co., Ltd. 事例 BACK END FRONT END
Coding Unit Testing Coding Unit Testing 不具合が多い 特にインターフェース関連の不具合 問題 APIの仕様は決まりきっていないところ が多々ある
© 2022 HumanCrest Co., Ltd. バリデーション観点 事例 Coding Unit Test
Coding Unit Test Integaration BACK END FRONT END Swagger作成して仕様を整理 ・仕様の不足分を洗い出す ・API間でのパラメータの統一性 を調査 →仕様を修正・追加 API Test Swaggerに基づいて 追加APIテストを行う 対策 改善できた点: ・API品質がアップ ・スムーズにFEと結合できた
© 2022 HumanCrest Co., Ltd. 事例 BACK END FRONT END
Coding Unit Testing Coding Unit Testing OpenAPIに基づいて 追加APIテストを行う 対策 仕様を整理(OpenAPI作成) ・仕様の不足分を洗い出す ・API間でのパラメータの統一性 を調査・指摘
© 2022 HumanCrest Co., Ltd. バリデーション観点 事例 Coding Unit Test
API Test Coding Unit Test Integaration BACK END FRONT END API仕様レビューにQA が参加 次フェーズの取り組み 結合の前に APIテストを実施
© 2022 HumanCrest Co., Ltd. BACK END FRONT END Coding
Unit Testing Coding Unit Testing API Testing 事例 API仕様レビューにQA が参加 結合の前に APIテストを実施 次フェーズの取り組み
© 2022 HumanCrest Co., Ltd. ・ バリデーション観点 ・ 機能観点 (★)
・ セキュリティ観点 観点別で考えてみよう
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト Agenda
© 2022 HumanCrest Co., Ltd. 機能観点 ~ 何をみるか ~ HEADER
BODY STATUS CODE HEADER BODY 処理パフォーマンス 返却されたデータ の中身(データの 意味) 保存されたデータの状態・正確性 ・投げたAPIが成功した場合実際に 反映されているか ・投げたAPIが失敗した場合、作成 されていないか バッチ処理 メール送信 等
© 2022 HumanCrest Co., Ltd. 機能観点 UIテスト APIテスト 難易度 直観的でやりやすい
学習コストがかかる 実施できるタイミング UIが完成しないと実施できない APIの実装が完了したらすぐできる テスタビリティ UIによる制限がある UIテストで実施できないケースも実 施できる 実施コスト 実行時間が長い 実行時間が短い 安定性 不安定 安定 自動化 自動化しにくいところがある 自動化しやすい UIテストで実施した場合との比較
© 2022 HumanCrest Co., Ltd. 機能観点 ~ 例 ~
© 2022 HumanCrest Co., Ltd. 機能観点 ~ どう実施しているか ~ 観点出し
テストケース アサーション テスト実施 • Response確認 – 新規idが付与されるか。 idはユニークか。 – 返却されたデータは送ったデータと一致するか • データ確認 – 成功した場合、データが反映されているか – 失敗した場合、データが作成されていないか • 処理パフォーマンス – レスポンスタイム – 容量が大きいデータを送った場合のパフォーマンス
© 2022 HumanCrest Co., Ltd. 機能観点 ~ どう実施しているか ~ 観点出し
テストケース アサーション テスト実施 • Response Body • レスポンスタイム • データ確認 POST実施した後、GETメソッドでデータ取得・確認
© 2022 HumanCrest Co., Ltd. 機能観点 ~ バグ例 ~ 削除済みのデータを変更できてしまう
© 2022 HumanCrest Co., Ltd. 機能観点 ~ バグ例 ~ 削除APIが成功したが、データは削除されない
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト Agenda
© 2022 HumanCrest Co., Ltd. セキュリティ観点 ~ 何をみるか ~ HEADER
BODY STATUS CODE HEADER BODY 重要情報の不用 意な出力があるか 認証・認可 ・トークン切れ ・他ユーザの情報へのア クセス 既知の脆弱性パターンに陥ってい ないか ・SQLインジェクション ・XSS ・XML外部エンティティ
© 2022 HumanCrest Co., Ltd. セキュリティ観点 ~ 例:SQLインジェクション ~ HEADER
BODY STATUS CODE HEADER BODY Path Query Header Key Body Property パラメータに攻撃パター ンを入れて実施 例:' or '1'='1';--
© 2022 HumanCrest Co., Ltd. セキュリティ観点 ・例:SQLインジェクション パラメータに攻撃パター ンを入れて実施
例:' or '1'='1';--
© 2022 HumanCrest Co., Ltd. セキュリティ観点 ~ バグ例 ~ 他ユーザの情報をアクセスできる
※同じ組織に所属している場合
© 2022 HumanCrest Co., Ltd. セキュリティ観点 ~ バグ例 ~ 「%」が含まれたものを取得しようとすると、全件
データが返ってくる
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト Agenda
© 2022 HumanCrest Co., Ltd. リグレッションテスト ほかの箇所に意図しない影 響が発生していないを確認 する必要がある
© 2022 HumanCrest Co., Ltd. リグレッションテスト Group 2 データに影響を与える テストケース
Group1 データに影響しないテ ストケース
© 2022 HumanCrest Co., Ltd. リグレッションテスト 重要パスのシナリオを作 成する データ作成からデータ削除
までのシナリオは理想的 GROUP 2 GROUP 1
© 2022 HumanCrest Co., Ltd. リグレッションテスト 例えば、 PUTに影響 の可能性がある場合
・Group1:全て実施 ・Group2:重要パスの シナリオを実施 GROUP 2 GROUP 1
© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット ❖ 観点別で考えるAPIテスト
➢ バリデーション観点 ➢ 機能観点 ➢ セキュリティ観点 ❖ リグレッションテスト まとめ
© 2022 HumanCrest Co., Ltd. UIテスト APIテスト 難易度 直観的でやりやすい 学習コストがかかる
実施できるタイミング UIが完成しないと実施できない APIの実装が完了したらすぐできる テスタビリティ UIによる制限がある UIテストで実施できないケースも実 施できる 実施コスト 実行時間が長い 実行時間が短い 安定性 不安定 安定 自動化 自動化しにくいところがある 自動化しやすい UIテストで実施した場合との比較
© 2022 HumanCrest Co., Ltd. RAKU API TESTING
© 2022 HumanCrest Co., Ltd. ダナン ホイアン ぜひダナンに来てください。
© 2022 HumanCrest Co., Ltd. ご清聴 ありがとうございました!