분류, 패키지 및 저장소 검색

패키지 상세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 검증
  • 런타임 권한 처리
  • 장치별 이벤트 시뮬레이션
  • 엔드 투 엔드 워크플로 검증

주요 기능

  • 네이티브 상호작용 지원
  • 다중 플랫폼 테스트(안드로이드, iOS, 웹, 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 개

소스 저장소

이 패키지를 사용하는 프로젝트

순위