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



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

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

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

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

应用程序内/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毫秒内}

运行后的日志/gradlew jacoco测试报告Unable to read execution data file /Users/MyDummy/app/coverage.exec

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

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

  • 手动测试应用程序
  • 在Android应用程序上
  • 它使用的是Gradle,而不是Maven或Ant
  • Android Studio而非Eclipse

我看不出有什么出路,非常感谢你的帮助。

我在博客中提供了一份详细的如何在手动测试期间获得代码覆盖率的指南。接下来,您应该获得一份代码覆盖率报告。你似乎正朝着正确的方向前进,但请仔细阅读这篇文章。

另一篇博客文章描述了一个更高级、更完整的解决方案。它使用NanoHttpd在设备/模拟器上创建REST服务器。API提供了一个将报告文件作为响应写入的端点。此外,还提供了一个自定义(更快)的CSV报告编写器。

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

相关内容

  • 没有找到相关文章

最新更新