Slide 1

Slide 1 text

© 2022 HumanCrest Co., Ltd. 事例から学ぶAPIテスト 
 ~観点別で考えてみよう~
 株式会社ヒューマンクレスト
 


Slide 2

Slide 2 text

© 2022 HumanCrest Co., Ltd. ❖ 名前: マイ マイ クオン
 
 ❖ 経歴
  2011 来日
  2012 横浜国立大学入学
  2016 大学卒業、 HC入社
  現在: RakAPIt PO
 Profile


Slide 3

Slide 3 text

© 2022 HumanCrest Co., Ltd. ダナン
 ホイアン


Slide 4

Slide 4 text

© 2022 HumanCrest Co., Ltd. 会社紹介 


Slide 5

Slide 5 text

© 2022 HumanCrest Co., Ltd. ダナン
 ホイアン
 ぜひダナンに来てください。


Slide 6

Slide 6 text

© 2022 HumanCrest Co., Ltd.

Slide 7

Slide 7 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 Agenda


Slide 8

Slide 8 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 Agenda


Slide 9

Slide 9 text

© 2022 HumanCrest Co., Ltd. BACK END
 FRONT END
 Coding
 Unit Testing
 Coding
 Unit Testing
 UI Testing
 なぜAPIテストを行うのか?
 遅延リスク
 バグ修正コスト


Slide 10

Slide 10 text

© 2022 HumanCrest Co., Ltd. BACK END
 FRONT END
 Coding
 Unit Testing
 Coding
 Unit Testing
 UI Testing
 API Testing
 なぜAPIテストを行うのか?
 バグ修正コスト↓
 遅延リスク↓


Slide 11

Slide 11 text

© 2022 HumanCrest Co., Ltd. 
 
 
 なぜAPIテストを行うのか?
 出典:https://www.stickyminds.com/article/shift-left-approach-software-testing
 メリット① 早期にテストを開始できる


Slide 12

Slide 12 text

© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか?
 UI
 APIテスト UIテスト

Slide 13

Slide 13 text

© 2022 HumanCrest Co., Ltd. 
 
 
 なぜAPIテストを行うのか?
 メリット②
 UIテストで実施できないケースでも実施できる


Slide 14

Slide 14 text

© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか?
 出典:https://www.mostafableu.com/blog/test-automation/


Slide 15

Slide 15 text

© 2022 HumanCrest Co., Ltd. なぜAPIテストを行うのか?
 UI
 APIテスト UIテスト 実行時間が短い
 実装がシンプル
 安定性が高い


Slide 16

Slide 16 text

© 2022 HumanCrest Co., Ltd. 
 
 
 なぜAPIテストを行うのか?
 メリット③
 自動化しやすい


Slide 17

Slide 17 text

© 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/ 


Slide 18

Slide 18 text

© 2022 HumanCrest Co., Ltd. APIテストの課題
 どんなテストをするか?
 どうテストすれば良いか?


Slide 19

Slide 19 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 Agenda


Slide 20

Slide 20 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ 何をみるか ~
 ユーザは(UIを通じて)APIに対し てRequestを投げる APIは出力処理を行う前に、ユーザの 入力値の妥当性を検証する →バリデーション UI
  正常なデータ:受け付けて仕様通りに処理
  異常なデータ:適切なエラーメッセージを返す


Slide 21

Slide 21 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ 何をみるか ~
 HEADER BODY HEADER BODY STATUS CODE 
 REQUEST RESPONSE

Slide 22

Slide 22 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ 何をみるか ~
 HEADER BODY STATUS CODE 
 HEADER BODY Path
 Query
 Header Key
 Body Property
 パラメータ化する箇所 
 それぞれのパラメータに対し て、正常系と異常系のテスト データを抽出
 
 そのデータを駆動してテストを 実施


Slide 23

Slide 23 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ 何をみるか ~
 HEADER BODY HEADER BODY STATUS CODE 
 Assertion
 Assertion
 Assertion
 スキーマ検証


Slide 24

Slide 24 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ 例 ~
 テスト対象として考え る


Slide 25

Slide 25 text

© 2022 HumanCrest Co., Ltd. RAKU API TESTING


Slide 26

Slide 26 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施 正常データ  サンプルデータ vinfast vf e34
  文字列長最小 A
  文字列長最長 vinf … e34 (100文字)
  2バイト文字 トヨタ 異常データ  キーが存在しない
  空、null
  文字列長 最長の境界値  vinf … e344 (101文字)
  typeチェック (int)12, (boolean)true


Slide 27

Slide 27 text

© 2022 HumanCrest Co., Ltd. バリデーションチェック観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施

Slide 28

Slide 28 text

© 2022 HumanCrest Co., Ltd. バリデーションチェック観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施 Status Code
 アサーション
 Header
 アサーション
 Bodyアサーション
 スキーマ検証


Slide 29

Slide 29 text

