Flutter代码覆盖率合并插件combine_coverage的使用

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

Flutter代码覆盖率合并插件combine_coverage的使用

在包含多个Dart和Flutter包的单体仓库(monorepo)中,combine_coverage CLI工具可以将所有lcov.info文件合并为一个lcov.info文件,该文件可以正确地使用genhtml、Coveralls等工具进行显示。

使用方法

Usage: combine_coverage [arguments]

Global options:
-h, --help                     显示此使用信息
-p, --repo-path (必填)         单体仓库的根路径
-o, --output-directory         输出合并后的覆盖率文件的路径,默认为<repo-path>/coverage

示例

1. 运行单元测试并生成覆盖率报告

在每个Flutter包中运行以下命令:

flutter test --coverage

在每个Dart包中运行以下命令:

dart test --coverage=./coverage
2. 将Dart包的测试覆盖率输出转换为lcov格式

默认情况下,Dart会生成json格式的覆盖率报告。我们可以使用coverage包将其转换为lcov格式。在每个Dart包中运行以下命令:

dart pub global run coverage:format_coverage --in="./coverage/test" --out="./coverage/lcov.info" --lcov --report-on="./lib"
3. 合并覆盖率报告

现在我们已经在每个包中生成了lcov.info文件,接下来需要运行combine_coverage来合并这些文件。如果你已经将Dart脚本添加到了PATH中,可以使用以下命令:

combine_coverage --repo-path="<path-to-your-monorepo>"

否则,你可以使用以下命令:

dart pub global run combine_coverage --repo-path="<path-to-your-monorepo>"

合并后的lcov.info文件将位于单体仓库的根目录下的coverage/文件夹中,文件路径已修正。这个文件可以传递给任何可视化工具以生成完整且准确的覆盖率报告。

如果你想指定合并后的lcov.info文件的输出目录,可以使用--output-directory参数。

完整示例Demo

假设你有一个单体仓库,其中包含两个Flutter包(package_apackage_b)和一个Dart包(package_c)。以下是完整的步骤:

  1. 运行单元测试并生成覆盖率报告

    package_a中:

    cd package_a
    flutter test --coverage
    

    package_b中:

    cd package_b
    flutter test --coverage
    

    package_c中:

    cd package_c
    dart test --coverage=./coverage
    
  2. 将Dart包的测试覆盖率输出转换为lcov格式

    package_c中:

    dart pub global run coverage:format_coverage --in="./coverage/test" --out="./coverage/lcov.info" --lcov --report-on="./lib"
    
  3. 合并覆盖率报告

    在单体仓库的根目录中:

    combine_coverage --repo-path="."
    

    或者,如果你没有将Dart脚本添加到PATH中:

    dart pub global run combine_coverage --repo-path="."
    
  4. 查看合并后的覆盖率报告

    合并后的lcov.info文件将位于单体仓库的根目录下的coverage/文件夹中。你可以使用genhtml等工具生成HTML格式的覆盖率报告:

    genhtml -o coverage/html coverage/lcov.info
    

    然后打开生成的HTML文件查看覆盖率报告:

    open coverage/html/index.html
    

更多关于Flutter代码覆盖率合并插件combine_coverage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter代码覆盖率合并插件combine_coverage的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,combine_coverage 是一个用于合并多个 Flutter 项目的代码覆盖率报告的插件。这在大型项目或需要跨模块生成整体覆盖率报告时非常有用。以下是如何使用 combine_coverage 插件的一个简单示例。

1. 安装 combine_coverage

首先,你需要将 combine_coverage 添加到你的 Flutter 项目中。你可以通过修改 pubspec.yaml 文件来实现这一点。

dev_dependencies:
  flutter_test:
    sdk: flutter
  combine_coverage: ^x.y.z  # 请替换为最新版本号

然后在项目根目录下运行以下命令来安装依赖:

flutter pub get

2. 生成覆盖率报告

假设你有多个模块或不同的测试目标,你需要分别为它们生成覆盖率报告。通常,这可以通过运行 flutter test --coverage 命令来实现。例如:

flutter test --coverage --target=path/to/module1_test.dart
flutter test --coverage --target=path/to/module2_test.dart

这将为每个模块生成一个 lcov.info 文件,通常位于 coverage/lcov.info 路径下(具体路径可能因配置而异)。

3. 使用 combine_coverage 合并报告

接下来,你需要使用 combine_coverage 来合并这些覆盖率报告。你可以创建一个简单的 Dart 脚本来执行这一操作。例如,创建一个名为 combine_coverage.dart 的文件,并添加以下内容:

import 'package:combine_coverage/combine_coverage.dart';

void main() async {
  // 列出所有需要合并的覆盖率文件路径
  List<String> coverageFiles = [
    './module1/coverage/lcov.info',
    './module2/coverage/lcov.info',
    // 添加更多文件路径
  ];

  // 指定输出文件路径
  String outputFilePath = './combined_coverage/lcov.info';

  // 合并覆盖率报告
  await combineCoverage(coverageFiles, outputFilePath);

  print('Coverage reports combined successfully to $outputFilePath');
}

4. 运行合并脚本

使用 Dart 命令行工具运行上述脚本:

dart combine_coverage.dart

5. 查看合并后的覆盖率报告

合并后的覆盖率报告将保存在你指定的输出文件路径中,例如 ./combined_coverage/lcov.info。你可以使用任何支持 lcov.info 格式的覆盖率查看工具来查看合并后的报告。

注意事项

  • 确保所有模块的覆盖率文件路径正确无误。
  • 合并后的覆盖率报告可能需要根据你的项目结构进行进一步处理或配置。
  • 你可以根据需要调整 combine_coverage 的使用方式,例如通过命令行参数传递文件路径等。

希望这个示例能帮助你理解如何使用 combine_coverage 插件来合并 Flutter 项目的代码覆盖率报告。

回到顶部