我正在使用 CircleCi 要求 Firebase 测试实验室为我运行仪器测试。测试都运行良好,据我所知,我已经正确设置了一切。但是,我真的很想获得我的代码覆盖率。
SD 卡从不包含代码覆盖率文件,并且在所有日志中我发现这个异常是我怀疑的问题:
java.io.FileNotFoundException: /jacoco.exec (Read-only file system)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:287)
at java.io.FileOutputStream.<init>(FileOutputStream.java:223)
at org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.openFile(FileOutput.java:67)
at org.jacoco.agent.rt.internal_8ff85ea.output.FileOutput.startup(FileOutput.java:49)
at org.jacoco.agent.rt.internal_8ff85ea.Agent.startup(Agent.java:122)
at org.jacoco.agent.rt.internal_8ff85ea.Agent.getInstance(Agent.java:50)
at org.jacoco.agent.rt.internal_8ff85ea.Offline.<clinit>(Offline.java:31)
at org.jacoco.agent.rt.internal_8ff85ea.Offline.getProbes(Offline.java:51)
at com.acme.android.MyApplication.$jacocoInit(Unknown Source:13)
at com.acme.android.MyApplication.<clinit>(Unknown Source:0)
at java.lang.Class.newInstance(Native Method)
at android.app.Instrumentation.newApplication(Instrumentation.java:1101)
at android.app.Instrumentation.newApplication(Instrumentation.java:1086)
at android.app.LoadedApk.makeApplication(LoadedApk.java:942)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5765)
at android.app.ActivityThread.-wrap1(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1661)
at android.os.Handler.dispatchMessage(Handler.java:105)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6541)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
这就是我所说的 Firebase 测试实验室:
- run:
name: Run instrumented test on Firebase Test Lab
command: gcloud firebase test android run --type instrumentation --app debug-app.apk --test debug-test.apk --device model=Nexus5X,version=26,locale=en,orientation=portrait --environment-variables coverage=true,coverageFile="/sdcard/tempDir/coverage.ec" --directories-to-pull=/sdcard --timeout 20m --no-record-video
这就是我获取应该包含覆盖文件的工件的方式:
- run:
name: Download instrumented test results from Firebase Test Lab
command: gsutil -m cp -r -U "`gsutil ls gs://test-lab-XXXXXX-YYYYY | tail -1`*" /root/workspace/firebase/ || true
我还确认覆盖文件没有作为工件存储在 Firebase 中。
我的 gradle 文件启用了代码覆盖率:
buildTypes {
debug {
matchingFallbacks = ["prod"]
minifyEnabled false
debuggable true
versionNameSuffix '-DEBUG'
testCoverageEnabled true
}
jacoco 似乎默认为根文件夹,并且在尝试在那里写入覆盖文件时获得了 Android 文件系统拒绝的权限。任何帮助将不胜感激。
谢谢,