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
60分で学ぶE2Eテスト(テスト設計編)
Search
YoshikiIto
March 17, 2023
Technology
0
360
60分で学ぶE2Eテスト(テスト設計編)
JaSST'22 Tokyoで発表した資料です。
YoshikiIto
March 17, 2023
Tweet
Share
More Decks by YoshikiIto
See All by YoshikiIto
アーキテクチャで理解する テスト自動化システム Developers Summit 2023 Summer
yoshikiito
6
6.4k
迷いながらも前に進むための テスト自動化ツールの選定ポイント
yoshikiito
2
650
ソフトウェアテスト自動化、一歩前へ
yoshikiito
7
2.7k
テストエンジニアのための初めてのプログラミング
yoshikiito
0
520
テスト自動化Learn&Unlearn
yoshikiito
0
3.6k
テスト自動化プロジェクトを支える技術と仕組み
yoshikiito
2
3.2k
テスト自動化チームでペアプロにトライした話 / trying to pair programming on test automation team
yoshikiito
0
880
テスト自動化とお掃除ロボット
yoshikiito
0
4.1k
抜け出そう、テスト自動化あるある
yoshikiito
4
6k
Other Decks in Technology
See All in Technology
AWS Lambdaと歩んだ“サーバーレス”と今後 #lambda_10years
yoshidashingo
1
170
障害対応指揮の意思決定と情報共有における価値観 / Waroom Meetup #2
arthur1
5
470
AWS Media Services 最新サービスアップデート 2024
eijikominami
0
190
Lambda10周年!Lambdaは何をもたらしたか
smt7174
2
110
[CV勉強会@関東 ECCV2024 読み会] オンラインマッピング x トラッキング MapTracker: Tracking with Strided Memory Fusion for Consistent Vector HD Mapping (Chen+, ECCV24)
abemii
0
220
エンジニア人生の拡張性を高める 「探索型キャリア設計」の提案
tenshoku_draft
1
120
Why does continuous profiling matter to developers? #appdevelopercon
salaboy
0
180
EventHub Startup CTO of the year 2024 ピッチ資料
eventhub
0
110
TanStack Routerに移行するのかい しないのかい、どっちなんだい! / Are you going to migrate to TanStack Router or not? Which one is it?
kaminashi
0
580
Lambdaと地方とコミュニティ
miu_crescent
2
370
開発生産性を上げながらビジネスも30倍成長させてきたチームの姿
kamina_zzz
2
1.7k
The Rise of LLMOps
asei
5
1.2k
Featured
See All Featured
Stop Working from a Prison Cell
hatefulcrawdad
267
20k
Scaling GitHub
holman
458
140k
How STYLIGHT went responsive
nonsquared
95
5.2k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
47
2.1k
Side Projects
sachag
452
42k
How to Think Like a Performance Engineer
csswizardry
20
1.1k
Navigating Team Friction
lara
183
14k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
38
1.8k
A Philosophy of Restraint
colly
203
16k
The Invisible Side of Design
smashingmag
298
50k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Transcript
60分で学ぶ実践E2Eテスト 2022/3/10 JaSST'22 Tokyo 末村拓也(Autify)・伊藤由貴(ベリサーブ) 1
セッション概要 内容 Webアプリケーションを題材に、テスト設計からテストコード実装までの自動テスト 作成の流れを一気通貫で、実践的に解説していきます。 想定参加者 ソフトウェアテストの経験がある方 プログラミングの経験があり、簡単な環境構築くらいは出来るよ!という方 2
セッションの構成 大きく2部構成です 1. 設計編:どんなテストを自動化するのか、などを考える 2. 実践編:設計編で考えたテストを、ツールを使って実際に自動化する 3
自己紹介:伊藤由貴 テスト自動化エヴァンジェリスト @ベリサーブ テスト自動化の普及活動 コミュニティ活動 JaSST Tohoku実行委員 JSTQBテスト自動化エンジニアシ ラバス翻訳WG 4
設計編 5
はじめに:皆さんに質問 「E2Eテストを自動化しよう」と思った場合、何から始めますか? 思いつくままに自動化する 今ある手動テストを順番に自動化する なんとなく大事そうなテストケースから自動化する 6
アンチパターンです 7
設計編の目次 1. やみくもにE2Eテストを自動化するとなぜ危険なのか 2. テスト自動化にあたって考える・工夫するべき点 3. 具体例 8
やみくもにE2Eテストを自動化するとなぜ危険なのか テスト自動化を行うと、テストケースの追加や実行が(一見)簡単になるため、テス トを増やしてしまうことがある。 行っても効果がないテストが増えてしまうと、 メンテナンスの手間が大きくなる 実行時間(期間)が延びる など、不都合が生じる。(そして自動テストはお蔵入りへ・・・) 9
"手動でおこなって効果のないテストを自動化しても 無駄である" そもそも、テストプロセス(e.g.テスト分析、テスト設計、テスト実装、報 告)、特にテスト分析、テスト設計が適切に行われていないテストは、優秀なテ スターが手動でテストを実施したところで、テストに期待される動作の保証やバ グの検出といった効果を発揮しない。いわんや、自動テストにおいておや、であ る。 テスト自動化研究会 - テスト自動化の8原則 より。強調は伊藤。
10
自動化の前に考えるべきこと 「やみくもに」はダメ、つまり自動化の前に考えるべきことを考えましょう、という こと。 8原則にもあるように、「テスト分析」と「テスト設計」を適切に行う必要がある。 テスト分析:「何をテストするか」を決める テスト設計:「どのようにテストするか」を決める 参考:ソフトウェアテスト基礎講座 - 株式会社ベリサーブ 11
参考:「E2Eテスト」とは システムテスト?ユーザー受け入れテスト?UIテスト? 組織によって定義が異なる そして、業界統一の「正しい定義」もない 本セッションでは、システムをユーザーと同じように操作して行うテストで、か つユーザーストーリー単位で行うものをE2Eテストと呼ぶことにする ※組織でのE2Eテストの定義が本ページと異なっていても、実践編でテストを自動化す る際の技術要素は共通しているため、何らかお役には立つと思います 12
設計編の目次 1. やみくもにE2Eテストを自動化するとなぜ危険なのか 2. テスト自動化にあたって考える・工夫するべき点 3. 具体例 13
テスト自動化にあたって考える・工夫するべき点 何をテストするか どのようにテストするか 14
大前提:「E2Eテストの自動化」に閉じないこと E2Eテストをどう自動化するかという視点ではなく、開発・テストをどうしたいかを考 え、そのためにE2E自動テストがどうあるべきか、を検討しましょう。 単体テストや結合テストなど、自組織の各テストが担う役割 E2Eテストでは何を担保したいか、単体テスト・結合テスト・E2Eテストの棲 み分け 理想とする開発サイクル リリース頻度、CI/CDパイプライン、テストにかけられる時間、など 15
何をテストするか、を考えるポイント テストベースをもとに、どの機能(フィーチャ・シナリオ)をどこまでテストする か、を検討します。 E2Eテストで対象とする機能(フィーチャ・シナリオ) テスト対象のコアとなる機能 正常系の基本的なユーザシナリオ どこまでテストするか、の考え方 もし不具合が発生した場合にビジネス上の影響が大きい範囲 例)人数ベース:IE11を使っているのは3%だから対象外 例)金額ベース:ガラケーを使っているのは全体の5%だが、売上の30%
を占めているから対象 16
参考:一般的にE2Eテストとして自動化されるもの テスト対象のコアとなる機能 起動/終了、ログイン/ログアウト、課金・購入、など ビジネス上の影響が大きい機能やユーザシナリオ 会員登録、メルマガなど 17
どのようにテストするか、を考える際のポイント 各テストケース(シナリオ)で、どのように「テストしたいこと」を網羅するの か テスト技法の活用 自動で行う場合の効率 テストケース間の依存関係をなるべく減らす テストの実行単位を変える ※この検討の過程で「このテストは手動でやろう」などの判断も発生 18
設計編の目次 1. やみくもにE2Eテストを自動化するとなぜ危険なのか 2. テスト自動化にあたって考える・工夫するべき点 3. 具体例 19
具体例 ここからは具体的なサイトに対してE2Eテストを考えてみましょう 20
ホテル予約サイトのE2Eテストを考えよう テスト対象:HOTEL PLANISPHERE - テスト自動化練習サイト 条件設定 サイトは公開済み 機能追加やBugfix後のリリース前にリグレッションテストとしてE2Eテストを 行っているが、現在は手動 E2Eテストを自動化して効率化したい
21
ホテル予約サイトの機能を把握する ログイン ログアウト 新規会員登録 退会 アイコン変更 宿泊プラン予約 22
テストしたいこと、を検討する 基本的なユーザストーリーは最低限網羅したい 予約における金額計算が正しく行えていることを担保したい 各会員種別でプラン表示が適切にできているか、を確認したい 23
各テストレベルで行っていることを確認 単体テスト 金額計算ロジックのみ整備 hotel-example-site/billing_test.html 結合テスト なし 24
今回対象にする範囲 重要機能 ログイン・ログアウト、予約、会員登録 特に予約機能はサイトの主たる機能のため、会員種別ごとに予約可否を確認 E2Eでしかできないテスト 会員種別ごとのプラン表示確認 例)一般会員向けの画面にプレミアム会員専用のプランが表示されていない こと 25
ほんとにそれだけでいいの? テスト自動化はプロジェクトではない 「重要機能のテストを自動化できたら終わり」ではもちろんない 最初から「何をテストするか」のすべてを自動化しようと思うと失敗することも ある Spotify社のように、段階的に成熟していくという方法も 26
選定したユーザーシナリオ6つ 1. 非会員で予約 2. 会員登録→予約→ログアウト 3. プレミアム会員でログイン→予約→ログアウト 4. 一般会員でログイン→予約→ログアウト 5.
一般会員の画面にプレミアム会員限定プランが表示されないこと 6. 非会員の画面に一般・プレミアム会員限定プランが表示されないこと このうち、1番目の「非会員で予約」のシナリオを、具体的な手順として書き起こしま す 27
非会員で予約するシナリオの手順(1/2) 1. https://hotel.testplanisphere.dev/ja/ を開く 2. メニューから「宿泊予約」を選択 3. 宿泊プラン一覧から「お得な特典付きプラン」の「このプランで予約」を選択 4. 宿泊日を翌月1日に設定
5. 宿泊数を7泊に設定 6. 人数を2に設定 7. 朝食バイキング、昼からチェックインプラン、お得な観光プランを選択 8. 氏名に「テスト太郎」を入力 28
非会員で予約するシナリオの手順(2/2) 9. 確認のご連絡をメールに設定 10. メールアドレスに
[email protected]
を設定 11. ご要望・ご連絡事項に「テスト」と入力 12. 予約内容を確認するボタンを選択 13.
宿泊予約確認画面で、以下を確認 i. 合計金額が123,000円であること ii. 期間、人数、追加プラン、お名前、確認のご連絡、ご要望・ご連絡が入力通 りになっていること 14. この内容で予約するボタンを選択し、以下を確認 i. 予約が完了しましたダイアログが表示されること 29
手順化にあたって考えたポイント(1/2) 実行のたびに結果が変わらないようにする 休日と平日とで料金が異なるため、単純に翌月1日から宿泊にしただけでは金 額が可変になってしまう。7泊に設定することで、いつ実行しても同じ金額に なる 「任意の~」は避ける 自動テストを実装する際に困る 30
手順化にあたって考えたポイント(2/2) どのプランを選択するか 今回は非会員で選択できるプランで、かつ画面上の場所等から最も人気のプ ラン=予約できないとビジネス上の影響が大きいプランであると仮定し選択 31
ここからは、選定&手順化したテストケースについて、実際にコードを書いて自動化 していきましょう 32