colcon-lcov-result
An extension for colcon-core to provide aggregate coverage results using LCOV.
LCOV is a graphical front-end for GCC’s coverage testing tool gcov, producing the following coverage metrics:
Statement coverage
Function coverage
Branch coverage
For more information, see this paper and this Wikipedia page.
Usage
Build your packages with coverage flags, using colcon:
$ colcon build \ --symlink-install \ --cmake-args \ -DCMAKE_CXX_FLAGS='-fprofile-arcs -ftest-coverage' \ -DCMAKE_C_FLAGS='-fprofile-arcs -ftest-coverage'See also colcon-mixin and colcon-mixin-repository for a short-hand command (--mixin coverage-gcc)
Create a baseline for zero coverage:
$ colcon lcov-result --initialThis step is optional, but will help reveal any files that are untouched by tests
Run tests:
$ colcon testGather the lcov results:
$ colcon lcov-result Reading tracefile /home/user/workspace/my_cool_ws/lcov/total_coverage.info Summary coverage rate: lines......: 78.6% (44 of 56 lines) functions..: 94.4% (34 of 36 functions) branches...: 37.0% (34 of 92 branches)Browse the coverage report by opening lcov/index.html in a browser
Zero the coverage counters and re-run tests:
$ colcon lcov-result --zero-counters $ colcon lcov-result --initial $ colcon test $ colcon lcov-result Reading tracefile /home/user/workspace/my_cool_ws/lcov/total_coverage.info Summary coverage rate: lines......: 78.6% (44 of 56 lines) functions..: 94.4% (34 of 36 functions) branches...: 37.0% (34 of 92 branches)
Tips and Tricks
When running locally, use the --packages-select option to generate coverage information for relevant packages
This will also suppress warnings for packages that were either not built with coverage flags or for which tests did not run
The --verbose flag can be used to print the coverage summary of each individual package as the results are analyzed
Contributing
For non-trivial contributions, it is recommended to first create an issue to discuss your ideas.
The following is the recommended workflow for contributing:
Install colcon and extensions in a virtual environment:
$ cd <workspace> $ python3 -m venv colcon-env $ source colcon-env/bin/activate $ pip3 install colcon-common-extensionsInstall colcon-lcov-result in editable mode:
$ cd <workspace> $ python3 -m venv colcon-env $ source colcon-env/bin/activate $ cd path/to/colcon-lcov-result $ pip3 install -e .As long as you are in the virtual environment, make changes to colcon-lcov-result run colcon lcov-result, and see the effect of the changes
Commit changes and submit a PR:
Troubleshooting
The following warning when running colcon lcov-result --initial implies that the package was not built with the correct flags:
--- stderr: my_pkg geninfo: WARNING: no .gcno files found in /home/user/workspace/build/my_pkg - skipping! ---The package will not show up in the final results. Use --packages-skip to suppress the warning
The following warning when running colcon lcov-result implies that no tests ran for that package
[0.576s] ERROR:colcon.colcon_lcov_result.task.lcov:lcov: ERROR: no valid records found in tracefile /home/user/workspace/build/my_pkg/coverage.info --- stderr: my_pkg geninfo: WARNING: no .gcda files found in /home/user/workspace/build/my_pkg - skipping! ---The package will show up in the final results with 0% coverage. Use --packages-skip to suppress these packages from the total
Known Issues
The final step of aggregating all the result files can be slow depending on the number of packages that were analyzed
Developing
See DEVELOPING.md.
Metadata
Release files for colcon-lcov-result 0.5.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| colcon_lcov_result-0.5.3.tar.gz | 15.6 kB | Without provenance | Details for colcon_lcov_result-0.5.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| colcon_lcov_result-0.5.3-py3-none-any.whl | Python 3 | none | any | Details for colcon_lcov_result-0.5.3-py3-none-any.whl |
Total release size: 30.0 kB
Release files / colcon_lcov_result-0.5.3.tar.gz
| Download URL | colcon_lcov_result-0.5.3.tar.gz |
|---|---|
| Size | 15.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4cbf83bbf0e1e82b22e95ce2d76b667fdaaca2cda6ecf77bd46a03dfc98c047d
|
|
BLAKE2b-256 checksum How to use checksums |
3192da94528d5c90e376744e14320eb2460b3c6356757ca7e00b64758d0074f4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.12.7
|
Release files / colcon_lcov_result-0.5.3-py3-none-any.whl
| Download URL | colcon_lcov_result-0.5.3-py3-none-any.whl |
|---|---|
| Size | 14.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
de643660ddf356fbbeae0eabefb6a9c70f30979ddb1759e638f2660581a34fb8
|
|
BLAKE2b-256 checksum How to use checksums |
5958329ca3d1591a21d570ce5926def9a7be4124b5648168ab50f6ec88339054
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.12.7
|
Security for colcon-lcov-result 0.5.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.