Flutter测试报告插件better_test_reporter的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter测试报告插件better_test_reporter的使用

插件简介

better_test_reporter 是一个受 dart-junitreportdart-testreport 启发的应用程序/库。它将这两个包的功能整合到一个包中,更新为null安全,并进行了一些代码风格上的改进。

该包的主要功能有以下三点:

  1. 提供模型来解析来自测试json reporter的输出。
  2. 提供处理器,可以将完整的json报告转换为更易于开发者理解的报告结构,且与测试json reporter的协议版本无关。
  3. 提供命令行应用(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:用于报告的时间戳。支持nownone和格式为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-junitreportdart-testreportbetter_test_reporter在以下几个方面有所不同:

  1. 当生成XML时,移除了对单个问题的特殊处理,简化了逻辑。
  2. 在解析测试报告json时,隐藏属性仅基于TestDoneEvent json显式设置,而非遇到任何问题时自动设置。
  3. 默认情况下,在生成XML时会从类名中剥离当前工作目录路径。

更多关于Flutter测试报告插件better_test_reporter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于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插件的基本步骤和代码示例。希望这对你有所帮助!

回到顶部