Firebase测试实验室不尊重coverageFile环境变量

时间:2018-01-30 22:42:14

标签: android android-testing firebase-test-lab circleci-2.0

我使用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

这就是我抓取应该包含coverage文件的工件的方法:

  - 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默认为根文件夹,并且在尝试在那里编写coverage文件时,Android文件系统正在获得权限被拒绝。任何帮助将不胜感激。

谢谢,

1 个答案:

答案 0 :(得分:1)

我在这里找到答案:https://medium.com/mobile-testing/generating-code-coverage-from-espresso-tests-running-in-firebase-test-lab-e98edcea7bdf

问题是覆盖文件的路径。而不是/sdcard/tempDir/coverage.ec,它应该只是/sdcard/coverage.ec。结果tempDir不存在,因此在尝试写入该文件夹时失败。

这是有效的环境变量选项:

--environment-variables coverage=true,coverageFile="/sdcard/coverage.ec