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
事例から学ぶAPIテスト ~観点別で考えてみよう~
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
CUONG MAI
February 27, 2024
260
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
150
DevOpsにおけるAPIテスト
maicuong
0
370
Featured
See All Featured
Side Projects
sachag
455
43k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
3
970
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Exploring anti-patterns in Rails
aemeredith
3
440
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
How to Ace a Technical Interview
jacobian
281
24k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
420
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
Design in an AI World
tapps
1
260
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
590
WCS-LA-2024
lcolladotor
0
710
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. ご清聴 ありがとうございました!