Based on this documentation - https://developer.android.com/studio/test/command-line.html#AMOptionsSyntax , you can get code coverage results from the Firebase lab. Some people at # test-lab at firebase-community.slack.com may make it work, but after several attempts, I still click on the wall.
I can get a combined jacaco and emma code coverage report by following this guide , so there is nothing wrong with my local setup, but it is problematic when trying to give arguments to gcloud cmd to request coverage numbers, and that says emma coverage.
Essentially when I run this command locally
gcloud beta test android run \ --type instrumentation \ --app app/build/outputs/apk/*-debug-unaligned.apk \ --test app/build/outputs/apk/*-debug-androidTest-unaligned.apk \ --device-ids Nexus6\ --os-version-ids 22 \ --locales en \ --orientations portrait \ --environment-variables coverage=true,coverageFile="/sdcard/coverage.ec" \ --directories-to-pull=/sdcard
I expect a coverage report to be generated, but I get this in the tools.results file
INSTRUMENTATION_STATUS: numtests=1 INSTRUMENTATION_STATUS: stream= com.godaddy.gdm.telephony.uitests.DialerTabTest: INSTRUMENTATION_STATUS: id=AndroidJUnitRunner INSTRUMENTATION_STATUS: test=dialerTabNumberFormattingTest INSTRUMENTATION_STATUS: current=1 INSTRUMENTATION_STATUS_CODE: 1 INSTRUMENTATION_STATUS: numtests=1 INSTRUMENTATION_STATUS: stream=. INSTRUMENTATION_STATUS: id=AndroidJUnitRunner INSTRUMENTATION_STATUS: test=dialerTabNumberFormattingTest INSTRUMENTATION_STATUS: current=1 INSTRUMENTATION_STATUS_CODE: 0 INSTRUMENTATION_RESULT: stream= Time: 6.022 OK (1 test) Error: **Failed to generate emma coverage.** INSTRUMENTATION_CODE: -1
And logcat says the following:
11-18 21:38:39.400: I/TestRunner(5246): run finished: 1 tests, 0 failed, 0 ignored 11-18 21:38:39.400: I/TestRunner(5246): [ 11-18 21:38:39.400 5246: 5263 E/ ] 11-18 21:38:39.400: I/TestRunner(5246): Failed to generate emma coverage. 11-18 21:38:39.400: I/TestRunner(5246): java.lang.reflect.InvocationTargetException 11-18 21:38:39.400: I/TestRunner(5246): at java.lang.reflect.Method.invoke(Native Method) 11-18 21:38:39.400: I/TestRunner(5246): at java.lang.reflect.Method.invoke(Method.java:372) 11-18 21:38:39.400: I/TestRunner(5246): at android.support.test.internal.runner.listener.CoverageListener.generateCoverageReport(CoverageListener.java:80) 11-18 21:38:39.400: I/TestRunner(5246): at android.support.test.internal.runner.listener.CoverageListener.instrumentationRunFinished(CoverageListener.java:68) 11-18 21:38:39.400: I/TestRunner(5246): at android.support.test.internal.runner.TestExecutor.reportRunEnded(TestExecutor.java:94) 11-18 21:38:39.400: I/TestRunner(5246): at android.support.test.internal.runner.TestExecutor.execute(TestExecutor.java:69) 11-18 21:38:39.400: I/TestRunner(5246): at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:262) 11-18 21:38:39.400: I/TestRunner(5246): at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1853) 11-18 21:38:39.400: I/TestRunner(5246): Caused by: java.io.FileNotFoundException: /sdcard/coverage.ec: open failed: EACCES (Permission denied) 11-18 21:38:39.400: I/TestRunner(5246): at libcore.io.IoBridge.open(IoBridge.java:456) 11-18 21:38:39.400: I/TestRunner(5246): at java.io.FileOutputStream.<init>(FileOutputStream.java:87) 11-18 21:38:39.400: I/TestRunner(5246): at com.vladium.emma.rt.RT.dumpCoverageData(RT.java:50) 11-18 21:38:39.400: I/TestRunner(5246): ... 8 more 11-18 21:38:39.400: I/TestRunner(5246): Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied) 11-18 21:38:39.400: I/TestRunner(5246): at libcore.io.Posix.open(Native Method) 11-18 21:38:39.400: I/TestRunner(5246): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186) 11-18 21:38:39.400: I/TestRunner(5246): at libcore.io.IoBridge.open(IoBridge.java:442) 11-18 21:38:39.400: I/TestRunner(5246): ... 10 more
If necessary, I can provide additional information.
android code-coverage firebase android-espresso jacoco
satyajit
source share