selenium webdriver + python で e2eテスト自動化
TRANSCRIPT
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ケースを再
実行できる設計、担当者のアサイン)