Logs and test results

Once you've written and executed your tests, it's essential to monitor their results. Patrol provides two main methods for reporting test outcomes: console logs and native test reports.

Logging test steps

This feature is available starting from version 3.13.0.

If you're using this version but don't see logs for test steps, check if you're passing a custom PatrolTesterConfig to patrolTest(). If so, ensure the printLogs: true argument is included in the constructor.

During test execution, every test step (e.g., tap or enterText) is logged to the console along with its status. Additionally, the test name, status, and execution time are displayed.

Example console output:

...
๐Ÿงช denies various permissions
        โœ…   1. scrollTo widgets with text "Open permissions screen".
        โœ…   2. scrollTo widgets with text "Open permissions screen".
        โœ…   3. tap widgets with text "Open permissions screen".
        โœ…   4. tap widgets with text "Request camera permission".
        โœ…   5. isPermissionDialogVisible (native)
        โœ…   6. tap widgets with text "Request camera permission".
        โœ…   7. isPermissionDialogVisible (native)
        โณ   8. denyPermission (native)
โŒ denies various permissions (integration_test/permissions/deny_many_permissions_twice_test.dart) (9s)
โ•โ•โ•ก EXCEPTION CAUGHT BY FLUTTER TEST FRAMEWORK โ•žโ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•
The following PlatformException was thrown running a test:
PlatformException(PermissionHandler.PermissionManager, A request
for permissions is already running, please wait for it to finish
before doing another request (note that you can request multiple
permissions at the same time)., null, null)

When the exception was thrown, this was the stack:
#0      StandardMethodCodec.decodeEnvelope (package:flutter/src/services/message_codecs.dart:648:7)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:334:18)
<asynchronous suspension>
#2      MethodChannelPermissionHandler.requestPermissions (package:permission_handler_platform_interface/src/method_channel/method_channel_permission_handler.dart:79:9)
<asynchronous suspension>
#3      PermissionActions.request (package:permission_handler/permission_handler.dart:52:31)
<asynchronous suspension>
#4      _PermissionsScreenState._requestCameraPermission (package:e2e_app/permissions_screen.dart:21:20)
<asynchronous suspension>

The test description was:
  denies various permissions
โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•โ•

โœ… taps on notification (integration_test/permissions/notifications_test.dart) (16s)
โœ… taps on notification native2 (integration_test/permissions/notifications_test.dart) (14s)
โœ… grants various permissions (integration_test/permissions/permissions_many_test.dart) (15s)
...

Test summary

Once the tests are complete, a summary is printed:

Test summary:
๐Ÿ“ Total: 8
โœ… Successful: 3
โŒ Failed: 5
  - taps on notification (integration_test/permissions/notifications_test.dart)
  - taps on notification native2 (integration_test/permissions/notifications_test.dart)
  - accepts location permission (integration_test/permissions/permissions_location_test.dart)
  - accepts location permission native2 (integration_test/permissions/permissions_location_test.dart)
  - grants various permissions (integration_test/permissions/permissions_many_test.dart)
โฉ Skipped: 0
๐Ÿ“Š Report: file:///Users/user/patrol/dev/e2e_app/build/app/reports/androidTests/connected/index.html
โฑ๏ธ  Duration: 227s

Customizing log behavior

You can customize which logs are displayed by using the following flags. These can be passed to the patrol test or patrol develop commands:

FlagDescriptionAvailable inDefault value
--[no-]show-flutter-logsShow Flutter logs while running the tests.patrol test, in patrol develop it's always onfalse
--[no-]hide-test-stepsHide test steps while running the tests.patrol test and patrol developfalse
--[no-]clear-test-stepsClear test steps after the test finishes.patrol testtrue

Native test reports

In addition to console logs, you can review test results in a native test report. The report's file path is provided in the test summary, for example:

๐Ÿ“Š Report: file:///Users/user/patrol/dev/e2e_app/build/app/reports/androidTests/connected/index.html

Logs in patrol_finders

By default, enhanced logs are disabled when using patrol_finders without the patrol package. To enable them, pass the printLogs: true argument to the PatrolTesterConfig constructor:

patrolWidgetTest(
  'throws exception when no widget to tap on is found',
  config: const PatrolTesterConfig(printLogs: true),
  (tester) async {
    // test body
    // ...
  },
);
testWidgets(
  'description',
  (widgetTester) async {
    final $ = PatrolTester(
      tester: widgetTester,
      config: PatrolTesterConfig(printLogs: true),
    );
    // test body
    // ...
  },
);