Skip to main content

A Cobertura coverage parser that can diff reports.

Project description

pycobertura

A Cobertura coverage parser that can diff reports.

Travis PyPI

Features:

  • show coverage summary of a cobertura file

  • compare two cobertura files and show changes

  • output in plain text or HTML

  • colorized diff output

  • diff exit status of non-zero if number of uncovered lines rose

pycobertura was designed for people who want to prevent their code coverage from decreasing. Any line changed should be tested and newly introduced code that is uncovered should fail a build and clearly show the author of the change what is left to test.

Typically, Continous Integration (CI) or Continous Delivery (CD) tools would want to test new code and compare it with the previous successful build (e.g., production or the target branch of a pull request) whether the number of uncovered lines rose and if it did, fail the build. This ensures that any code change is tested moving forward without letting legacy uncovered lines get in your way, allowing developers to focus solely on their changes.

Install

$ pip install pycobertura

CLI usage

pycobertura provides a command line interface to report on coverage files.

Help commands

$ pycobertura --help
$ pycobertura show --help
$ pycobertura diff --help

Command show

The show command displays the report summary of a coverage file.

$ pycobertura show coverage.xml
Name                     Stmts    Miss  Cover    Missing
---------------------  -------  ------  -------  ---------
pycobertura/__init__         1       0  100.00%
pycobertura/cli             18       0  100.00%
pycobertura/cobertura       93       0  100.00%
pycobertura/reports        129       0  100.00%
pycobertura/utils           12       0  100.00%
TOTAL                      253       0  100.00%

Command diff

You can also use the diff command to show the difference between two coverage files.

$ pycobertura diff coverage.old.xml coverage.new.xml
Name          Stmts    Miss    Cover     Missing
------------  -------  ------  --------  ---------
dummy/dummy   -        -2      +50.00%   -2, -5
dummy/dummy2  +2       -       +100.00%
TOTAL         +2       -2      +50.00%

The column Missing will show line numbers prefixed with either a plus sign + or a minus sign -. When prefixed with a plus sign, the line was introduced as uncovered, when prefixed as a minus sign, the line is no longer uncovered.

Library usage

Using it as a library in your Python application is easy:

from pycobertura import Cobertura
cobertura = Cobertura('coverage.xml')

cobertura.version == '3.7.1'
cobertura.line_rate() == 1.0  # 100%
cobertura.classes() == [
    'pycobertura/__init__',
    'pycobertura/cli',
    'pycobertura/cobertura',
    'pycobertura/reports',
    'pycobertura/utils',
]
cobertura.line_rate('pycobertura/cli') == 1.0

from pycobertura import TextReporter
tr = TextReporter(cobertura)
tr.generate() == """\
Name                     Stmts    Miss  Cover    Missing
---------------------  -------  ------  -------  ---------
pycobertura/__init__         1       0  100.00%
pycobertura/cli             18       0  100.00%
pycobertura/cobertura       93       0  100.00%
pycobertura/reports        129       0  100.00%
pycobertura/utils           12       0  100.00%
TOTAL                      253       0  100.00%"""

from pycobertura import TextReporterDelta

coverage1 = Cobertura('coverage1.xml')
coverage2 = Cobertura('coverage2.xml')
delta = TextReporterDelta(coverage1, coverage2)
delta.generate() == """\
Name          Stmts    Miss    Cover     Missing
------------  -------  ------  --------  ---------
dummy/dummy   -        -2      +50.00%   -2, -5
dummy/dummy2  +2       -       +100.00%
TOTAL         +2       -2      +50.00%"""

Contribute

Found a bug? Got a patch? Have an idea? Please use Github issues or fork pycobertura and submit a pull request (PR). All contributions are welcome!

If you submit a PR:

  • ensure the description of your PR illustrates your changes clearly by showing what the problem was and how you fixed it (before/after)

  • make sure your changes are covered with one or more tests

  • add a descriptive note in the CHANGES file under the Unreleased section

  • update the README accordingly if your changes outdate the documentation

  • make sure all tests are passing using tox

pip install tox
tox

Release Notes

Unreleased

0.4.0 (2015-01-04)

  • rename Cobertura.total_lines() -> Cobertura.total_statements()

  • rename Cobertura.line_hits() -> Cobertura.hit_statements()

  • introduce Cobertura.missed_statements()

  • introduce Cobertura.line_statuses() which returns line numbers for a given class name with hit/miss statuses

  • introduce Cobertura.class_source() which returns the source code for a given class along with hit/miss status

  • pycobertura show now includes HTML source

  • pycobertura show now accepts --source which indicates where the source code directory is located

  • Cobertura() now takes an optional base_path argument which will be used to resolve the path to the source code by joining the base_path value to the path found in the Cobertura report.

  • an error is now raised if Cobertura is passed a non-existent XML file path

  • pycobertura diff now includes HTML source

  • pycobertura diff now accepts --source1 and --source2 which indicates where the source code directory of each of the Cobertura reports are located

  • introduce CoberturaDiff used to diff Cobertura objects

  • argument class_name for Cobertura.total_statements is now optional

  • argument class_name for Cobertura.total_misses is now optional

  • argument class_name for Cobertura.total_hits is now optional

0.3.0 (2014-12-23)

  • update description of pycobertura

  • pep8-ify

  • add pep8 tasks for tox and travis

  • diff command returns non-zero exit code if coverage worsened

  • Cobertura.branch_rate is now a method that can take an optional class_name argument

  • refactor internals for improved readability

  • show classes that contain no lines, e.g. __init__.py

  • add Cobertura.filename(class_name) to retrieve the filename of a class

  • fix erroneous reporting of missing lines which was equal to the number of missed statements (wrong because of multiline statements)

0.2.1 (2014-12-10)

  • fix py26 compatibility by switching the XML parser to lxml which has a more predictible behavior when used across all Python versions.

  • add Travis CI

0.2.0 (2014-12-10)

  • apply Skeleton 2.0 theme to html output

  • add -o / --output option to write reports to a file.

  • known issue: diffing 2 files with options --format text, --color and --output does not render color under PY2.

0.1.0 (2014-12-03)

  • add --color and --no-color options to pycobertura diff.

  • add option -f and --format with output of text (default) and html.

  • change class naming from report to reporter

0.0.2 (2014-11-27)

  • MIT license

  • use pypandoc to convert the long_description in setup.py from Markdown to reStructuredText so pypi can digest and format the pycobertura page properly.

0.0.1 (2014-11-24)

  • Initial version

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pycobertura-0.4.0.tar.gz (29.6 kB view details)

Uploaded Source

File details

Details for the file pycobertura-0.4.0.tar.gz.

File metadata

  • Download URL: pycobertura-0.4.0.tar.gz
  • Upload date:
  • Size: 29.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pycobertura-0.4.0.tar.gz
Algorithm Hash digest
SHA256 d4fa216b90c0d8dda9722983f85ea36e81ef19b6243870302f69370b7ecc93c1
MD5 159cdbd44d8c3b5979849fef5e4ff1f9
BLAKE2b-256 4759d1158563409062471a2c94ae4c39445dbb74d8d4053a50ea7521f9f9a5a2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page