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テストツール事情
Search
mwakizaka
August 25, 2023
Technology
3.4k
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
85
MagicPodでFlutter アプリをテストする
mwakizaka
0
2.4k
Other Decks in Technology
See All in Technology
2026TECHFRESH畢業分享會 - Lightning Talk - 資料也要 CI/CD? 用 Airbyte 自動化資料同步
line_developers_tw
PRO
0
1.3k
フィジカル版Github Onshapeの紹介
shiba_8ro
0
290
Oracle AI Database@AWS:サービス概要のご紹介
oracle4engineer
PRO
4
3k
新しいUbuntu/GNOMEが使いたいからXからWaylandへ移行頑張ってるの巻 2026-06-20
nobutomurata
0
150
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
2k
日本 Fintech 未来予測レポート 2027〜2028年(手動編集版)
8maki
1
2.5k
【Cyber-sec+】経営層を"動かす"ための考え方
hssh2_bin
0
200
SONiC Scale-Up Working Group から探る Scale-UpやUltraEthernet機能の実装方法
ebiken
PRO
2
410
Lightning近況報告
kozy4324
0
200
入門!AWS Blocks
ysuzuki
1
160
Agile and AI Redmine Japan 2026
hiranabe
3
300
LayerXにおけるセキュリティ管理の現在地と次の一手
tosho
0
250
Featured
See All Featured
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
230
Speed Design
sergeychernyshev
33
1.9k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
270
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
210
Into the Great Unknown - MozCon
thekraken
41
2.6k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
66
55k
Amusing Abliteration
ianozsvald
1
210
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.6k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
180
Paper Plane
katiecoart
PRO
1
51k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
420
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でいいのかもしれない