Flutter测试报告插件better_test_reporter的使用
Flutter测试报告插件better_test_reporter的使用
插件简介
better_test_reporter
是一个受 dart-junitreport 和 dart-testreport 启发的应用程序/库。它将这两个包的功能整合到一个包中,更新为null安全,并进行了一些代码风格上的改进。
该包的主要功能有以下三点:
- 提供模型来解析来自测试json reporter的输出。
- 提供处理器,可以将完整的json报告转换为更易于开发者理解的报告结构,且与测试json reporter的协议版本无关。
- 提供命令行应用(
report_to_junit
),可以将测试json reporter生成的完整json报告转换为junit XML报告(许多CI工具可用)。
目前,这个包仍处于实验阶段,随着我们继续构建更多功能,其当前状态较为基础。我们正在探索如何使junit输出更有用以及如何生成更好的测试报告以供junit之外的用途使用。
开始使用
为了开始使用report_to_junit
命令,您需要通过pub.dev安装最新版本的better_test_reporter
作为全局包。
pub global activate better_test_reporter
命令选项
要查看report_to_junit
的所有选项,请运行:
report_to_junit --help
以下是部分常用选项:
-i, --input
:指定包含测试输出的json文件路径。如果未指定,将使用<stdin>
-o, --output
:指定生成的junit xml文件路径。如果未指定,将使用<stdout>
-b, --base
:从源中的’path’元素中剥离的部分,默认为当前工作目录-p, --package
:添加到源中的’path’元素前缀,默认为空字符串-t, --timestamp
:用于报告的时间戳。支持now
、none
和格式为yyyy-MM-ddThh:mm:ss
的UTC时间。如果未提供值,则根据是否指定了--input
参数决定使用文件修改日期或当前日期-h, --help
:显示帮助文本
示例demo
假设你有一个名为placeholder_test.dart
的测试文件,内容如下:
import 'package:test/test.dart';
void main() {
test('placeholder test', () {
expect(true, isTrue);
});
}
要运行此测试并获取json输出,你可以执行以下命令:
对于Dart项目:
dart pub run test placeholder_test.dart --reporter json > test_output.json
对于Flutter项目:
flutter test --machine test/placeholder_test.dart > test_output.json
一旦收集到了test_output.json
,就可以使用report_to_junit
来生成JUnit XML:
dart pub global run better_test_reporter:report_to_junit --input test_output.json --output test_report.xml
这将在当前目录下生成一个名为test_report.xml
的文件,其内容可能如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<testsuites>
<testsuite errors="0" failures="0" tests="1" skipped="0" name="placeholder" timestamp="2021-10-22T21:20:08">
<properties>
<property name="platform" value="vm"/>
</properties>
<testcase classname="placeholder" file="/test/placeholder_test.dart" name="placeholder test" time="0.02"/>
</testsuite>
</testsuites>
很多持续集成(CI)工具都可以利用这种JUnit XML输出来更好地展示你的测试结果。
区别于原始实现
相比于dart-junitreport
和dart-testreport
,better_test_reporter
在以下几个方面有所不同:
- 当生成XML时,移除了对单个问题的特殊处理,简化了逻辑。
- 在解析测试报告json时,隐藏属性仅基于
TestDoneEvent
json显式设置,而非遇到任何问题时自动设置。 - 默认情况下,在生成XML时会从类名中剥离当前工作目录路径。
更多关于Flutter测试报告插件better_test_reporter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter测试报告插件better_test_reporter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用better_test_reporter
插件的一个示例代码案例。better_test_reporter
插件用于生成更美观和详细的测试报告,有助于开发者更好地理解和调试测试结果。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加better_test_reporter
依赖:
dev_dependencies:
test: ^1.19.0 # 确保你使用的test包版本与better_test_reporter兼容
better_test_reporter: ^0.1.0 # 使用最新版本,版本号可能需要根据实际情况调整
然后运行flutter pub get
来获取依赖。
2. 配置测试脚本
在test
目录下,通常会有一个test_driver
文件夹用于集成测试,以及一个或多个测试文件(例如example_test.dart
)。接下来,我们需要配置测试脚本以使用better_test_reporter
。
创建一个新的脚本文件,例如run_tests.dart
,并在其中配置测试运行和报告生成:
import 'dart:io';
import 'package:test/test.dart' as test;
import 'package:better_test_reporter/better_test_reporter.dart';
void main() {
// 设置测试报告的输出目录
final String reportDirectory = 'test_reports';
Directory(reportDirectory).createSync(recursive: true);
// 配置更好的测试报告
test.runTests(
test.testSuite(),
onResult: (test.TestResult result) async {
// 将测试结果写入报告
BetterTestReporter().report(result, outputDirectory: reportDirectory);
},
onError: (String error, StackTrace stackTrace) {
// 错误处理(可选)
stderr.writeln('Error during test execution: $error');
stderr.writeln(stackTrace);
},
onDone: (int passed, int failed) {
// 测试完成后执行(可选)
print('Tests completed with $passed passed and $failed failed.');
},
);
}
3. 运行测试
你可以通过命令行运行这个脚本。首先,确保你的项目根目录下有一个dart
可执行文件(通常通过安装Dart SDK获得)。然后,运行以下命令:
dart test/run_tests.dart
这将执行你的测试,并生成一个详细的测试报告在test_reports
目录下。
4. 查看报告
测试完成后,你可以在test_reports
目录下找到生成的HTML文件。打开这些文件,你将看到一个更加直观和详细的测试报告,包括每个测试的通过/失败状态、错误信息和堆栈跟踪等。
注意事项
- 确保
better_test_reporter
插件的版本与你的Flutter和Dart环境兼容。 - 如果你的测试文件较多或结构复杂,可能需要调整
test.testSuite()
的参数来包含所有需要测试的文件。 - 生成的测试报告文件可能会占用一定的磁盘空间,根据需要定期清理。
以上就是在Flutter项目中集成和使用better_test_reporter
插件的基本步骤和代码示例。希望这对你有所帮助!