Flutter自动化UI测试插件auto_golden_storybook的使用
Flutter自动化UI测试插件auto_golden_storybook的使用
描述
auto_golden_storybook
是一个命令行工具,用于自动为你的黄金图像生成一个 storybook
。它会自动在项目中设置一个名为 storybook
的子目录,并将每个在测试目录中找到的PNG图像生成对应的“故事”对象。
目前,该工具只会使用PNG图像,并且只接受顶级目录作为测试目录。
使用
要使用该工具,只需运行以下命令:
dart run auto_golden_storybook:create
配置
你可以在 pubspec.yaml
文件中添加配置,或者通过命令行参数进行配置。例如:
在 pubspec.yaml
中添加配置:
auto_golden_storybook:
name: "project_storybook"
test_dir: "test/goldens"
或者通过命令行参数进行配置:
dart run auto_golden_storybook:create --name=project_storybook --test_dir="test/goldens"
默认情况下,创建的web项目将被命名为 “storybook”。它将假设你的测试目录名为 “test”,并会在测试目录的所有子目录中生成所有PNG图像的故事。
你可以修改一些生成的文件以满足自己的需求,如 device_frame.dart
和 golden_image_container.dart
。设备框架是Storybook包的一部分,你可以更改它以使用你选择的默认框架。
golden_image_container.dart
是一个包装黄金图像的控件,并缩放掉黄金图像创建的边框。它还将其包裹在一个 ListView
中,以便可以滚动。你可以更改其添加的缩放量以适应自己的黄金图像。
路线图
- 自动根据黄金图像大小选择框架。
- 更多配置选项。
- 更多测试。
贡献
请在Github的issue跟踪器中提出功能建议或报告问题。
许可证
MIT许可证 - 详情请参阅 LICENSE.md
完整示例Demo
下面是一个完整的示例,展示了如何使用 auto_golden_storybook
插件。
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key, required this.title});
final String title;
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
setState(() {
_counter++;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Theme.of(context).colorScheme.inversePrimary,
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text(
'You have pushed the button this many times:',
),
Text(
'$_counter',
style: Theme.of(context).textTheme.headlineMedium,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
步骤说明
-
创建一个新的Flutter项目:
flutter create my_flutter_app cd my_flutter_app
-
在
pubspec.yaml
中添加auto_golden_storybook
依赖:dependencies: auto_golden_storybook: ^1.0.0
-
安装依赖:
flutter pub get
-
创建黄金图像并保存到测试目录: 例如,创建一个名为
test/goldens/
的目录,并将黄金图像(如image.png
)放入其中。 -
运行
auto_golden_storybook:create
命令:dart run auto_golden_storybook:create --name=my_storybook --test_dir="test/goldens"
-
查看生成的故事书: 运行生成的故事书项目:
cd my_storybook flutter run
更多关于Flutter自动化UI测试插件auto_golden_storybook的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter自动化UI测试插件auto_golden_storybook的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何使用 auto_golden_storybook
插件进行 Flutter 自动化 UI 测试的示例代码案例。auto_golden_storybook
是一个 Flutter 插件,用于生成和比较屏幕截图的黄金标准(golden tests),这对于确保 UI 在不同版本之间保持一致非常有用。
1. 添加依赖
首先,在你的 pubspec.yaml
文件中添加 auto_golden_storybook
依赖:
dependencies:
flutter:
sdk: flutter
auto_golden_storybook: ^x.y.z # 请替换为最新版本号
然后运行 flutter pub get
来获取依赖。
2. 配置项目
确保你的项目已经配置好使用 Flutter 的黄金测试。通常这意味着你需要有一个 test
目录,并且在该目录中有用于生成和比较截图的测试文件。
3. 创建测试文件
在 test
目录下创建一个新的测试文件,例如 golden_test.dart
。在这个文件中,我们将使用 auto_golden_storybook
来生成和比较截图。
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:auto_golden_storybook/auto_golden_storybook.dart';
void main() {
group('Golden tests', () {
testWidgets('MyWidget golden test', (WidgetTester tester) async {
final builder = StorybookBuilder()
..addScenario(
Scenario.withWidget(
MyWidget(),
// 配置截图名称和可选的交互
const Identifier('my_widget'),
(tester) async {},
),
);
await tester.pumpWidget(MaterialApp(home: builder.build()));
await expectLater(
find.byType(MyWidget),
matchesGoldenFile('my_widget.png'),
);
});
});
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('My Widget')),
body: Center(child: Text('Hello, Golden Test!')),
);
}
}
4. 运行测试并生成黄金标准截图
在命令行中运行以下命令来生成黄金标准截图:
flutter test --update-goldens test/golden_test.dart
这将运行测试并生成新的黄金标准截图,这些截图将被保存在 test/goldens/
目录下。
5. 运行测试并比较截图
一旦黄金标准截图生成完毕,你可以运行以下命令来比较当前 UI 与黄金标准截图:
flutter test test/golden_test.dart
如果当前的 UI 与黄金标准截图相匹配,测试将通过。如果有任何差异,测试将失败,并在控制台中显示差异。
注意事项
- 确保在生成和比较截图时使用相同的设备和屏幕尺寸设置,以确保结果的一致性。
- 如果 UI 有动态内容(如时间戳或随机数据),你可能需要使用测试助手(如
pumpAndSettle
)或模拟数据来确保截图的稳定性。
通过上述步骤,你应该能够成功地在 Flutter 项目中使用 auto_golden_storybook
插件进行自动化 UI 测试。