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
380
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.5k
迷いながらも前に進むための テスト自動化ツールの選定ポイント
yoshikiito
2
660
ソフトウェアテスト自動化、一歩前へ
yoshikiito
7
2.7k
テストエンジニアのための初めてのプログラミング
yoshikiito
0
530
テスト自動化Learn&Unlearn
yoshikiito
0
3.6k
テスト自動化プロジェクトを支える技術と仕組み
yoshikiito
2
3.2k
テスト自動化チームでペアプロにトライした話 / trying to pair programming on test automation team
yoshikiito
0
900
テスト自動化とお掃除ロボット
yoshikiito
0
4.2k
抜け出そう、テスト自動化あるある
yoshikiito
4
6k
Other Decks in Technology
See All in Technology
コンテナセキュリティのためのLandlock入門
nullpo_head
2
320
Wvlet: A New Flow-Style Query Language For Functional Data Modeling and Interactive Data Analysis - Trino Summit 2024
xerial
1
120
オプトインカメラ:UWB測位を応用したオプトイン型のカメラ計測
matthewlujp
0
170
DevOps視点でAWS re:invent2024の新サービス・アプデを振り返ってみた
oshanqq
0
180
サイボウズフロントエンドエキスパートチームについて / FrontendExpert Team
cybozuinsideout
PRO
5
38k
kargoの魅力について伝える
magisystem0408
0
210
re:Invent をおうちで楽しんでみた ~CloudWatch のオブザーバビリティ機能がスゴい!/ Enjoyed AWS re:Invent from Home and CloudWatch Observability Feature is Amazing!
yuj1osm
0
120
How to be an AWS Community Builder | 君もAWS Community Builderになろう!〜2024 冬 CB募集直前対策編?!〜
coosuke
PRO
2
2.8k
サービスでLLMを採用したばっかりに振り回され続けたこの一年のあれやこれや
segavvy
2
420
AWS re:Invent 2024で発表された コードを書く開発者向け機能について
maruto
0
190
サーバレスアプリ開発者向けアップデートをキャッチアップしてきた #AWSreInvent #regrowth_fuk
drumnistnakano
0
190
サイバー攻撃を想定したセキュリティガイドライン 策定とASM及びCNAPPの活用方法
syoshie
3
1.3k
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
266
13k
Site-Speed That Sticks
csswizardry
2
190
Why Our Code Smells
bkeepers
PRO
335
57k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
2
290
A Tale of Four Properties
chriscoyier
157
23k
Building an army of robots
kneath
302
44k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
26
1.9k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Testing 201, or: Great Expectations
jmmastey
40
7.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
665
120k
Optimizing for Happiness
mojombo
376
70k
Producing Creativity
orderedlist
PRO
341
39k
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