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

17
Selenium WebDriver + Python で E2Eテスト自動化 2017年3月24日 株式会社ジャストシステム EPS事業部商品開発部 小池恵理

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

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

Selenium WebDriver + Python

で E2Eテスト自動化

2017年3月24日株式会社ジャストシステム

EPS事業部商品開発部 小池恵理

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

背景

1

自己紹介

BtoB向けWebアプリケーションの開発担当(主にフロント)。

JUST.SFAの品質保証担当。一環としてテスト自動化の検討~実施。

JUST.SFA 営業管理システム(クラウドサービス)

ユーザー企業の業務に直結。品質重要。

多機能で用途に合わせてカスタマイズできる。組み合わせが膨大。

機能拡張・追加したい。リリース頻度上げたい。

E2E(End to End)テストを自動で実行~検証することで、

外部仕様どおりの動作を保証しながら開発を進めたい。

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

2

E2Eテスト自動化の難しさ①

操作を「実装する」

• 「手動テストをそのまま繰り返し実行できる」わけではない

• よくある誤解

• 「記録・再生するだけ」という認識の人への説得が必要

• 「どの要素」を「どう操作するか」の実装

• 例:「保存ボタン」を「クリックする」

• 画面上からの要素取得(CSS Selector、XPath)

• タイミング問題(waitの設定)

• バグではなくてもテストが失敗する場合はある

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

3

E2Eテスト自動化の難しさ②

何を正解とするか?どう検証するか?

• 正解データとする画像との比較

→ 安定しない

• 要素から取得される値の比較

検証したい内容について、どの要素の値がどうなっていれば

正解とするかを検討し実装する必要がある。

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

4

方針

「操作」「検証」の内容を限定することが重要。

同じ「操作」「検証」を実装し、入力値を変えることで、手

動テストでは困難な多くの組み合わせについての自動検証を

可能とする。(データ駆動テスト)

login(username,password)

open_panel(panel_id)

assert_panel_name()

シナリオ データ

# username password panel_id

001 user0001 11111111 1

002 user0002 22222222 2

・ ・ ・ ・

・ ・ ・ ・

入力

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

5

本発表のタイトル

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

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

Selenium WebDriver

ブラウザ上の操作を実現するライブラリ。

ブラウザ自動テストツールとして最もメジャーで、フリーで使える。

主要言語で提供されている。

Java / C# / Ruby / Python / Javascript

6

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

7

Python

テストスクリプトはプロダクトとは完全に切り離して実装するため、プ

ロダクトと同一言語である必要はない。

テストフレームワークを利用する。

• 標準のunittestは使いづらいのでpytestを採用。

• 結果をJUnit形式で出力してくれる。

• Jenkinsと連携して結果表示できる。

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

フォルダ構成

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パターンの適用

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

テストランナー

9

test_runner.yaml

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

データ

10

data/case_A001.yaml data/case_A002.yaml

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

シナリオ

11

senario/senairoA.py senario/senairoB.py

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

シナリオ(継承元)

12

senario/base.py

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

ページ

13

page/main.py

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

14

実行~結果の確認

以下のコマンドでテストを実行。

Jenkins上で結果表示までできる。

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

CIに組み込む

自動テストを形骸化させないために、重要。

15

検証対象環境

自動テスト実行環境担当者

①データの初期化、最新版への更新

②テスト実行

③テスト結果

レポート

④NGあれば

アラート

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

E2Eテスト自動化 ポイント

16

特徴

「操作」「検証」の実装が必要。

バグではなくてもテストNGとなる場合はある。

方針

自動検証の範囲を限定する。

スクリーンショットで検証しない。(エビデンスとして利用)

保守性を考慮した設計にする。(データ駆動テスト、PageObject

パターン)

CIに組み込み、テストNGを放置せずに解決する。(NGケースを再

実行できる設計、担当者のアサイン)