SlideShare ist ein Scribd-Unternehmen logo
1 von 17
Selenium WebDriver + Python
で E2Eテスト自動化
2017年3月24日
株式会社ジャストシステム
EPS事業部商品開発部 小池恵理
背景
1
自己紹介
BtoB向けWebアプリケーションの開発担当(主にフロント)。
JUST.SFAの品質保証担当。一環としてテスト自動化の検討~実施。
JUST.SFA 営業管理システム(クラウドサービス)
ユーザー企業の業務に直結。品質重要。
多機能で用途に合わせてカスタマイズできる。組み合わせが膨大。
機能拡張・追加したい。リリース頻度上げたい。
E2E(End to End)テストを自動で実行~検証することで、
外部仕様どおりの動作を保証しながら開発を進めたい。
2
E2Eテスト自動化の難しさ①
操作を「実装する」
• 「手動テストをそのまま繰り返し実行できる」わけではない
• よくある誤解
• 「記録・再生するだけ」という認識の人への説得が必要
• 「どの要素」を「どう操作するか」の実装
• 例:「保存ボタン」を「クリックする」
• 画面上からの要素取得(CSS Selector、XPath)
• タイミング問題(waitの設定)
• バグではなくてもテストが失敗する場合はある
3
E2Eテスト自動化の難しさ②
何を正解とするか?どう検証するか?
• 正解データとする画像との比較
→ 安定しない
• 要素から取得される値の比較
検証したい内容について、どの要素の値がどうなっていれば
正解とするかを検討し実装する必要がある。
4
方針
「操作」「検証」の内容を限定することが重要。
同じ「操作」「検証」を実装し、入力値を変えることで、手
動テストでは困難な多くの組み合わせについての自動検証を
可能とする。(データ駆動テスト)
login(username,password)
open_panel(panel_id)
assert_panel_name()
シナリオ データ
# username password panel_id
001 user0001 11111111 1
002 user0002 22222222 2
・ ・ ・ ・
・ ・ ・ ・
入力
5
本発表のタイトル
Selenium WebDriver + Python で
E2Eテスト自動化
Selenium WebDriver
ブラウザ上の操作を実現するライブラリ。
ブラウザ自動テストツールとして最もメジャーで、フリーで使える。
主要言語で提供されている。
Java / C# / Ruby / Python / Javascript
6
7
Python
テストスクリプトはプロダクトとは完全に切り離して実装するため、プ
ロダクトと同一言語である必要はない。
テストフレームワークを利用する。
• 標準のunittestは使いづらいのでpytestを採用。
• 結果をJUnit形式で出力してくれる。
• Jenkinsと連携して結果表示できる。
フォルダ構成
8
rootdir/
├test_runner.py
├data/
│ ├case_A001.yaml
│ ├case_A002.yaml
│ └…
├senario/
│ ├base.py
│ ├senarioA.py
│ ├senarioB.py
│ └…
└page/
├login.py
├main.py
└…
テストランナー
テストケースA001のデータ(yaml)
シナリオの継承元。シナリオ間共通処理。
シナリオA(「操作」「検証」のフロー)
ログイン画面のページオブジェクト
メイン画面のページオブジェクト
PageObjectパターンの適用
テストランナー
9
test_runner.yaml
データ
10
data/case_A001.yaml data/case_A002.yaml
シナリオ
11
senario/senairoA.py senario/senairoB.py
シナリオ(継承元)
12
senario/base.py
ページ
13
page/main.py
14
実行~結果の確認
以下のコマンドでテストを実行。
Jenkins上で結果表示までできる。
CIに組み込む
自動テストを形骸化させないために、重要。
15
検証対象環境
自動テスト実行環境担当者
①データの初期化、最新版への更新
②テスト実行
③テスト結果
レポート
④NGあれば
アラート
E2Eテスト自動化 ポイント
16
特徴
「操作」「検証」の実装が必要。
バグではなくてもテストNGとなる場合はある。
方針
自動検証の範囲を限定する。
スクリーンショットで検証しない。(エビデンスとして利用)
保守性を考慮した設計にする。(データ駆動テスト、PageObject
パターン)
CIに組み込み、テストNGを放置せずに解決する。(NGケースを再
実行できる設計、担当者のアサイン)

Weitere ähnliche Inhalte

Was ist angesagt?

探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
H Iseri
 

