Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SelenideよるDSL風E2Eテスト基盤開発の実例 in Osaka /Example_o...
Search
SHIMANE, Yoshikazu
August 05, 2017
Technology
1.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SelenideよるDSL風E2Eテスト基盤開発の実例 in Osaka /Example_of_E2E_Automation_Test_Architecture_By_Selenide_in_Osaka
SHIMANE, Yoshikazu
August 05, 2017
More Decks by SHIMANE, Yoshikazu
See All by SHIMANE, Yoshikazu
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
450
ソフトウェア開発温故知新 古典で紐解く、ソフトウェア開発の課題 / Software_Development:Learning_from_the_Past
shimashima35
0
91
入り口から考えるソフトウェアテストエンジニアのキャリア / Thinking_About_a_Software_Test Engineer's_Career_from_the_Starting_Point
shimashima35
0
1.9k
テスト技法を使ったテストケースの表現方法/How to express test cases using test techniques
shimashima35
0
1.5k
VSTePのテスト観点出しで失敗した事例についての紹介/Failure case of test viewpoint derivation
shimashima35
0
880
組織横断部門におけるバグ数可視化の全社導入の事例/Example_of_company-wide_bug_number_visualization in_cross-organizational_departments
shimashima35
1
410
JaSST Tokyo実行委員のお仕事/Job of JaSST executive committee
shimashima35
0
1k
What is “Quality” ?
shimashima35
0
1.1k
品質"実質"無料キャンペーン始めます / Start_quality_real_free_campaign
shimashima35
2
5.9k
Other Decks in Technology
See All in Technology
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.6k
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
3.3k
実践!既存 Project への AI-Driven Development 適用〜 一ヶ月で Project 唯一のフロントエンドエンジニアを作り出せ〜
lycorptech_jp
PRO
0
170
SRE本の知られざる名シーン / The Hidden Gems of Google SRE Book
nari_ex
1
420
CIで使うClaude
iwatatomoya
0
290
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
200
公式ドキュメントの歩き方etc
coco_se
1
120
大量データに対しても、生成AIを用いてリーズナブルにデータ加工をしたい!Databricksのai_queryについて調べてみた
kamoshika
1
210
Type-safe IaC for Dart
coborinai
0
160
カードゲーム作りが教えてくれた プロダクトオーナーシップ
moritamasami
0
110
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
210
AI Coding Agent時代のcdk-nagガードレール 〜組織ルールを強制CIで守り抜く設計の挑戦〜
mhrtech
3
390
Featured
See All Featured
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Paper Plane
katiecoart
PRO
2
52k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
340
YesSQL, Process and Tooling at Scale
rocio
174
15k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
180
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
260
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Music & Morning Musume
bryan
47
7.3k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
67
56k
Transcript
SelenideによるDSL風E2Eテスト基 盤開発の実例 in Osaka 関西Javaエンジニアの会 8/5 - Selenium 島根 義和
@shimashima35 https://srad.jp/~shimashima
はじめに • 社内で開発したWebDriver(Selenide)を使ったE2Eテスト基盤の実例を紹介します。 • 基本的にJavaが前提ですが、静的型付けのメリット以外は他言語でも利用可能で す。
注意 • Test Engeneer MeetUp #2 の発表内容がベースになっています。 • 基本的に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 で実現
None
Mix-inによる画面共通項目の一元化 サンプル
画面要素の細かいObject化 • 画面上の項目数が多い & コンテキスト(配置場所)違いで同じ名称が存在している • コンテキストをすべてClass化 (Page Objectのinner class)
• コンテキストへのアクセスはメソッド経由
None
None
疑似的なDSLのために、戻り値をObject化 • Selenideのように、IDEの力を借りるため • 戻り値をObjectにすることでIDEの補完機能が使える
デモ
終わりに • テスト自動化は大変ですが、様々な手法を使うことで苦労を軽減することができま す。 • IDEの力も、可能なかぎり借りましょう。 • 自動化はコストがかかるので、頼り過ぎには注意を。 • 目的をはっきりさせた上で使いましょう。
最初の実装 • 開発直後からすべてできていたわけではない。 • 以下は最初から対応。 ◦ 階層化Page Object Pattern ◦
Selenium/Selenideの直接操作の排除 ◦ 全面的な日本語メソッド化 • 残りは途中で改良 • 設計方針が決まれば実装はさほど手間ではない。
録画機能の追加 • ローカルで成功するがCI環境で失敗することは結構ある。 ◦ 明示的なwaitを入れていても。 • ログだけでは原因追求が難しいため、操作を録画する機能を追加。 • 基本的にすべての操作を録画しておき、テスト成功時には削除する。 ◦
つまり、失敗時の動画のみのこる。 • H.264やmpeg2などでは数分で200MByte程度。(記憶) • 画面キャプチャ用のコーデックを使うことで1/100程度に削減。 ◦ TechSmith Screen Capture Codec ◦ 録画用ライブラリはMonte Media Library • BrowserStackなどを使っていれば実は不要。
基盤作成のその後… • 当初目標大幅未達! • 基盤は作ったもののシナリオ実装が進まず。 ◦ 現在担当者不在。 • 実行基盤をAWSに移行したが、その結果録画が機能せず。 ◦
ローカルのフレームバッファーがないためだと思う。 • 現在メンテされず絶賛放置中。 ◦ でもJenkinsで定期実行はされています。 • 私も半年以上Selenide触っていません。
ご静聴ありがとうございました