Flutter自动化测试加速插件fast_flutter_driver的使用
Flutter自动化测试加速插件fast_flutter_driver的使用
简介
Fast Flutter Driver
是一个用于加速Flutter应用自动化测试的工具包。它简化了创建和运行批量Flutter Driver测试的过程,而无需重启或重新构建应用程序。该工具包可以在桌面、移动设备以及Docker环境中运行测试,提供了快速且可靠的测试体验。
重要提示
Flutter Driver测试正在被新的集成测试(Integration Tests)所取代。虽然Fast Flutter Driver
仍然会继续得到支持,但建议您开始使用集成测试。您可以在这里阅读更多关于新集成测试的优点和缺点。
使用场景
- 桌面测试:桌面构建几乎与Android/iOS构建在UI方面完全相同。在模拟器/仿真器上运行测试可能会非常耗时,尤其是在CI环境中。由于CI通常是基于Linux的Docker容器,因此在Linux上运行
flutter driver
测试既快速又可靠。 - 移动设备测试:尽管桌面测试可以发现大多数Bug,但某些Dart代码(如泛型实现不当)可能会导致移动设备上的原生崩溃,而在桌面上正常工作。因此,在每次发布前,建议在实际设备上运行
fastdriver
测试。
示例项目
您可以参考示例项目,该项目展示了如何在任何桌面系统和Docker中使用Fast Flutter Driver
。
使用步骤
1. 添加依赖
在pubspec.yaml
文件中添加fast_flutter_driver
作为开发依赖:
dev_dependencies:
fast_flutter_driver: ^2.0.0
2. 创建配置类
在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(),
};
}
}
3. 创建主入口文件
在test_driver/generic/generic.dart
中创建主入口文件,确保MyApplication
是您的根应用小部件:
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;
// 启用Flutter Driver扩展
enableFlutterDriverExtension(
handler: (playload) async {
await configureTest(
TestConfiguration.fromJson(json.decode(playload ?? '{}')),
);
return '';
},
);
runApp(
RestartWidget<TestConfiguration>(
builder: (_, config) => MyApplication(),
),
);
}
4. 创建测试文件
在test_driver/main_test.dart
中创建一个测试文件,用于连接到Flutter Driver并执行测试:
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 {
// 连接到Flutter应用
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'));
});
}
5. 安装命令行工具
安装fast_flutter_driver
命令行工具:
pub global activate fast_flutter_driver_tool
6. 运行测试
使用以下命令运行测试:
fastdriver --dart-args "--no-sound-null-safety" --flutter-args "--no-sound-null-safety"
更多关于Flutter自动化测试加速插件fast_flutter_driver的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html