These are instructions for collecting code coverage data for android instrumentation and junit tests.
[TOC]
In order to use EMMA code coverage, we need to create build time .em files and runtime .ec files. Then we need to process them using the build/android/generate_emma_html.py script.
- Use the following GN build arguments:
target_os = "android"
emma_coverage = true
emma_filter = "org.chromium.chrome.browser.ntp.*,-*Test*,-*Fake*,-*Mock*"
The filter syntax is as documented for the EMMA coverage filters.
Now when building, .em files will be created in the build directory.
-
Run tests, with option
--coverage-dir <directory>
, to specify where to save the .ec file. For example, you can run chrome junit tests:out/Debug/bin/run_chrome_junit_tests --coverage-dir /tmp/coverage
. -
Turn off strict mode when running instrumentation tests by adding
--strict-mode=off
because the EMMA code causes strict mode violations by accessing disk. -
Use a pre-L Android OS (running Dalvik) because code coverage is not supported in ART.
-
The coverage results of junit and instrumentation tests will be merged automatically if they are in the same directory.
-
Now we have both .em and .ec files. We can create a html report using
generate_emma_html.py
, for example:
build/android/generate_emma_html.py \
--coverage-dir /tmp/coverage/ \
--metadata-dir out/Debug/ \
--output example.html
Then an example.html containing coverage info will be created:
EMMA: writing [html] report to [<your_current_directory>/example.html] ...