2017年3月7日 Test Engineers Meetup #2 SelenideによるDSL風E2Eテスト基盤開発の実例
SelenideによるDSL風E2Eテスト基盤開発の実例アカウンティング・サース・ジャパン島根 義和@shimashima35 https://srad.jp/~shimashima
View Slide
はじめに● 社内で開発したWebDriver(Selenide)を使ったE2Eテスト基盤の実例を紹介します。● 基本的にJavaが前提ですが、静的型付けのメリット以外は他言語でも利用可能です。
注意● 基本的にQiitaで公開した内容と同じです。○ http://qiita.com/shimashima35/items/6d39be9a4fea05dcc84f
Selenideとは?● JavaのSelenium WebDrvierラッパーライブラリ。● http://selenide.org/● WebDriverの実装を抽象化し、UI Testに特化したAPIを提供している。● 読みやすいAPI。● IDEによるサポートを意識した作り。
基盤開発の目的● 高い保守性● 高い生産性● 可能であれば仕様策定者が自分でテストをかけるようにする
階層化Page Object Pattern導入● 一般的なPage Object Patternを拡張○ BasePage■ 抽象クラス■ セレクタのみが記述される■ WebDriver/Selenide API依存■ メソッドシグネチャにも Selenideの型が現れる○ Page■ 具象クラス■ 抽象化した画面操作 APIを提供する層■ メソッドシグネチャは Java標準APIの型のみ
階層化Page Object Pattern導入 サンプル
Selenium/Selenideの直接操作の排除● テストシナリオでSelenium/Selenideの実装を隠蔽する。○ シナリオの注力する○ 実装隠蔽による変更耐性向上○ 特別なAPI学習の必要性を排除
全面的な日本語メソッド化● 税務・会計・給与を対象しているため○ 一般的なWeb画面に比べて入力項目が多数○ 似たような名前で且つ業務的に特殊な用語が使われることが多い○ 日本語化することで画面の項目とメソッド名とのギャップを埋める● 非プログラマでもテストをかけるように○ 心理的障壁をさげる
全面的な日本語メソッド化 サンプル
疑似Builder Patternによるデータ登録● ユーザ登録などで入力項目が多数になる● シナリオで記述は大変● 共通メソッド化を行うにしても引数が多い、また入力しなくても良い項目の存在● Builder Patternを導入することでわかりやすくする
疑似Builder Patternによるデータ登録 サンプル
Mix-inによる画面共通項目の一元化● 画面単位の処理はPage Objectで対応● 画面横断的な処理はどうするか?● Mix-inで対応● Java8 interface の default method で実現
Mix-inによる画面共通項目の一元化 サンプル
画面要素の細かいObject化● 画面上の項目数が多い & コンテキスト(配置場所)違いで同じ名称が存在している● コンテキストをすべてClass化 (Page Objectのinner class)● コンテキストへのアクセスはメソッド経由
疑似的なDSLのために、戻り値をObject化● Selenideのように、IDEの力を借りるため● 戻り値をObjectにすることでIDEの補完機能が使える
デモ
終わりに● テスト自動化は大変ですが、様々な手法を使うことで苦労を軽減することができます。● IDEの力も、可能なかぎり借りましょう。● 自動化はコストがかかるので、頼り過ぎには注意を。● 目的をはっきりさせた上で使いましょう。
ご静聴ありがとうございました