© 2022 HumanCrest Co., Ltd. JSON Schema 
 JSON Schema is a vocabulary that allows you to annotate and validate JSON documents. 出典:https://json-schema.org/


Slide 30

Slide 30 text

© 2022 HumanCrest Co., Ltd. JSON Schema
 JSON Schema


Slide 31

Slide 31 text

© 2022 HumanCrest Co., Ltd. JSON Schema
 JSON Schema
 Pass
 JSON


Slide 32

Slide 32 text

© 2022 HumanCrest Co., Ltd. JSON Schema
 JSON Schema
 Fail
 JSON


Slide 33

Slide 33 text

© 2022 HumanCrest Co., Ltd. JSON Schema
 JSON Schema
 Fail
 JSON


Slide 34

Slide 34 text

© 2022 HumanCrest Co., Ltd. バリデーションチェック観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施 Status Code
 アサーション
 Header
 アサーション
 Bodyアサーション
 スキーマ検証


Slide 35

Slide 35 text

© 2022 HumanCrest Co., Ltd. バリデーションチェック観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施

Slide 36

Slide 36 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施

Slide 37

Slide 37 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 ~ どう実施しているか ~
 テストデータ テストケース アサーション設 定 テスト実施

Slide 38

Slide 38 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 事例
 Coding Unit Test Coding Unit Test Integaration BACK END
 FRONT END
 結合する際のAPI側の問題: 
 ・不具合が多い。特にインターフェース関連 の不具合。
 ・ APIの仕様は決まりきっていないところが 多々ある
 手戻りが発生
 問題

Slide 39

Slide 39 text

© 2022 HumanCrest Co., Ltd. 事例
 BACK END
 FRONT END
 Coding
 Unit Testing
 Coding
 Unit Testing
 不具合が多い
 特にインターフェース関連の不具合 
 問題 APIの仕様は決まりきっていないところ が多々ある


Slide 40

Slide 40 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 事例
 Coding Unit Test Coding Unit Test Integaration BACK END
 FRONT END
 Swagger作成して仕様を整理 
 ・仕様の不足分を洗い出す
 ・API間でのパラメータの統一性 を調査
 →仕様を修正・追加
 API Test Swaggerに基づいて 
 追加APIテストを行う 
 対策 改善できた点:
 ・API品質がアップ
 ・スムーズにFEと結合できた 


Slide 41

Slide 41 text

© 2022 HumanCrest Co., Ltd. 事例
 BACK END
 FRONT END
 Coding
 Unit Testing
 Coding
 Unit Testing
 OpenAPIに基づいて 
 追加APIテストを行う 
 対策 仕様を整理(OpenAPI作成) 
 ・仕様の不足分を洗い出す
 ・API間でのパラメータの統一性 を調査・指摘


Slide 42

Slide 42 text

© 2022 HumanCrest Co., Ltd. バリデーション観点
 事例
 Coding Unit Test API Test Coding Unit Test Integaration BACK END
 FRONT END
 API仕様レビューにQA が参加
 次フェーズの取り組み 結合の前に
 APIテストを実施


Slide 43

Slide 43 text

© 2022 HumanCrest Co., Ltd. BACK END
 FRONT END
 Coding
 Unit Testing
 Coding
 Unit Testing
 API Testing
 事例
 API仕様レビューにQA が参加
 結合の前に
 APIテストを実施
 次フェーズの取り組み

Slide 44

Slide 44 text

© 2022 HumanCrest Co., Ltd. ・ バリデーション観点
 
 ・ 機能観点 (★)
 
 ・ セキュリティ観点
 
 
 観点別で考えてみよう


Slide 45

Slide 45 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 Agenda


Slide 46

Slide 46 text

© 2022 HumanCrest Co., Ltd. 機能観点
 ~ 何をみるか ~ 
 HEADER BODY STATUS CODE 
 HEADER BODY 処理パフォーマンス 
 返却されたデータ の中身(データの 意味)
 保存されたデータの状態・正確性 
 ・投げたAPIが成功した場合実際に 反映されているか
 ・投げたAPIが失敗した場合、作成 されていないか
 バッチ処理
 メール送信
 等


Slide 47

Slide 47 text

© 2022 HumanCrest Co., Ltd. 機能観点 
 UIテスト APIテスト 難易度 直観的でやりやすい 学習コストがかかる 実施できるタイミング UIが完成しないと実施できない APIの実装が完了したらすぐできる テスタビリティ UIによる制限がある UIテストで実施できないケースも実 施できる 実施コスト 実行時間が長い 実行時間が短い 安定性 不安定 安定 自動化 自動化しにくいところがある 自動化しやすい UIテストで実施した場合との比較

Slide 48

Slide 48 text

© 2022 HumanCrest Co., Ltd. 機能観点
 ~ 例 ~


Slide 49

Slide 49 text

