Flutter测试报告解析插件test_report_parser的使用

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

Flutter测试报告解析插件test_report_parser的使用

Dartle CI pub package

这个库包含了一个自动生成的Dart模型,该模型代表了由Dart Tests JSON记录器生成的事件。

它可用于将Dart测试JSON报告解析为类型化的Dart对象,以便进一步处理。

该模型通过解析以下页面生成:

使用test_report_parser

在你的pubspec.yaml文件中添加test_report_parser依赖:

dependencies:
  test_report_parser:

基本用法是在每次调用parseJsonToEvent(String)函数时处理JSON测试记录器的每一行输出:

import 'package:test_report_parser/test_report_parser.dart';

void main() {
  final event = parseJsonToEvent('{"success":true,"type":"done","time":36361}');
  print(event);

  if (event is DoneEvent) {
    if (event.success) {
      print('!!!!!! 测试成功 !!!!!!');
    } else {
      print('XXXXXX 存在失败。 XXXXXX');
    }
  }
}

查看完整的示例代码以了解详细信息。

完整示例

以下是一个完整的示例代码,展示了如何解析一个包含多个测试事件的JSON日志字符串:

import 'package:test_report_parser/test_report_parser.dart';

const logExample = r'''
{"protocolVersion":"0.1.1","runnerVersion":"1.16.8","pid":45879,"type":"start","time":0}
{"suite":{"id":0,"platform":"vm","path":"test/io_test.dart"},"type":"suite","time":0}
{"test":{"id":1,"name":"loading test/io_test.dart","suiteID":0,"groupIDs":[],"metadata":{"skip":false,"skipReason":null},"line":null,"column":null,"url":null},"type":"testStart","time":2}
{"suite":{"id":2,"platform":"vm","path":"test/cache_test.dart"},"type":"suite","time":16}
{"success":true,"type":"done","time":36361}
''';

void main() {
  for (final line in logExample.split('\n').where((l) => l.isNotEmpty)) {
    final event = parseJsonToEvent(line);
    print(event);

    // 检查特定事件
    if (event is TestStartEvent) {
      print('=== 测试 "${event.test.name}" 已开始。 ===');
    }
    if (event is DoneEvent) {
      final ok = event.success;
      if (ok == null) {
        print('测试未正确终止');
      } else if (ok) {
        print('!!!!!! 测试成功 !!!!!!');
      } else {
        print('XXXXXX 存在失败。 XXXXXX');
      }
    }
  }
}

在这个示例中,我们解析了一段包含多个测试事件的日志字符串,并根据不同的事件类型打印相应的消息。


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

1 回复

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


当然,以下是如何在Flutter项目中使用test_report_parser插件来解析测试报告的示例代码。test_report_parser插件通常用于解析JSON格式的Flutter测试报告,以便进一步分析测试结果。

首先,确保你已经在pubspec.yaml文件中添加了test_report_parser依赖项:

dependencies:
  flutter:
    sdk: flutter
  test_report_parser: ^latest_version  # 替换为最新版本号

然后,运行flutter pub get来获取依赖项。

以下是一个简单的示例,展示了如何使用test_report_parser来解析Flutter生成的JSON测试报告:

import 'dart:convert';
import 'package:test_report_parser/test_report_parser.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String parsedReport = '';

  @override
  void initState() {
    super.initState();
    _parseTestReport();
  }

  Future<void> _parseTestReport() async {
    // 假设你有一个名为 'test_report.json' 的文件,包含Flutter测试报告
    String jsonReport = await rootBundle.loadString('assets/test_report.json');

    // 解析JSON报告
    TestReport report = TestReportParser.parse(jsonDecode(jsonReport));

    // 将解析后的报告转换为字符串格式(为了展示)
    parsedReport = _formatReport(report);

    // 更新UI
    setState(() {});
  }

  String _formatReport(TestReport report) {
    StringBuffer buffer = StringBuffer();
    buffer.writeln('Total Tests: ${report.totalTests}');
    buffer.writeln('Passed Tests: ${report.passedTests}');
    buffer.writeln('Failed Tests: ${report.failedTests}');
    buffer.writeln('Tests with Errors: ${report.errorTests}');

    report.tests.forEach((test) {
      buffer.writeln('Test Name: ${test.name}');
      buffer.writeln('Result: ${test.result}');
      if (test.result == TestResult.failed || test.result == TestResult.error) {
        buffer.writeln('Error Message: ${test.errorMessage}');
      }
      buffer.writeln('');
    });

    return buffer.toString();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Test Report Parser'),
        ),
        body: Center(
          child: Text(parsedReport),
        ),
      ),
    );
  }
}

注意事项:

  1. JSON测试报告:确保你的test_report.json文件已经正确放置在assets文件夹中,并在pubspec.yaml中声明:

    flutter:
      assets:
        - assets/test_report.json
    
  2. TestReportParserTestReportParser类假设你的JSON测试报告具有特定的结构。确保你的JSON报告结构与test_report_parser插件期望的结构相匹配。如果结构不匹配,你可能需要调整解析逻辑或自定义解析器。

  3. 错误处理:为了简洁,示例代码中没有包含错误处理逻辑。在实际应用中,你应该添加适当的错误处理,以处理文件加载失败或JSON解析错误等情况。

  4. UI更新:示例中使用setState来更新UI,当解析完成后显示解析后的报告。

通过上述代码,你可以在Flutter应用中加载和解析测试报告,并以文本形式展示解析结果。根据实际需求,你可以进一步扩展UI,以更友好的方式展示测试报告。

回到顶部