Was ist angesagt? (20)

MagicOnion入門
MagicOnion入門MagicOnion入門
MagicOnion入門
 
キーワード駆動によるシステムテストの自動化について 2015
キーワード駆動によるシステムテストの自動化について 2015キーワード駆動によるシステムテストの自動化について 2015
キーワード駆動によるシステムテストの自動化について 2015
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
「龍が如く7 光と闇の行方」の自動テスト活用事例とテスト自動化チーム(仮)による若手育成の取り組みについて
 
テストコードの DRY と DAMP
テストコードの DRY と DAMPテストコードの DRY と DAMP
テストコードの DRY と DAMP
 
探索的テスト入門
探索的テスト入門探索的テスト入門
探索的テスト入門
 
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
nginx入門
nginx入門nginx入門
nginx入門
 
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
 
【Unity】 Behavior TreeでAIを作る
 【Unity】 Behavior TreeでAIを作る 【Unity】 Behavior TreeでAIを作る
【Unity】 Behavior TreeでAIを作る
 
KLabのエンジニアを支えるカルチャー
KLabのエンジニアを支えるカルチャーKLabのエンジニアを支えるカルチャー
KLabのエンジニアを支えるカルチャー
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
 
シリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのかシリコンバレーの「何が」凄いのか
シリコンバレーの「何が」凄いのか
 
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
「龍が如くスタジオ」のQAエンジニアリング技術を結集した全自動バグ取りシステム
 
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
 
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
Flutterで単体テストを行う方法とGitHub Actionsを使った自動化
 
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
ドメイン駆動設計 ~ユーザー、モデル、エンジニアの新たな関係~
 
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
CEDEC2021 Android iOS 実機上での自動テストをより楽に有意義にする為に ~端末管理・イメージ転送・動画記録等の周辺情報のノウハウ共有~
 

Andere mochten auch

Andere mochten auch (7)

#nds47 WebのテストをPythonでやってエビデンス取得作業から開放?
#nds47 WebのテストをPythonでやってエビデンス取得作業から開放?#nds47 WebのテストをPythonでやってエビデンス取得作業から開放?
#nds47 WebのテストをPythonでやってエビデンス取得作業から開放?
 
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
UX実現に向けた社内の取り組みについて-訴求ファーストによる商品開発-
 
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
インパス! あのこれダメッス! ~Javaコードレビューの指摘ポイント10選~
 
TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用TypeScriptの大規模開発への適用
TypeScriptの大規模開発への適用
 
JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践JustTechTalk#10 React開発における自動テスト実践
JustTechTalk#10 React開発における自動テスト実践
 
JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例JustTechTalk#10windowsアプリでのテスト自動化事例
JustTechTalk#10windowsアプリでのテスト自動化事例
 
AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用AWS運用における最適パターンの徹底活用
AWS運用における最適パターンの徹底活用
 

Ähnlich wie Selenium WebDriver + python で E2Eテスト自動化

APIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッドAPIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッド
友隆 浅黄
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
Ohishi Mikage
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
Kinji Akemine
 
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
智治 長沢
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
yasuohosotani
 

Ähnlich wie Selenium WebDriver + python で E2Eテスト自動化 (20)

【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST
【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST
【JaSST'14 Tokyo】システムテストの自動化による 大規模分散検索プラットフォームの 開発工程改善 #JaSST
 
【短縮版】OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
【短縮版】OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化【短縮版】OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
【短縮版】OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
 
OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
OSSのブラウザ自動テストツール「Selenium」を使った、開発・テストの効率化
 
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
20131201 テスト自動化カンファレンスLT「激しいUI変更との戦い」
 
APIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッドAPIテスト自動化とテストピラミッド
APIテスト自動化とテストピラミッド
 
【JaSST'11 Tokyo】 テスト イノベーション
【JaSST'11 Tokyo】 テスト イノベーション【JaSST'11 Tokyo】 テスト イノベーション
【JaSST'11 Tokyo】 テスト イノベーション
 
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
開発ビギナーだけじゃない!インフラエンジニア & マネージャー にも知ってほしいテスト自動化と品質管理
 
【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック【Agile Conference tokyo 2011】 継続的フィードバック
【Agile Conference tokyo 2011】 継続的フィードバック
 
Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。Win7 * appium * androidで実機自動テストやってみた。
Win7 * appium * androidで実機自動テストやってみた。
 
