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
FlutterのE2Eテスト導入に向けての検討(Maestro編)
Search
KATADA Yuta
June 03, 2024
Programming
690
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
FlutterのE2Eテスト導入に向けての検討(Maestro編)
KATADA Yuta
June 03, 2024
More Decks by KATADA Yuta
See All by KATADA Yuta
Claude Code GitHub Actionsを 活用したアラート初期分析の自動化を目指す!
yutaktd
0
390
Claude Code GitHub Actionsを使った Sentryエラー解析の自動化
yutaktd
0
460
Autofill DeepDive 〜パスワード入力・更新周りのUX向上を目指す!〜
yutaktd
1
140
Flutterにおけるマップ/ピン描画 -Flutterアプリケーション上での過密なピン情報の表示に挑戦-
yutaktd
0
640
Other Decks in Programming
See All in Programming
Go言語とトイモデルで学ぶTransformerの気持ち / fukuokago23-transformer
monochromegane
0
140
【やさしく解説 設計編・中級 #4】ルールの寿命と、システムの年輪
panda728
PRO
2
170
Lean は証明の正しさを確認するためだけのツールって思ってませんか?
inoueasei
1
120
20260722_microCMSで考える、AI時代のコンテンツ運用設計
yosh1
0
130
関数型プログラミングのメリットって何だろう?
wanko_it
0
200
Generative UI & AI-Assistants for Your Angular Solutions
manfredsteyer
PRO
1
250
torikago - Ruby::Boxで照らすモジュラモノリスの実行境界
se4weed
1
110
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
120
霧の中の代数的エフェクト
funnyycat
1
440
Android CLI
fornewid
0
190
AI時代の仕事技芸論〜ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ(スクフェス仙台 2026バージョン)
kuranuki
0
730
yield再入門 #phpcon
o0h
PRO
0
800
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Bootstrapping a Software Product
garrettdimon
PRO
307
120k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
430
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
B2B Lead Gen: Tactics, Traps & Triumph
marketingsoph
0
180
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
260
A Modern Web Designer's Workflow
chriscoyier
698
190k
How Fast Is Fast Enough? [PerfNow 2025]
tammyeverts
3
670
30 Presentation Tips
portentint
PRO
1
350
Transcript
Confidential © ENECHANGE Ltd. FlutterのE2Eテスト導入に向けての検討(Maestro編) FlutterのE2Eテスト作ってみた(Maestro編) 2024.05.29 Yuta KATADA 1
INDEX 目次 Confidential 目次 自己紹介 Flutterのテストについて Maestroでの実装 MaestroのTips Maestroを使ってみて、まとめ 01
02 03 04 05 06 2
Confidential 3 About Me Yuta Katada ENECHANGE株式会社 • 2023/12〜 FlutterエンジニアとしてENECHANGEにジョイン
◦ エネルギークラウド事業部/EVユニット • 2022/03〜 Flutterからモバイル開発をスタート • Swift/Kotlin修行中 • 🎮📕🎾🍺 @ktd_yuta GitHub: Yuta-KTD
Confidential 4 Flutterのテストについて
Confidential 5 Flutterのテストについて 引用元: https://docs.flutter.dev/testing/overview Flutterのテストには、以下のように階層分けされてます • Unit Test: 単一の関数/メソッド/クラスのテスト
• Widget Test: 単一のウィジェット(コンポーネント)のテスト • Integration Test: アプリ全体や複数機能を結合した状態のテスト 👈今回はこれ
Confidential 6 Flutterのテストについて 今回のPJでは、やりたいことや、メンバー特性、コストなどを考えた結果 • integration_test • Maestro を候補として、検証を行いました 私はMaestro検証を多めに行ったので、Maestroを触った所感や実装コストなどを考えてみました
Flutterのintegration_testの選択肢はいくつかあります • integration_test • Maestro • MagicPod • Autify etc….
Confidential 7 Flutterのテストについて “Maestro is the simplest and most effective
mobile UI testing framework.” Maestroは、最もシンプルで効果的なモバイルUIテストフレームワークです。 • Flowsと呼ばれるyamlファイル形式で記述を行う ◦ 宣言的にケースをかけて直感的で簡単 ◦ 対象のWidgetの選択は表示文字もしくはSemantic Labelで行う • OS表示のUI(権限確認ダイアログ等)も操作できる • Maestro Cloud を使うことでCI上での実行が可能 • 遅延を考慮しているので、基本的に sleep() を入れる必要はない https://maestro.mobile.dev/ https://blog.mobile.dev/introducing-maestro-painless-mobile-ui-automation-bee4992d13c1 Maestroの特徴は以下のとおりです
Confidential Maestroでの実装 8
Confidential 9 Maestroでの実装 プロダクトに落とし込む前にサンプルアプリで使い勝手を試しました 今回のプロダクトの特徴に合わせて以下機能を備えたアプリにしています • 位置情報の権限確認 • 擬似的なログインフォーム •
GoogleMapの表示 ローカルとGitHub Actionsでテストしました
Confidential 10 Maestroでの実装 • こんな感じで実装しました(部分的 & Androidのみ掲載) • API REFERENCEがあれば基本的な実装は一通り可能です
◦ tapOn ◦ inputText ◦ assert(Not)Visible
Confidential 11 Maestroでの実装
Confidential MaestroのTips 12
Confidential 13 MaestroのTips 1⃣ maestro hierarchy を使って実装外のLabelを特定する
Confidential 14 MaestroのTips 1⃣ maestro hierarchy を使って実装外 のLabelを特定する • maestro
hierarchy は表示中の画面要素を階層構造で表示 します • maestro hierarchy を使うことでOS標準のUI要素の semantic labelを特定することができる場合があります • 端末の言語やOSバージョン考慮不足の失敗を減らせる ◦ もちろんiOS/Androidごとに設定は必要なので注意 例: Androidの位置情報 com.android.permissioncontroller:id/permission_allow_foregrou nd_only_button
Confidential 15 MaestroのTips 2⃣ runFlow でFlowをまとめてコストを削減する
Confidential 16 MaestroのTips 2⃣ runFlow でFlowをまとめてコスト を削減する • runFlow はFlowの中で別のFlowを呼び出し実行するコマンド
• 連続したFlow実行は、runFlow以外に別ファイルのFlowをその まま実行する、2つの選択肢がある • Maestro CloudはFlowごとに 0.1$/回 という課金システム • runFlow で呼び出されたFlowはコストにカウントされない ◦ コスト削減が可能 • ただし1Flow実行は7分以内という制限があるので注意
Confidential 17 MaestroのTips 3⃣ takeScreenshot でエビデンスを取得する
Confidential 18 MaestroのTips 3⃣ takeScreenshot でエビデンスを取 得する • Flowコマンドの takeScreenshot
で指定したタイミングで スクショを撮影し、出力できる ◦ ローカル実行: 実行したディレクトリのルート ◦ Maestro Cloud: クラウドコンソール上 • テストエビデンスを残したい時に便利
Confidential 19 その他 • OSは Device Configuration 記載のバージョンであれば、Actionsのyamlで android-api-level、ios-versionで 指定可能
• 公式からWidget実装のTipsも提供されている ◦ Semanticsでラップしたボタンウィジェットを作り、leancode_lintライブラリで標準ボタン作成を抑制 するもの • 課金にはサブスク形式とクレジット購入形式がある • (気になったこと/ローカル限定)iOSで permissions: { all: unset } にしても通知権限がONのままだった ◦ 設定変更や再インストールで解決 ◦ (同じ現象にあった人いたらぜひ教えて欲しいです!)
Confidential Maestroを使ってみて、まとめ 20
Confidential 21 試してみた感想 https://patrol.leancode.co/ • かなり簡単にフロー作成ができる! ◦ 実行環境さえ作れば専門知識はほぼ不要 ◦ 事前キャッチアップが難しいPJなどに最適
• ローカル、CI環境ともに環境構築が簡単! • 「工夫次第」で変更に(ある程度)強いテストも作れる! • 変更に強いフロー作成を行うには、 階層構造でのFlow作成や maestro hierarchy を活用する必要がある • integration_testでもpatrolを使うことでOS由来のUIを触ることができるが、Maestroの方が環境構築や実際のテスト 記述のハードルが低い • 一方で、いくらSemantic Labelを指定してもintegration_testと比べると変更に弱かったり、設計手法も限られるので 一概にMaestroがいい!とは言えない • コスト面でもどうしても 0.1$/Flow は integration_test より高くつく...💸
Confidential 22 まとめ Maestroは実装・環境構築含めて簡単! プロジェクトのテスト要件にもよります が、ぜひ選択肢に加えてみるのはいかが でしょうか?
Confidential © ENECHANGE Ltd.