如何从Android应用程序(Android studio和gradle)上的手动测试中获取代码覆盖率

时间:2017-02-14 06:11:05

标签: android android-studio code-coverage manual-testing

目前,我正在研究Android上的GUI自动化测试,出于某种原因,我需要一个可以通过手动测试生成代码覆盖率报告的工具。 经过长时间的搜索,我发现JacocoEmma在其网站上提到了手动方法。 但不幸的是,互联网上没有up-to-date-working example

我尝试了很多建议解决方案,例如https://groups.google.com/forum/#!searchin/jacoco/manual $ 20android%7Csort:date / jacoco / vx0g_6TKY8Q / 0Tg3fX84CAAJ。

它生成了一个coverage.exec,但文件的大小只有几个字节(当然,Jacoco无法生成任何报告。)

以下是我尝试过的内容:https://github.com/kindraywind/MyDummy

在app / build.gradle中

apply plugin: 'jacoco'
jacoco {
toolVersion ="0.7.8+"  //I did try "0.7.4+" as the suggest.
}

task jacocoTestReport(type: JacocoReport) { … }

在jacoco-agent.properties

destfile=/storage/sdcard/coverage.exec

在app / src / main / AndroidManifest.xml`

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

在MainActivity.java中

protected void onStop()
{
super.onStop();
if(BuildConfig.DEBUG)
{
String TAG = "jacoco";
try {
String covPath = Environment.getExternalStorageDirectory().getPath() +     "/coverage.exec";
File coverageFile = new File(covPath);
Class<?> emmaRTClass = Class.forName("com.vladium.emma.rt.RT");
Method dumpCoverageMethod =        emmaRTClass.getMethod("dumpCoverageData",coverageFile.getClass(),     boolean.class, boolean.class);
dumpCoverageMethod.invoke(null, coverageFile, true, false);
} catch (Exception e) {
}

}

}

模拟器是Nexus 5 API 19(我确实尝试了大部分版本。)

来自设备的日志 EMMA:运行时覆盖率数据合并到[/storage/sdcard/coverage.exec] {8 ms}

运行后的日志./gradlew jacocoTestReport Unable to read execution data file /Users/MyDummy/app/coverage.exec

如果相关,我会使用OSX10.12.3。

总而言之,我需要知道(或任何工作示例)如何在以下情况下获取代码覆盖率:

  • 手动测试应用程序。
  • 在Android应用程序上。
  • 使用Gradle not Maven或Ant。
  • Android Studio而不是Eclipse。

我看不出任何出路,真的很感激帮助。

1 个答案:

答案 0 :(得分:0)

我已经提供了有关如何在手动测试期间获取代码覆盖率的详细操作指南at my blog。在它之后,您应该获得代码覆盖率报告。你似乎正朝着正确的方向前进,但请仔细阅读这篇文章。

描述了一些更先进和完整的解决方案in another blog post。它使用NanoHttpd在设备/模拟器上创建REST服务器。 API提供单个端点,将报告文件写为响应。此外,还提供了自定义(更快)的CSV报告编写器。

如果您想进一步讨论GUI自动化测试(与Android相关),请随时与我联系:)