Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Flutterアプリの E2Eテストツール事情
Search
mwakizaka
August 25, 2023
Technology
3.7k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Flutterアプリの E2Eテストツール事情
https://yumemi.connpass.com/event/292426/
https://trident-qa.connpass.com/event/291424/
mwakizaka
August 25, 2023
More Decks by mwakizaka
See All by mwakizaka
Appiumテストの失敗原因調査のコツと実践
mwakizaka
0
97
MagicPodでFlutter アプリをテストする
mwakizaka
0
2.5k
Other Decks in Technology
See All in Technology
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
290
ADKで始める業務改善 - AIエージェント開発時の考えと設計
harappa80
2
280
AI感のないAWS構成図をAIエージェントに描かせたい!
sagochiko
1
340
人にやさしく、AIにやさしく、書き手を選ばないIaCのガードレール再考 / Rethinking IaC Guardrails for Humans and AI Alike
kohbis
5
910
C#コードの結合を可視化する Roslyn解析による設計改善と リファクタリング判断
dora56
0
600
JSONataとAWS Step Functionsで目指すRuntimelessな世界
mu7889yoon
0
490
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.7k
Vibe Coding で作ったプロダクトをどう安全に動かすか / How to Safely Run Products Built with Vibe Coding
glidenote
0
560
エージェントはローカル、検証はMicroVM — Lambda MicroVMsでつくるServerless CI
fujioka6789
3
780
品質と信頼性を地続きにする
grimoh
2
990
CLIライブラリ開発を支える技術
htnabe
0
150
AgentCore Runtime上にAgentic Coding基盤を構築・展開する際の設計ポイントと限界点 / Design considerations and limitations when building an agentic coding platform on AgentCore Runtime
har1101
6
750
Featured
See All Featured
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
340
A Soul's Torment
seathinner
8
3.6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
The Limits of Empathy - UXLibs8
cassininazir
1
690
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
31k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
470
[SF Ruby Conf 2025] Rails X
palkan
3
1.4k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.2k
A Tale of Four Properties
chriscoyier
163
24k
Transcript
Flutterアプリの E2Eテストツール事情 2023.08.25
About me • 脇坂 雅幸 (Wakizaka Masayuki) • ソフトウェアエンジニア at
MagicPod • 経歴: iPhoneアプリ開発 -> テスト⾃動化エンジニア -> テストエンジニア -> テストマネジャー -> 現職 • OSS: Appium/Chronium/Android コントリビューター • テニス歴: 6年 (とある草⼤会でついに優勝)
MagicPod • Web & モバイルアプリのE2Eテスト⾃動化SasS • ノーコードで簡単にテスト作成 • 豊富なコマンドと柔軟性とメンテナンス性が強み @MagicPodJP
エキスパートが作ったテストツール 著者 翻訳者 コミッター
ユーザー様のブログ記事‧発表 MagicPod実⾏後の本番デプロイを ⾃動化するための⾃作GitHub Actions みてねのE2E⾃動テスト導⼊戦略 アプリのテストに MagicPodを導⼊している話 【インターンレポート】⾃動テストを 実装したら衝撃を受けた学⽣の話 Ubieのアプリ開発を⽀える
MagicPodを使った⾃動テスト テスト⾃動化初⼼者がノーコードツール 「MagicPod」でテスト⾃動化に挑戦してみた
本⽇のお話 • integration_test はFlutterアプリ開発者には⼿軽に使える 選択肢ですが、システムのUI要素の操作等に苦しみます • システムのUI要素等を操作したい場合の選択肢を紹介します • MagicPodによるFlutterアプリサポートの近況もご紹介します •
(なお、すみません、今回はFlutter for webは対象外です)
1. テスト⾃動化ピラミッド 2. Flutterアプリのテストと課題 3. Flutterアプリ向けの E2Eテストツール5選
1. テスト⾃動化ピラミッド 2. Flutterアプリのテストと課題 3. Flutterアプリ向けの E2Eテストツール5選
テスト⾃動化ピラミッド 1. テスト⾃動化ピラミッド 初めての⾃動テスト 1章 UI test Integration test Unit
test 細かいロジックを⾼速にテスト 統合部分のチェックには不向き ユーザ操作と同じ、 End to Endのテスト スピード‧安定性に⽋ける サービス層(Web APIなど) のテスト UIテストの⽋点を補うが 詳細さには⽋ける • 異なるレベルのテストをそれぞれ適量作り込むことを推奨するモデル • Unit testを厚くすることで開発のアジリティを確保できる
テスト⾃動化ピラミッド ⾃信⼤ ⾼アジリティ • テスト⾃動化ピラミッドは⾃信とアジリティのトレードオフ 1. テスト⾃動化ピラミッド UI test Integration
test Unit test
• テスト⾃動化ピラミッドは⾃信とアジリティのトレードオフ テスト⾃動化ピラミッド 今⽇のテーマは この層 1. テスト⾃動化ピラミッド ⾃信⼤ ⾼アジリティ UI
test Integration test Unit test
1. テスト⾃動化ピラミッド 2. Flutterアプリのテストと課題 3. Flutterアプリ向けの E2Eテストツール5選
Flutterアプリのテスト 2. Flutterアプリのテストと課題 • ユニットテスト: 関数やメソッド、クラス単位で実施するテスト • ウィジェットテスト: ウィジェット単位で実施するテスト •
インテグレーションテスト: 端末にアプリをインストールして実施するUIテスト ユニットテスト ウィジェットテスト インテグレーションテスト ⾃信の度合い 少ない ⾼め 最も⾼い メンテナンスコスト 少ない ⾼め 最も⾼い 依存度合い 少ない 多め 最も多い 実⾏速度 速い 速い 遅い https://docs.flutter.dev/testing/overview
Flutter公式のテストパッケージ 2. Flutterアプリのテストと課題 • test: 各テストレベルで必要なコアAPIを提供 • flutter_test: ウィジェットテストに必要な APIを提供
ファインダー(*)という仕組みでウィジェットを操作できる • flutter_driver: Flutterアプリを実機やシミュレーター/エミュレーター上 で実⾏するためのAPIを提供 • integration_test: インテグレーションテストに必要なAPIを提供 *: Flutterアプリ内のウィジェットを識別し、取得する⽅法。Selenium/Appiumでいうロケーターのようなもの
Flutter公式のテストパッケージ 2. Flutterアプリのテストと課題 • test: 各テストレベルで必要なコアAPIを提供 • flutter_test: ウィジェットテストに必要な APIを提供
ファインダー(*)という仕組みでウィジェットを操作できる • flutter_driver: Flutterアプリを実機やシミュレーター/エミュレーター上 で実⾏するためのAPIを提供 • integration_test: インテグレーションテストに必要なAPIを提供 • integration_test は後発のパッケージ • flutter_driver からintegration_testへの移⾏が推奨されている (Migrating from flutter_driver) *: Flutterアプリ内のウィジェットを識別し、取得する⽅法。Selenium/Appiumでいうロケーターのようなもの
Flutterアプリのテスト⾃動化ピラミッド 2. Flutterアプリのテストと課題 Integration test by integration_test Widget test by
flutter_test Unit test by test
Flutterアプリにおけるインテグレーションテストの課題 • Flutterのintegration_test パッケージは システムのUI要素を操作することができない(*) - 例えば、位置情報取得ダイアログやプッシュ通知 の許可ダイアログ • WebView要素も同様に操作することができない
2. Flutterアプリのテストと課題 *: https://github.com/flutter/flutter/issues/86295
1. テスト⾃動化ピラミッド 2. Flutterアプリのテストと課題 3. Flutterアプリ向けの E2Eテストツール5選
システムのUI要素を操作可能なE2Eテストツール 1. Appium 2. Appium Flutter Driver 3. Patrol 4.
Maestro 5. MagicPod 3. Flutterアプリ向けのE2Eテストツール5選
1. Appium • モバイル向けではお馴染みのテスト⾃動化フレームワーク • クライアントサーバモデルで動作する • 初期のFlutterのUIはAppiumとの相性が悪かったらしく(*) 、 敬遠されがちであった
• 最近はFlutter側の改善(**) により、実⽤性が向上している 3. Flutterアプリ向けのE2Eテストツール5選 *: 例えば、画⾯のUI要素が取得できなかったり、⽂字⼊⼒ができなかったりした https://github.com/flutter/flutter/issues/17988, https://github.com/flutter/flutter/issues/18060, https://github.com/appium/appium/issues/14713 **: Flutter 3.0から iOS実機でUI要素を取得できるようになった: https://github.com/flutter/flutter/issues/17988#issuecomment-1251741499
2. Appium Flutter Driver • Flutterアプリ側の flutter_driver パッケージを利⽤する - FlutterのUIはDart
VM経由で操作する - システムのUIは従来のAppiumの仕組みで操作する • デバッグビルドかプロファイルビルドのアプリのみサポート • integration_test の登場により、先⾏きにやや不透明感がある (*) 3. Flutterアプリ向けのE2Eテストツール5選 *: https://github.com/appium/appium-flutter-driver/issues/210, https://github.com/appium/appium-flutter-driver/issues/150
3. Patrol • Flutterアプリ向け、DartのE2Eテストフレームワーク • 最新の2.0では integration_test の諸問題を解決 (*) -
テスト実⾏のたびに不必要なビルドが発⽣する - テストの並列実⾏ができない - アプリのクラッシュ時に、後続のテストに影響を与えてしまう • ただし、WebViewを操作できなかったり(**)、setUp, tearDown といったテストフックが動作しない問題(***)がある模様 *: https://leancode.co/blog/patrol-2-0-improved-flutter-ui-testing **: https://github.com/leancodepl/patrol/issues/1139 ***: https://github.com/leancodepl/patrol/issues/1501 3. Flutterアプリ向けのE2Eテストツール5選
4. Maestro • 最もシンプルで効果的な UIテストフレームワーク • YAML形式で対話的に記述可能 • iOS実機は未対応(*) •
Androidはunicodeの⽂字⼊⼒が 未対応 (**) 3. Flutterアプリ向けのE2Eテストツール5選 *: https://github.com/mobile-dev-inc/maestro/issues/686 **: https://github.com/mobile-dev-inc/maestro/issues/146
5. MagicPod • FlutterアプリをE2Eテスト可能にする ための実装ガイドラインを公開 1. Flutterバージョン3以上を利⽤すること 2. テストで操作する各ウィジェットに アクセシビリティ情報を指定する
3. テストで操作する各ウィジェットの Zオーダーを適切に設定する • AppiumやMaestroの場合にも有効 3. Flutterアプリ向けのE2Eテストツール5選
5. MagicPod • Flutterアプリを正式にサポートを開始 • 各コマンドの動作確認状況やテスト作成のコツも公開 3. Flutterアプリ向けのE2Eテストツール5選
⽐較 ツール名 システムUI サポート テスト タイプ ⼿軽さ (開発者) ⼿軽さ (QA)
理由など integration_test no ホワイト ボックス的 ⭐⭐⭐⭐⭐ ⭐ ウィジェットテストの延⻑で作れ る Patrol yes ホワイト ボックス的 ⭐⭐⭐⭐ ⭐ セットアップに少し⼿間がかかる Appium Flutter Driver yes ブラック ボックス ⭐⭐ ⭐ いくつか制約があるのと将来性に やや不安あり Appium yes ブラック ボックス ⭐⭐⭐ ⭐ サーバ‧クライアントのセットア ップが必要 Maestro yes ブラック ボックス ⭐⭐⭐⭐ ⭐⭐⭐ yamlで直感的に書け、作る⼿間も 少ない MagicPod yes ブラック ボックス ⭐⭐⭐⭐ ⭐⭐⭐⭐ SaaS。ノーコードで書ける 3. Flutterアプリ向けのE2Eテストツール5選
まとめ • integration_test はシステムのUI要素を操作できない • FlutterアプリをE2Eテストするにあたり、Appium以外の 選択肢が増えてきた • テストツールの得意不得意や要件に沿って、ツールを選ぶ 必要がありそう
• AppiumやMaestroの場合は、 FlutterアプリをE2Eテスト 可能にするための実装ガイドライン も参考に!
EOF
参考 • Deep Dive into Appium for Flutter App •
Flutter Testing Guide - Everything You Need to Know • Dartソースコードが実⾏されるまでの構造を理解する • REIMAGINING FLUTTER UI TESTS WITH PATROL • MaestroをGitHub Actions上で動かす ~Android編~ • UI テストはもうMaestroでいいのかもしれない