カテゴリー・パッケージ・リポジトリを検索

パッケージ詳細v4.10.0

patrol

Flutterアプリ用の強力なマルチプラットフォームE2E UIテストフレームワークで、integration_testの制限を克服し、ネイティブ操作を処理します。

AndroidiOSWebmacOS
30日間ダウンロード
67.9万
いいね数
731
Pub ポイント
140

パッケージをインストール

flutter pub add patrol

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

Patrol は、integration_test の機能を越えて、ネイティブプラットフォーム機能とのシームレスな相互作用を可能にする、Flutter用のマルチプラットフォームエンドツーエンドUIテストフレームワークです。Android、iOS、Web、macOSでリアルなユーザー行動をシミュレートでき、ネイティブダイアログや権限、システムレベルのアクションの処理も可能です。信頼性と開発者体験を重視して設計されており、複雑なテストシナリオを簡素化しながら、クロスプラットフォームの一貫性を維持します。実際のアプリ使用状況を反映する堅牢で保守可能なテストスイートをサポートするアーキテクチャを備えています。

用途

  • ネイティブダイアログのインタラクションをテストする
  • プラットフォーム固有の動作の検証
  • クロスプラットフォームUI検証
  • 実行時権限の処理
  • デバイス固有のイベントをシミュレートする
  • エンドツーエンドワークフローの検証

主な機能

  • ネイティブなインタラクションサポート
  • マルチプラットフォームテスト(Android、iOS、Web、macOS)
  • integration_test に対するテストの信頼性が向上
  • 現実的なユーザーのシミュレーション
  • 組み込みの再試行および待機メカニズム
  • 明確で読みやすいテスト構文

適している対象

  • 複雑なFlutterアプリを開発するチーム
  • ネイティブ機能テストが必要な開発者
  • 複数プラットフォームで一貫したエンドツーエンドテストが必要なプロジェクト
  • テスト自動化エンジニア
  • CI/CDパイプライン統合

注意事項

  • 基本的な integration_test と比較して、追加のセットアップが必要です
  • プラットフォーム固有の設定が必要になる場合があります
  • 専用のテストワークフローを持つ成熟したプロジェクトに最適
  • 主流パッケージと比べてドキュメントが限られている
  • 新しいユーザーにとっての学習曲線がより高い

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

Patrol

patrol on pub.dev patrol_cli on pub.dev patrol_finders on pub.dev patrol_mcp on pub.dev patrol_discord code style patrol_github_stars patrol_x

A powerful, multiplatform E2E UI testing framework for Flutter apps that overcomes the limitations of integration_test by handling native interactions. Developed by LeanCode since 2022, battle-tested and shaped by production-grade experience.

Patrol promotional graphics

Learn more about Patrol:

How can we help you:

Patrol is an open-source framework created and maintained by LeanCode. However, if your company wants to scale fast and accelerate Patrol’s adoption, we offer a set of value-added services on top of the core framework.

You can find out more below:

[!NOTE] Patrol 4.7.0 adds Swift Package Manager support for iOS and macOS! If you migrate your project to SPM, a few small setup changes are needed — see the iOS setup guide for details.

Patrol custom finders

Flutter's finders are powerful, but not very intuitive to use.

We took them and made something awesome.

Thanks to Patrol's custom finders, you'll take your tests from this:

testWidgets('signs up', (WidgetTester tester) async {
  await tester.pumpWidget(AwesomeApp());
  await tester.pumpAndSettle();

  await tester.enterText(
    find.byKey(Key('emailTextField')),
    'charlie@root.me',
  );
  await tester.pumpAndSettle();

  await tester.enterText(
    find.byKey(Key('nameTextField')),
    'Charlie',
  );
  await tester.pumpAndSettle();

  await tester.enterText(
    find.byKey(Key('passwordTextField')),
    'ny4ncat',
  );
  await tester.pumpAndSettle();

  await tester.tap(find.byKey(Key('termsCheckbox')));
  await tester.pumpAndSettle();

  await tester.tap(find.byKey(Key('signUpButton')));
  await tester.pumpAndSettle();

  expect(find.text('Welcome, Charlie!'), findsOneWidget);
});

to this:

patrolTest('signs up', (PatrolIntegrationTester $) async {
  await $.pumpWidgetAndSettle(AwesomeApp());

  await $(#emailTextField).enterText('charlie@root.me');
  await $(#nameTextField).enterText('Charlie');
  await $(#passwordTextField).enterText('ny4ncat');
  await $(#termsCheckbox).tap();
  await $(#signUpButton).tap();

  await $('Welcome, Charlie!').waitUntilVisible();
});

Learn more about custom finders in the docs!

Patrol's custom finders are also available standalone in the patrol_finders package.

Patrol native automation

Flutter's default integration_test package can't interact with the OS your Flutter app is running on. This makes it impossible to test many critical business features, such as:

  • granting runtime permissions
  • signing into the app which through WebView or Google Services
  • tapping on notifications
  • much more!

Patrol's native automation feature solves these problems:

void main() {
  patrolTest('showtime', (PatrolIntegrationTester $) async {
    await $.pumpWidgetAndSettle(AwesomeApp());
    // prepare network conditions
    await $.platform.mobile.enableCellular();
    await $.platform.mobile.disableWifi();

    // toggle system theme
    await $.platform.mobile.enableDarkMode();

    // handle native location permission request dialog
    await $.platform.mobile.selectFineLocation();
    await $.platform.mobile.grantPermissionWhenInUse();

    // tap on the first notification
    await $.platform.mobile.openNotifications();
    await $.platform.mobile.tapOnNotificationByIndex(0);
  });
}

CLI

See packages/patrol_cli.

The CLI is needed to enable Patrol's native automation feature in integration tests. It also makes development of integration tests much faster thanks to [Hot Restart].

To run widget tests, you can continue to use flutter test.

Package

See packages/patrol.

CI/CD Workflows

See .github/WORKFLOWS.md for detailed documentation about all GitHub Actions workflows, including test schedules, Flutter versions, and deployment pipelines.

Patrol contracts generator

  1. (Optionally) add new request type:
class OpenAppRequest {
  late String appId;
}
  1. Add new method to NativeAutomator:
abstract class NativeAutomator<IOSServer, AndroidServer, DartClient> {
  ...
  void openApp(OpenAppRequest request);
  ...
}
  1. Run gen_from_schema script, few files will be updated

Develop patrol_cli

If you have previously activated patrol_cli run:

dart pub global deactivate patrol_cli

then

cd packages/patrol_cli
flutter pub global activate -s path .

🛠️ Maintained by LeanCode

This package is built with 💙 by LeanCode. We are top-tier experts focused on Flutter Enterprise solutions.

Why LeanCode?
  • Creators of Patrol – the next-gen testing framework for Flutter.

  • Production-Ready – We use this package in apps with millions of users.

  • Full-Cycle Product Development – We take your product from scratch to long-term maintenance.


Need help with your Flutter project?

👉 Hire our team   •   Check our other packages

カテゴリー

依存関係

依存関係一覧 11 件

ソースリポジトリ

このパッケージを使用しているプロジェクト

ランキング