20170710 hifive-test-meetup
20170710 hifive-test-meetup20170710 hifive-test-meetup
20170710 hifive-test-meetup
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
 
TABOK Skill Category2解説
TABOK Skill Category2解説TABOK Skill Category2解説
TABOK Skill Category2解説
 
【XDev】A-2 アジリティ向上のためのツール活用
【XDev】A-2 アジリティ向上のためのツール活用【XDev】A-2 アジリティ向上のためのツール活用
【XDev】A-2 アジリティ向上のためのツール活用
 
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】 Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
Team Foundation Server ~ 今を生きるエンジニアのための開発基盤とは 【BPStudy #63】
 
Automation test.ssf alpha
Automation test.ssf alphaAutomation test.ssf alpha
Automation test.ssf alpha
 
Gui自動テストツール基本
Gui自動テストツール基本Gui自動テストツール基本
Gui自動テストツール基本
 
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
【JaSST'11 Kansai】 開発者とテスト担当者に最適なコラボレーションと効率化を!
 
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
iOSアプリ開発のテスト環境 - テストをはじめる最初の一歩 -
 
アジャイル×テスト開発を考える
アジャイル×テスト開発を考えるアジャイル×テスト開発を考える
アジャイル×テスト開発を考える
 
Azureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめようAzureを使って手軽にブラウザテストの自動化をはじめよう
Azureを使って手軽にブラウザテストの自動化をはじめよう
 

Mehr von JustSystems Corporation

Mehr von JustSystems Corporation (20)

Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
 
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
「技術内閣制度」〜2年間やってきて得られた事とこれから〜 #devsumi
 
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
事業に貢献する商品開発と その成長の仕組み作り ~これからのエンジニアに必要とされるスキルとは~
 
現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン現役23名のPM:タイプ別マネジメントパターン
現役23名のPM:タイプ別マネジメントパターン
 
JavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみたJavaでインメモリSQLエンジンを作ってみた
JavaでインメモリSQLエンジンを作ってみた
 
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
DDDとクリーンアーキテクチャでサーバーアプリケーションを作っている話
 
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献JustTechTalk#11_スマイルゼミ顧客満足度への貢献
JustTechTalk#11_スマイルゼミ顧客満足度への貢献
 
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
ピュアJavaだと思った?残念androidでした~いつからAndroidをJavaだと錯覚していた?~
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
 
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
「書ける」から「できる」になれる! ~Javaメモリ節約ノウハウ話~
 
ジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組みジャストシステムのDevOps実例 今後の取り組み
ジャストシステムのDevOps実例 今後の取り組み
 
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
 
Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.Kotlin is charming; The reasons Java engineers should start Kotlin.
Kotlin is charming; The reasons Java engineers should start Kotlin.
 
CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?CSSレイアウトでなぜ失敗するか?
CSSレイアウトでなぜ失敗するか?
 
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
「訴求ファースト」と「こだわり駆動開発」~教育、医療、もの書き市場で戦うプロダクトマネージャーの考え方~
 
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
メンバーのスキルアップ、どうしてる? − Java 100本ノックで新加入メンバーを鍛えてみた −
 
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
ArrayListをじっくり読んでみた - JavaコアSDKを読む会を社内でやって気づいたこと -
 
ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
ATOK Spark のご紹介とJavaによるプラグイン開発について
ATOK Spark のご紹介とJavaによるプラグイン開発についてATOK Spark のご紹介とJavaによるプラグイン開発について
ATOK Spark のご紹介とJavaによるプラグイン開発について
 
スマイルゼミの裏側(db編)
スマイルゼミの裏側(db編)スマイルゼミの裏側(db編)
スマイルゼミの裏側(db編)
 

Selenium WebDriver + python で E2Eテスト自動化

