2016-11-21 37 views
7

このドキュメントに基づいて - https://developer.android.com/studio/test/command-line.html#AMOptionsSyntax Firebase Labからコードカバレッジの結果を得ることができます。 firebase-community.slack.comの#test-labに参加している人がいますが、いくつかの試みをしてもまだ壁に当たっています。Googleからコードカバレッジレポートを取得する方法Android Espressoテスト用Firebase

this guideに従うことで、jacacoとemmaのコードカバレッジレポートを組み合わせることができます。ローカルセットアップには何も問題はありませんが、カバレッジ番号を求めるためにgcloudコマンドラインに引数を与えようとすると問題があります。エマのカバレッジ基本的に

、私はローカル

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 

を、このコマンドを実行すると、私は、カバレッジレポートが生成されることを期待していますが、私はinstruments.resultsでこれを取得

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 

そしてlogcatこれは言う

ファイル:

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 

必要に応じてさらに情報を提供できます。

+0

から

debug { testCoverageEnabled true } 

をデバッグするためのアプリケーション/ build.gradleで有効になっていますあなたのローカルマシンにコードカバレッジファイルがありますか? – spierce7

+0

通常、app/build/outputs/ /jacoco/coverage.ecファイルにあります。あなたのプロジェクトフォルダ内の 'coverage.ec'の検索を試してみてください。 – satyajit

+0

しかし、firebaseで実行すると、あなたのローカルマシンには存在しませんよね?私はどのようにあなたのローカルマシンにfirebaseのそれを得るのですか? – spierce7

答えて

3

SDカードに書き込むための適切な権限を有効にすることが必要であることが判明しました。また、この SO answer

のよう

のAndroidManifest.xmlで
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

、必ずtestCoverageEnabled真作り、この中postどう

関連する問題