Jacoco将 coverage.ec 转换为没有覆盖率的报告



我能够按照以下步骤获得代码覆盖率报告,

  1. 启用所需构建类型的覆盖率(例如调试)

    buildTypes { debug { testCoverageEnabled true } }

  2. 应用Jacoco插件并设置版本

    apply plugin: 'jacoco' jacoco { version "0.7.1.201405082137" }

  3. ./gradlew createDebugCoverageReport

  4. 连接AndroidTest中的所有测试都会运行,并根据它们生成覆盖率报告。我可以在以下位置找到覆盖范围报告

    app/build/outputs/reports/coverage/{buildType}/index.html

和 中的 coverage.ec 文件

app/build/outputs/code-coverage/connected/coverage.ec

但是没有jacoco.exec,因为我是从Android仪器而不是Robolectric测试用例运行的。

当我从 ADB 运行仪器时(我想这仍然使用 Emma),如下所示,我得到一个 coverage.ec 文件,如下所示,

$ adb shell am instrument -w -e coverage true -e coverageFile /sdcard/coverage.ec com.sample.helloworld.test/.Runner
....
OK (4 tests)
Generated code coverage data to /sdcard/coverage.ec

但是我无法使用 emma 将 coverage.ec 转换为报告,因为缺少 coverage.em 文件,

java -cp ~/adt-bundle-mac-x86_64-20130729/sdk/tools/lib/emma_device.jar emma report -r html -in 
coverage.em,myFile.ec,myapp_coverage1.ec -sp /path/to/myapp/src

有没有办法解决这个问题??

只需使用"coverage.ec"作为".exec"文件,它对我有用

这就是Google在Android Gradle插件源代码中所做的。

公共静态最终字符串 FILE_COVERAGE_EC = "coverage.ec";

在 SimpleTestCallable 中.java在 com.android.builder.internal.test 包下。

我写了一篇关于相同场景和我的解决方案的文章。你可以在这里阅读。要回答此特定问题,您应该执行以下步骤:将 gradle 更改为:

apply plugin: 'jacoco'
jacoco {
   toolVersion = '0.7.5.201505241946'
}

第二次下载这个罐子。继续执行您执行的操作,直到您获得 coverage.ec 文件。然后,当您运行它时:

java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p ./path/to/android/project

就是这样!jar 将生成一个包含代码覆盖率的文件夹。

另一种选择是将 coverage.ec 与 Jenkins Jacoco 插件一起使用。但为此,你需要让 Jenkins 开始。

要从文件中获取覆盖范围coverage.ec只需将其重命名为coverage.exec并使用"显示覆盖范围数据"选项打开它

"显示覆盖率数据"可以在Android Studio的"分析"选项下找到。

通过Android Studio 3.3验证了这一点

删除 . 从以下命令中为我工作

java -jar android-jacoco-the-missing.jar -f /path/to/coverage.ec -p /path/to/android/project

最新更新