搜索插件、代码仓与 APP 分类

插件详情v3.0.0+1

fast_flutter_driver

用于在桌面端快速运行 Flutter Driver 测试的工具包。

macOS
近 30 天下载
60
喜欢数
9
Pub 分数
130

安装插件

flutter pub add fast_flutter_driver

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

Fast Flutter Driver 是一个专为加速桌面环境(尤其是 macOS)上的 Flutter driver 测试而设计的工具包。它通过优化设置和运行时性能,简化了测试执行流程,使开发者能够更高效地运行集成测试。该工具包以速度和简洁性为核心,可无缝集成到现有的 Flutter 项目中,并在开发过程中提供快速反馈。该包非常适合注重桌面版 Flutter 工作流中快速测试周期的团队。

适合场景

  • 在 macOS 上运行快速集成测试
  • 加速CI/CD流水线
  • 测试桌面 Flutter 应用
  • 改进开发人员的反馈循环
  • 快速调试UI交互

主要特点

  • 优化的测试执行速度
  • 无缝的 macOS 集成
  • 最小设置开销
  • 支持 Flutter 驱动程序 API
  • 专为桌面测试设计

适合对象

  • 桌面 Flutter 开发人员
  • CI/CD 自动化工程师
  • 测试自动化专家
  • UI 测试爱好者
  • 快速原型团队

使用建议

  • 仅限 macOS 平台
  • 需要 Flutter 驱动知识
  • 不适用于移动测试
  • 可能需要为复杂设置进行额外配置
  • 最适合开发和测试,不适合生产部署

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Fast Flutter Driver

Build codecov

Plugin Pub
Command Line Tool pub package
UI Helper pub package

Deprecation Warning

Flutter Driver tests are being deprecated in favor of new Integration Tests. I will continue to support this package as long it's feasible but it is recommended to start using Integration Tests.

You can read more Pros and Cons here.

Toolkit for running rapidly flutter driver tests on desktop/mobile.

This package simplifies the creation of Flutter Driver tests that can be run in bulk without restarting or rebuilding the application. An example of how the toolkit works can be found in this article.

The reasoning for Desktop tests

The desktop builds are almost identical to Android/iOS builds in regard to the UI. Running tests on a simulator/emulator are painful. This can be even worse on your CI.

Your CI is usually a dockerized Linux machine - running Linux flutter driver tests against Linux Flutter application is both fast and reliable. This tool allows you to run your flutter driver tests much faster and more reliably than a build for a simulator/emulator.

The application flows that require Android/iOS plugins should still be run on a Simulator/Emulator or a real device.

Running also on Android/iOS

While running tests against Desktop will find the majority of bugs, it is recommended to run sometimes against actual devices. There are bugs in Dart (like implementing your generics in an invalid way) that can cause a native crash on a mobile device and work properly on the desktop.It's prudent to run fastdriver tests before every release on a mobile device.

Example

You can build and execute the example that works on any desktop system and Docker as well.

Usage

  • Add dev_dependency to your pubspec.yaml
dev_dependencies:
  fast_flutter_driver: ^2.0.0
  • Create configuration class test_driver/generic/test_configuration.dart
import 'package:fast_flutter_driver/tool.dart';
import 'package:meta/meta.dart';

class TestConfiguration implements BaseConfiguration {
  const TestConfiguration({
    required this.resolution,
    this.platform,
  });

  factory TestConfiguration.fromJson(Map<String, dynamic> json) {
    return TestConfiguration(
      resolution: Resolution.fromJson(json['resolution']),
      platform: TestPlatformEx.fromString(json['platform']),
    );
  }
  @override
  final TestPlatform? platform;
  @override
  final Resolution resolution;
  
  @override
  Map<String, dynamic> toJson() {
    final p = platform;
    return <String, dynamic>{
      'resolution': resolution,
      if (p != null) 'platform': p.asString(),
    };
  }
}

  • Create dart file test_driver/generic/generic.dart with content and MyApplication as your main (root) application widget.
import 'dart:convert';

import 'package:fast_flutter_driver/driver.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_driver/driver_extension.dart';

import 'test_configuration.dart';

void main() {
  timeDilation = 0.1;
  enableFlutterDriverExtension(
    handler: (playload) async {
      await configureTest(
        TestConfiguration.fromJson(json.decode(playload ?? '{}')),
      );
      return '';
    },
  );

  runApp(
    RestartWidget<TestConfiguration>(
      builder: (_, config) => MyApplication(),
    ),
  );
}

  • Create a test, eg test_driver/example_test.dart
import 'dart:convert';

import 'package:fast_flutter_driver/tool.dart';
import 'package:flutter_driver/flutter_driver.dart';
import 'package:test/test.dart';

import 'generic/test_configuration.dart';

void main(List<String> args) {
  late FlutterDriver driver;
  final properties = TestProperties(args);

  setUpAll(() async {
    driver = await FlutterDriver.connect(dartVmServiceUrl: properties.vmUrl);
  });

  tearDownAll(() async {
    await driver.close();
  });

  Future<void> restart() {
    return driver.requestData(
      json.encode(
        TestConfiguration(
          resolution: properties.resolution,
          platform: properties.platform,
        ),
      ),
    );
  }

  test('main application', () async {
    await restart();

    await driver.waitFor(find.byType('MyApplication'));
  });
}

pub global activate fast_flutter_driver_tool
  • Run:
fastdriver --dart-args "--no-sound-null-safety" --flutter-args "--no-sound-null-safety"

All done!

What's next

This was the simplest setup of tests, next you would like to pass different application configuration so every time you run tests, they could be run with a different configuration (eg different page). To do that you need to add more properties to TestConfiguration.

A full example of how to do that can be found in the example folder.

Null Safety

The package supports building project that are migrated to null safety but until flutter driver is migrated to null safety, we need to pass the above flags to the command line tool.

所属分类

依赖

依赖清单 3 项

源码仓库

使用此插件的项目

暂无相关数据。