Hinweis der Redaktion

  1. それでは、Selenium WebDriverとPythonでE2Eテスト自動化のお話しをさせていただきます。小池です。よろしくお願いします。
  2. まず簡単に自己紹介ですが、私自身はBtoB向けのWebアプリケーションの開発を行っていました。 直近1年ほどは営業管理システムのJUST.SFAの品質保証担当になり、その一環としてテスト自動化の検討から実施までを行っています。 ・ JUST.SFAですが、不具合によってはユーザーの業務が止まってしまうこともあるので、品質は非常に重要です。 また、様々な機能が使えてかつ用途に合わせたカスタマイズができる、という商品性のため、設定できる組み合わせが膨大となっています。 さらに、昨年7月にリリースした商品であることもあり、今後機能追加をどんどん行うため、リリース頻度を上げたいという要件もあります。 ・ そのため、テストの自動化が望まれますが、多機能で組み合わせ多数ということもあり、単体テストだけではカバーが難しいため、 E2Eテストの自動化を行うことになりました。 E2Eテストとは、画面上の操作から画面上のアウトプットでの検証のことで、外部仕様を満たすことを確認するものになります。
  3. E2Eテストの自動化ですが、難しいものです。 ・ まず、操作を「実装する」必要があると言うことが上げられます。 よくある誤解として、ブラウザ上での操作を記録・再生するだけではないのか?という考えを持っている人がいますが、実際は 「どの要素」を「どう操作するか」の実装をしていく必要があります。 ・ たとえば、保存ボタンをクリックするためには、保存ボタンをCSS SelectorやXpathで取得し、その要素に対してクリックを実行する というのをスクリプトで書いていくことになります。 また、操作は1つの操作で完結することはなく、基本的にはステップを踏むものになります。 たとえば、編集画面を表示して、フォームの入力値を変更して、保存ボタンを押して、閲覧画面が表示される、といった形です。 このときに、タイミング問題として、次の操作をするときにまだ描画が完了していない、ということが発生することがあります。 編集画面を表示した後、まだ表示されていない入力フォームにキー入力しようとすると、要素が見つからずにテストが失敗してしまいます。 これは操作と操作の間にwaitを入れることで回避しますが、このような問題でテストが失敗する場合がある、というのは 前提として考えておく必要があります。
  4. また、何を正解とするか?どう検証するか?を検討して実装する必要がある、というのも難しさの1つです。 よく出てくる話として画像比較がありますが、これは肉眼では全く同じに見える場合でもピクセル単位のずれが多く発生してしまう場合が多々あり、安定しません。 そのため、要素から取得される値を比較する必要がありますが、このためには操作と同様の実装に加えて、その値がどうなっていればテストOKとするか、というのを検討する必要があります。
  5. これらを踏まえると、方針としては「操作」「検証」の内容を限定することが重要になります。 この中で効果を出すために、データのパターンに対して同じ操作手順を繰り返し行う必要があるようなテストに限定します。 操作手順をシナリオとしてスクリプトで実装し、そこにデータを食わせていくことで、手動では困難な膨大なパターンに対するテストを自動で行える様になります。
  6. ここからはタイトルの内容について、実装部分を説明します。
  7. まず、Selenium WebDriverですが、これは自動化ツールとして最もメジャーなものですが、ブラウザ上の操作を実現するライブラリと考えると良いと思います。 主要言語で提供されています。
  8. テストスクリプトはブラウザとは完全に切り離して実装するため、好きな言語を使えます。 今回の場合、Pythonを選択しました。 それと、自動テストなのでテストフレームワークを利用すると良いです。 今回はpytestを利用します。 pytestはテスト結果をjUnit形式で出力してくれるので、CIと連携して結果の表示もできます。
  9. フォルダ構成としてはこのようになっています。 テストランナーで、テストケースを表すデータを読み込み、対象のシナリオで実行します。 また、Seleniumの王道のデザインパターンであるPageObjectパターンも利用します。 画面をオブジェクトと扱うことで、特定の要素に対する操作を一元管理できます。 今回、テストケースに関してはyamlで記述します。 シナリオはそれぞれスクリプトで書いていきますが、共通処理をかいたClassを全シナリオに継承させる、ということをしています。
  10. 具体的なスクリプトも紹介したいのですが、時間の都合上省略します。発表資料は後程公開しますので、詳細はそちらでご確認ください。
  11. このように実装したものを、以下のコマンドで実行できます。 JUnit形式の結果出力をオプションで指定しています。 Jenkinsではこのように結果を一覧で見ることができます。
  12. これをCIに組み込むことですが、自動テストを形骸化させないために、非常に重要になります。 1日1回自動実行させるようにして、テストNGがあれば担当者に通知します。 テストNGを必ず解決することも重要です。
  13. 最後に、E2Eテストのポイントをまとめておきます。 以上です。ありがとうございました。