© 2022 HumanCrest Co., Ltd. 機能観点
 ~ どう実施しているか ~
 観点出し テストケース アサーション テスト実施 • Response確認
 – 新規idが付与されるか。 idはユニークか。
 – 返却されたデータは送ったデータと一致するか
 
 • データ確認
 – 成功した場合、データが反映されているか
 – 失敗した場合、データが作成されていないか
 
 • 処理パフォーマンス
 – レスポンスタイム
 – 容量が大きいデータを送った場合のパフォーマンス
 


Slide 50

Slide 50 text

© 2022 HumanCrest Co., Ltd. 機能観点
 ~ どう実施しているか ~
 観点出し テストケース アサーション テスト実施 • Response Body
 
 • レスポンスタイム
 
 • データ確認
  POST実施した後、GETメソッドでデータ取得・確認
 


Slide 51

Slide 51 text

© 2022 HumanCrest Co., Ltd. 機能観点
 ~ バグ例 ~
 削除済みのデータを変更できてしまう

Slide 52

Slide 52 text

© 2022 HumanCrest Co., Ltd. 機能観点
 ~ バグ例 ~
 削除APIが成功したが、データは削除されない

Slide 53

Slide 53 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 Agenda


Slide 54

Slide 54 text

© 2022 HumanCrest Co., Ltd. セキュリティ観点
 ~ 何をみるか ~
 HEADER BODY STATUS CODE 
 HEADER BODY 重要情報の不用 意な出力があるか
 認証・認可
 ・トークン切れ
 ・他ユーザの情報へのア クセス
 既知の脆弱性パターンに陥ってい ないか
 ・SQLインジェクション 
 ・XSS
 ・XML外部エンティティ 
 


Slide 55

Slide 55 text

© 2022 HumanCrest Co., Ltd. セキュリティ観点
 ~ 例:SQLインジェクション ~
 HEADER BODY STATUS CODE 
 HEADER BODY Path
 Query
 Header Key
 Body Property
 パラメータに攻撃パター ンを入れて実施
 
 例:' or '1'='1';-- 


Slide 56

Slide 56 text

© 2022 HumanCrest Co., Ltd. セキュリティ観点
 ・例:SQLインジェクション
 パラメータに攻撃パター ンを入れて実施
 
 例:' or '1'='1';-- 


Slide 57

Slide 57 text

© 2022 HumanCrest Co., Ltd. セキュリティ観点
 ~ バグ例 ~
 他ユーザの情報をアクセスできる ※同じ組織に所属している場合

Slide 58

Slide 58 text

© 2022 HumanCrest Co., Ltd. セキュリティ観点
 ~ バグ例 ~
 「%」が含まれたものを取得しようとすると、全件 データが返ってくる

Slide 59

Slide 59 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 Agenda


Slide 60

Slide 60 text

© 2022 HumanCrest Co., Ltd. リグレッションテスト
 ほかの箇所に意図しない影 響が発生していないを確認 する必要がある


Slide 61

Slide 61 text

© 2022 HumanCrest Co., Ltd. リグレッションテスト
 Group 2 データに影響を与える テストケース
 Group1
 データに影響しないテ ストケース
 


Slide 62

Slide 62 text

© 2022 HumanCrest Co., Ltd. リグレッションテスト
 重要パスのシナリオを作 成する
 
 データ作成からデータ削除 までのシナリオは理想的 
 GROUP 2
 GROUP 1


Slide 63

Slide 63 text

© 2022 HumanCrest Co., Ltd. リグレッションテスト
 例えば、 PUTに影響 の可能性がある場合 
 
 ・Group1:全て実施
 ・Group2:重要パスの シナリオを実施
 
 
 GROUP 2
 GROUP 1


Slide 64

Slide 64 text

© 2022 HumanCrest Co., Ltd. ❖ APIテストのメリット
 
 ❖ 観点別で考えるAPIテスト
 ➢ バリデーション観点
 ➢ 機能観点
 ➢ セキュリティ観点
 
 ❖ リグレッションテスト
 
 
 まとめ


Slide 65

Slide 65 text

© 2022 HumanCrest Co., Ltd. UIテスト APIテスト 難易度 直観的でやりやすい 学習コストがかかる 実施できるタイミング UIが完成しないと実施できない APIの実装が完了したらすぐできる テスタビリティ UIによる制限がある UIテストで実施できないケースも実 施できる 実施コスト 実行時間が長い 実行時間が短い 安定性 不安定 安定 自動化 自動化しにくいところがある 自動化しやすい UIテストで実施した場合との比較

Slide 66

Slide 66 text

© 2022 HumanCrest Co., Ltd. RAKU API TESTING


Slide 67

Slide 67 text

© 2022 HumanCrest Co., Ltd. ダナン
 ホイアン
 ぜひダナンに来てください。


Slide 68

Slide 68 text

© 2022 HumanCrest Co., Ltd. 
 
 ご清聴
 ありがとうございました!