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