0
Files
src/build/android/docs/coverage.md
Finnur Thorarinsson ab966867f2 Fix documentation for Android code coverage generation.
The instructions seem to assume running the script from /src and
the intent is to create two directories

/tmp/coverage
/tmp/coverage_report

but the lack of a slash prefix results in the creation of...

/tmp/coverage
/src/tmp/coverage_report

Bug: None
Change-Id: Ib10050a577fc8e9494a903386d5886ccbef8aa1e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2124256
Commit-Queue: John Budorick <jbudorick@chromium.org>
Reviewed-by: Yun Liu <yliuyliu@google.com>
Reviewed-by: John Budorick <jbudorick@chromium.org>
Cr-Commit-Position: refs/heads/master@{#754026}
2020-03-27 15:31:38 +00:00

2.3 KiB

Android code coverage instructions

These are instructions for collecting code coverage data for android instrumentation and JUnit tests.

[TOC]

How JaCoCo coverage works

In order to use JaCoCo code coverage, we need to create build time pre-instrumented class files and runtime .exec files. Then we need to process them using the build/android/generate_jacoco_report.py script.

How to collect coverage data

  1. Use the following GN build arguments:
target_os = "android"
use_jacoco_coverage = true

Now when building, pre-instrumented files will be created in the build directory.

  1. Run tests, with option --coverage-dir <directory>, to specify where to save the .exec file. For example, you can run chrome JUnit tests: out/Debug/bin/run_chrome_junit_tests --coverage-dir /tmp/coverage.

  2. The coverage results of JUnit and instrumentation tests will be merged automatically if they are in the same directory.

How to generate coverage report

  1. Now we have generated .exec files already. We can create a JaCoCo HTML/XML/CSV report using generate_jacoco_report.py, for example:
build/android/generate_jacoco_report.py \
   --format html \
   --output-dir /tmp/coverage_report/ \
   --coverage-dir /tmp/coverage/ \
   --sources-json-dir out/Debug/ \

Then an index.html containing coverage info will be created in output directory:

[INFO] Loading execution data file /tmp/coverage/testTitle.exec.
[INFO] Loading execution data file /tmp/coverage/testSelected.exec.
[INFO] Loading execution data file /tmp/coverage/testClickToSelect.exec.
[INFO] Loading execution data file /tmp/coverage/testClickToClose.exec.
[INFO] Loading execution data file /tmp/coverage/testThumbnail.exec.
[INFO] Analyzing 58 classes.
  1. For XML and CSV reports, we need to specify --output-file instead of --output-dir since only one file will be generated as XML or CSV report.
build/android/generate_jacoco_report.py \
  --format xml \
  --output-file /tmp/coverage_report/report.xml \
  --coverage-dir /tmp/coverage/ \
  --sources-json-dir out/Debug/ \

or

build/android/generate_jacoco_report.py \
  --format csv \
  --output-file /tmp/coverage_report/report.csv \
  --coverage-dir /tmp/coverage/ \
  --sources-json-dir out/Debug/ \