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
DevOpsにおけるAPIテスト
Search
CUONG MAI
March 14, 2023
Technology
370
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
DevOpsにおけるAPIテスト
CUONG MAI
March 14, 2023
More Decks by CUONG MAI
See All by CUONG MAI
事例から学ぶAPIテスト ~観点別で考えてみよう~
maicuong
0
260
APIテスト、どうやっていますか?
maicuong
0
150
Other Decks in Technology
See All in Technology
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
2
400
ruby.wasmとPicoRuby.wasmに対応した仮想DOMライブラリを作ってる話 #kaigieffect_kaigi
sue445
PRO
0
150
10年目を迎えた「ABEMA」がどのように AI 活用を推進して、AI 駆動開発にシフトしているのか / How ABEMA, entering its 10th year, is promoting the use of AI and shifting toward AI-driven development
miyukki
0
220
「早く出す」より「事業に効く」 ── 顧客の業務サイクルから逆算するAI時代の二重ループ開発と「変化の設計者」 / devsumi2026
rakus_dev
1
320
生成AI×AWS CDK×AWS FISで"振り返れる"ミニGameDayをつくろう
yoshimi0227
1
280
公式ドキュメントの歩き方etc
coco_se
1
120
AI時代のYAGNI:「爆速で無駄になった機能」からの学び / 20260720 Naoki Takahashi
shift_evolve
PRO
2
240
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
3
290
「守りたい体験」を渡すだけで E2E を生成させられるようになった話
hinac0
0
120
OPENLOGI Company Profile for engineer
hr01
1
74k
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
280
LLM/Agent評価:トップ営業の発言を「正解」にする 〜暗黙的正解による評価を営業資産に変える〜
takkuhiro
1
230
Featured
See All Featured
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
How to Ace a Technical Interview
jacobian
281
24k
HDC tutorial
michielstock
2
740
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
330
Heart Work Chapter 1 - Part 1
lfama
PRO
8
36k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.1k
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
210
GitHub's CSS Performance
jonrohan
1033
470k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Become a Pro
speakerdeck
PRO
31
6k
Transcript
DevOpsにおけるAPIテスト 株式会社ヒューマンクレスト マイ マイクオン 1
❖ 名前: マイ マイ クオン ❖ 経歴 2011 来日 2012 横浜国立大学入学
2016 大学卒業 ヒューマンクレスト入社 現在: RakAPIt PO Profile 2
3
❖ APIテストとUIテスト ➢ APIテストとは ➢ APIテスト vs UIテスト ➢ APIテストタイミング
❖ APIテスト自動化 ➢ UIテスト自動化の問題点 ➢ APIテスト自動化のメリット ➢ APIテストで何を自動化するか ❖ APIテストは誰のものなのか? ❖ APIテストをデプロイメントパイプラインに組み込む ➢ デプロイメントパイプライン ➢ APIテスト設計・実装 ➢ CIツールに組み込む Agenda 4
❖ APIテストとUIテスト ➢ APIテストとは ➢ APIテスト vs UIテスト ➢ APIテストタイミング
❖ APIテスト自動化 ➢ UIテスト自動化の問題点 ➢ APIテスト自動化のメリット ➢ APIテストで何を自動化するか ❖ APIテストは誰のものなのか? ❖ APIテストをデプロイメントパイプラインに組み込む ➢ デプロイメントパイプライン ➢ APIテスト設計・実装 ➢ CIツールに組み込む Agenda 5
• DevOpsの必要性 – 変化が激しい現代社会では、ソフトウェアの価値をいかに早く ユーザに届けるかが大事 – DevOpsにおいてはテストの自動化は不可欠 今回はAPIテスト自動化、およびDevOpsへの導入に
ついてお話しします。 背景 6
APIテスト ・APIとは何か? アプリケーションとアプリケー ションとの間でやり取りするた めの仕組み マシン間の通信が効率的に行 える 7
APIテストとUIテストはそれぞれの役割があるが、重なり合うところがある。 つまり、その部分はAPIテストで確認することもできるし、UIテストで確認す ることもできる。 APIテストで実施する時と、UIテストで実施する時を比較してみる APIテスト vs UIテスト APIテスト UIテスト
8
APIテスト UIテスト 難易度 学習コストがかかる 直感的でやりやすい 実施できるタイミング APIの実装が完了したらすぐできる API及びUIがそれぞれ完成し、結合 しないと実施できない テストスコープ
UIテストで実施できないケースも実 施できる UIによる制限がある 実施コスト 実行時間が短い 実行時間が長い 安定性 安定 不安定 自動化 自動化しやすい 自動化しにくいところがある APIテスト vs UIテスト 9
無理矢理APIテストで確認しなくてもよく、UIテストで確認しても構わない。 システムの中には、UIテストの方がうまくテストできる側面も数多くある。 →APIテストとUIテストをうまく連携し、使い分けるのが大事 APIテスト vs UIテスト APIテスト UIテスト 10
BACK END FRONT END Coding Unit Testing Coding Unit Testing
UI Testing APIテストタイミング 遅延リスク バグ修正コスト 11
BACK END FRONT END Coding Unit Testing Coding Unit Testing
UI Testing API Testing APIテストタイミング バグ修正コスト↓ 遅延リスク↓ 12
出典:https://www.stickyminds.com/article/shift-left-approach-software-testing APIテストタイミング 13
❖ APIテストとUIテスト ➢ APIテストとは ➢ APIテスト vs UIテスト ➢ APIテストタイミング
❖ APIテスト自動化 ➢ UIテスト自動化の問題点 ➢ APIテスト自動化のメリット ➢ APIテストで何を自動化するか ❖ APIテストは誰のものなのか? ❖ APIテストをデプロイメントパイプラインに組み込む ➢ デプロイメントパイプライン ➢ APIテスト設計・実装 ➢ CIツールに組み込む Agenda 14
UIを頻繁に変更される→UIを少し変えただけでもテス トスイートを壊してしまう 例:アプリケーションの振る舞いには全く問題がないのに、チェックボッ クスの名前が変わっただけでテストが壊れてしまう UIテスト自動化の問題点 テストが壊れやすい 15
→ 誤った判断が多く下される テストが壊れた場合には、開発チームは即座に対応しなければならない ・ テストが壊れた原因を見分けなければならない + 紛れ込んだリグレッションの結果なのか? + テストの問題なのか? ・自動テストがまた通るようになるために、適切なアクションを取る
UIテスト自動化の問題点 テストが壊れやすい 16
テストをアプリケーションと同期させておこうと思うと、何の価値もデリバ リーすることなく、大量の時間を浪費することになり得る このことは、アプリケーション開発をしている間に留まらない。システムの ユーザテストをしている間に、ユーザビリティを改善したり、綴りを訂正した りしているうちに起きるかもしれない UIテスト自動化の問題点 テストが壊れやすい 17
テストケースをセットアップする際、システムをテストできる状 態にするために相当やりとりをしなければならないかもしれな い テストの最後には、UIを通じてテスト結果を取得することがで きないかもしれない UIテスト自動化の問題点 テストが複雑になる 18
UIを作る際に使っているテクノロジーによってはテスト できないかもしれない UIテスト自動化の問題点 テストできない 19
テストピラミッド 出典:https://www.mostafableu.com/blog/test-automation/ 20
APIテスト自動化のメリット UI APIテスト UIテスト 実行時間が短い 実装がシンプル 安定性が高い 21
「全てを自動化する必要はない」 判断材料: + 手動テストを繰り返し行うためにどれほどの時間が費や されているか + テストの保守に大量の時間を費やさなくても良いか 経験則:同じテストを2回繰り返したら、自動化するのが良
いようだ APIテストで何を自動化するか? 22
❖ APIテストとUIテスト ➢ APIテストとは ➢ APIテスト vs UIテスト ➢ APIテストタイミング
❖ APIテスト自動化 ➢ UIテスト自動化の問題点 ➢ APIテスト自動化のメリット ➢ APIテストで何を自動化するか ❖ APIテストは誰のものなのか? ❖ APIテストをデプロイメントパイプラインに組み込む ➢ デプロイメントパイプライン ➢ APIテスト設計・実装 ➢ CIツールに組み込む Agenda 23
APIテストはテストチームが責任を持つという伝統的 なモデルを用いることが多い 問題: + 開発チームは変更を加えた時、テストへの影響を意識しない。テスト チームが変更に気づくのはプロセスの比較的後の方になる。 →修正すべき自動テストが極めて多いため、問題発見までには時間 がかかる →開発チームは別のタスクに着手
→修正に時間がかかる APIテストは誰のものなのか? 24
APIテストはテストチームが責任を持つという伝統的 なモデルを用いることが多い 問題: + 修正すべきテストに対してテストチームの負担は大きい。しか も、新しい要件に対して新しいテストも実装しなければならない APIテストは誰のものなのか? 25
→APIテストの開発と保守をテストチームに持たせる のではなく、開発担当、運用担当、テスターを含む DevOpsチーム全体で責任を持つ そうすると、 + 変更を行ってから、テストで問題が発見されるまで の時間が短くなる
APIテストは誰のものなのか? 26
→APIテストの開発と保守をテストチームに持たせる のではなく、開発担当、運用担当、テスターを含む DevOpsチーム全体で責任を持つ そうすると、 + 開発者が自分たちの行った変更の影響をより直接的に意識 するようになる。 + 開発者がテストの観点から考えるようになることで、新しく変
更した時にテストスイートのどの部分に影響が出るかをより 的確に予期できる APIテストは誰のものなのか? 27
❖ APIテストとUIテスト ➢ APIテストとは ➢ APIテスト vs UIテスト ➢ APIテスト:スコープとタイミング
❖ APIテスト自動化 ➢ UIテスト自動化の問題点 ➢ APIテスト自動化のメリット ➢ APIテストで何を自動化するか ❖ APIテストは誰のものなのか? ❖ APIテストをデプロイメントパイプラインに組み込む ➢ デプロイメントパイプライン ➢ APIテスト設計・実装 ➢ CIツールに組み込む Agenda 28
デプロイメントパイプラインに組み込むと、大きなメ リットが得られる + フィードバックループを加速させる 開発者はテスターのところに行かなくても自動テストを 実行するだけで、特定の要件を完成できたかを確認で きる →ソフトウェア開発チームの生産性が一段上に行く
メリット 29
デプロイメントパイプラインに組み込むと、大きなメ リットが得られる + APIテストは強力なリグレッションテストスイートとな る。 このテストのおかげで変更を行った時にも既存 の 機能を壊していないことが保証される また、コードのリファクタリングも簡単になる
メリット 30
成果物リポジトリ キャパシティステージ 環境設定 バイナリデプロイ スモークテスト UAT 環境設定 バイナリデプロイ スモークテスト 本番
環境設定 バイナリデプロイ スモークテスト ソース コード コミットステージ コンパイル コミットテスト アセンブル コード分析 受け入れステージ 環境設定 バイナリデプロイ スモークテスト 受け入れテスト 環境 &アプリ 設定 環境 &アプリ 設定 開発者 コードメトリクスと テストの失敗を確認する テスター 自分で デプロイ 運用 ボタン1つで リリース レポート メタデータ レポート バイナリ メタデータ バイナリ バイナリ レポート メタデータ バージョンコントロール デプロイメントパイプライン 出典:継続的デリバリー Jez Humble (著), David Farley (著), 和智 右桂(訳), 高木 正弘 (訳) 31
成果物リポジトリ キャパシティステージ 環境設定 バイナリデプロイ スモークテスト UAT 環境設定 バイナリデプロイ スモークテスト 本番
環境設定 バイナリデプロイ スモークテスト ソース コード コミットステージ コンパイル コミットテスト アセンブル コード分析 受け入れステージ 環境設定 バイナリデプロイ スモークテスト 受け入れテスト 環境 &アプリ 設定 環境 &アプリ 設定 開発者 コードメトリクスと テストの失敗を確認する テスター 自分で デプロイ 運用 ボタン1つで リリース レポート メタデータ レポート バイナリ メタデータ バイナリ バイナリ レポート メタデータ バージョンコントロール デプロイメントパイプライン 出典:継続的デリバリー Jez Humble (著), David Farley (著), 和智 右桂(訳), 高木 正弘 (訳) 32
成果物リポジトリ キャパシティステージ 環境設定 バイナリデプロイ スモークテスト UAT 環境設定 バイナリデプロイ スモークテスト 本番
環境設定 バイナリデプロイ スモークテスト ソース コード コミットステージ コンパイル コミットテスト アセンブル コード分析 受け入れステージ 環境設定 バイナリデプロイ スモークテスト 受け入れテスト 環境 &アプリ 設定 環境 &アプリ 設定 開発者 コードメトリクスと テストの失敗を確認する テスター 自分で デプロイ 運用 ボタン1つで リリース レポート メタデータ レポート バイナリ メタデータ バイナリ バイナリ レポート メタデータ バージョンコントロール デプロイメントパイプライン 出典:継続的デリバリー Jez Humble (著), David Farley (著), 和智 右桂(訳), 高木 正弘 (訳) 33
成果物リポジトリ キャパシティステージ 環境設定 バイナリデプロイ スモークテスト UAT 環境設定 バイナリデプロイ スモークテスト 本番
環境設定 バイナリデプロイ スモークテスト ソース コード コミットステージ コンパイル コミットテスト アセンブル コード分析 受け入れステージ 環境設定 バイナリデプロイ スモークテスト 受け入れテスト 環境 &アプリ 設定 環境 &アプリ 設定 開発者 コードメトリクスと テストの失敗を確認する テスター 自分で デプロイ 運用 ボタン1つで リリース レポート メタデータ レポート バイナリ メタデータ バイナリ バイナリ レポート メタデータ バージョンコントロール デプロイメントパイプライン 出典:継続的デリバリー Jez Humble (著), David Farley (著), 和智 右桂(訳), 高木 正弘 (訳) 34
成果物リポジトリ キャパシティステージ 環境設定 バイナリデプロイ スモークテスト UAT 環境設定 バイナリデプロイ スモークテスト 本番
環境設定 バイナリデプロイ スモークテスト ソース コード コミットステージ コンパイル コミットテスト アセンブル コード分析 受け入れステージ 環境設定 バイナリデプロイ スモークテスト 受け入れテスト 環境 &アプリ 設定 環境 &アプリ 設定 開発者 コードメトリクスと テストの失敗を確認する テスター 自分で デプロイ 運用 ボタン1つで リリース レポート メタデータ レポート バイナリ メタデータ バイナリ バイナリ レポート メタデータ バージョンコントロール デプロイメントパイプライン APIテスト 出典:継続的デリバリー Jez Humble (著), David Farley (著), 和智 右桂(訳), 高木 正弘 (訳) 35
テストスイート作成 例:インタフェース観点 UI 正常なデータ:受け付けて仕様通りに処理 異常なデータ:適切なエラーメッセージを返す HEADER BODY HEADER BODY STATUS
CODE 36
HEADER BODY STATUS CODE HEADER BODY Path Query Header
Key Body Property パラメータ化する箇所 それぞれのパラメータに対し て、正常系と異常系のテスト データを抽出 そのデータを駆動してテストを 実施 テストスイート作成 例:インタフェース観点 37
HEADER BODY HEADER BODY STATUS CODE Assertion Assertion Assertion
スキーマ検証 テストスイート作成 例:インタフェース観点 38
テスト対象として考え る テストスイート作成 例:インタフェース観点 39
・テストケース作成 テストスイート作成 例:インタフェース観点 40
CIツールに組み込む CI/CDツール RakAPIt テスト対象 テストケース実行APIを呼び出す テスト実行開始の通知 テストケース実行状況を取得 テストケース実行状況を返却
テストケース実行状況を取得 テストケース実行完了の通知 実行結果を返却 テスト実施 ポーリング... リクエスト レスポンス 41
CIツールに組み込む サンプルスクリプト 42
CIツールに組み込む Test cases Execution API 43
CIツールに組み込む Get Result API 44
CIツールに組み込む サンプルスクリプト 45
• デモ デモ 46
❖ APIテストとUIテスト ➢ APIテストとは ➢ APIテスト vs UIテスト ➢ APIテストタイミング
❖ APIテスト自動化 ➢ UIテスト自動化の問題点 ➢ APIテスト自動化のメリット ➢ APIテストで何を自動化するか ❖ APIテストは誰のものなのか? ❖ APIテストをデプロイメントパイプラインに組み込む ➢ デプロイメントパイプライン ➢ APIテスト設計・実装 ➢ CIツールに組み込む まとめ 47
ご清聴 ありがとうございました! 48