Skip to main content

Automatically find diff lines that need test coverage.

Project description

Automatically find diff lines that need test coverage. Also finds diff lines that have violations (according to tools such as pep8, pyflakes or pylint). This is used as a code quality metric during code reviews.

Overview

Diff coverage is the percentage of new or modified lines that are covered by tests. This provides a clear and achievable standard for code review: If you touch a line of code, that line should be covered. Code coverage is every developer’s responsibility!

The diff-cover command line tool compares an XML coverage report with the output of git diff. It then reports coverage information for lines in the diff.

Currently, diff-cover requires that:

  • You are using git for version control.

  • Your test runner generates coverage reports in Cobertura XML format.

Cobertura XML coverage reports can be generated with many coverage tools, including:

diff-cover is designed to be extended. If you are interested in adding support for other version control systems or coverage report formats, see below for information on how to contribute!

Installation

To install the latest release:

pip install diff_cover

To install the development version:

git clone https://github.com/edx/diff-cover.git
cd diff-cover
python setup.py install

Getting Started

  1. Set the current working directory to a git repository.

  2. Run your test suite under coverage and generate a Cobertura XML report. For example, if you are using nosetests and coverage.py:

nosetests --with-coverage
coverage xml

This will create a coverage.xml file in the current working directory.

NOTE: If you are using a different coverage generator, you will need to use different commands to generate the coverage XML report.

  1. Run diff-cover:

diff-cover coverage.xml

This will compare the current git branch to origin/master and print the diff coverage report to the console.

You can also generate an HTML version of the report:

diff-cover coverage.xml --html-report report.html

Multiple XML Coverage Reports

In the case that one has multiple xml reports form multiple test suites, you can get a combined coverage report (a line is counted as covered if it is covered in ANY of the xml reports) by running diff-cover with multiple coverage reports as arguments. You may specify any arbitrary number of coverage reports:

diff-cover coverage1.xml coverage2.xml

Quality Coverage

You can use diff-cover to see quality reports on the diff as well by running diff-quality.

diff-quality --violations=<tool>

Where tool is the quality checker to use. Currently pep8, pyflakes and pylint are supported, but more checkers can (and should!) be integrated.

Like diff-cover, HTML reports can be generated with

diff-quality --violations=<tool> --html-report report.html

If you have already generated a report using pep8, pyflakes or pylint you can pass the report to diff-quality. This is more efficient than letting diff-quality re-run pep8, pyflakes or pylint.

# For pylint < 1.0
pylint -f parseable > pylint_report.txt

# For pylint >= 1.0
pylint --msg-template="{path}:{line}: [{msg_id}({symbol}), {obj}] {msg}" > pylint_report.txt

# Use the generated pylint report when running diff-quality
diff-quality --violations=pylint pylint_report.txt

# Use a generated pep8 report when running diff-quality.
pep8 > pep8_report.txt
diff-quality --violations=pep8 pep8_report.txt

Note that you must use the -f parseable option to generate the pylint report for pylint versions less than 1.0 and the --msg-template option for versions >= 1.0.

diff-quality will also accept multiple pep8, pyflakes or pylint reports:

diff-quality --violations=pylint report_1.txt report_2.txt

If you need to pass in additional options you can with the options flag

diff-quality --violations=pep8 --options="--exclude='*/migrations*' --statistics" pep8_report.txt

Compare Branch

By default, diff-cover compares the current branch to origin/master. To specify a different compare branch:

diff-cover coverage.xml --compare-branch=origin/release

Troubleshooting

Issue: diff-cover always reports: “No lines with coverage information in this diff.”

Solution: diff-cover matches source files in the coverage XML report with source files in the git diff. For this reason, it’s important that the relative paths to the files match. If you are using coverage.py to generate the coverage XML report, then make sure you run diff-cover from the same working directory.

Issue: GitDiffTool._execute() raises the error:

fatal: ambiguous argument 'origin/master...HEAD': unknown revision or path not in the working tree.

This is known to occur when running diff-cover in Travis CI

Solution: Fetch the remote master branch before running diff-cover:

git fetch origin master:refs/remotes/origin/master

Issue: diff-quality reports “diff_cover.violations_reporter.QualityReporterError: No config file found, using default configuration”

Solution: Your project needs a pylintrc file. Provide this file (it can be empty) and diff-quality should run without issue.

License

The code in this repository is licensed under version 3 of the AGPL unless otherwise noted.

Please see LICENSE.txt for details.

How to Contribute

Contributions are very welcome. The easiest way is to fork this repo, and then make a pull request from your fork. The first time you make a pull request, you may be asked to sign a Contributor Agreement.

Reporting Security Issues

Please do not report security issues in public. Please email security@edx.org

Mailing List and IRC Channel

You can discuss this code on the edx-code Google Group or in the edx-code IRC channel on Freenode.

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

diff_cover-0.5.2.tar.gz (33.2 kB view details)

Uploaded Source

File details

Details for the file diff_cover-0.5.2.tar.gz.

File metadata

  • Download URL: diff_cover-0.5.2.tar.gz
  • Upload date:
  • Size: 33.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for diff_cover-0.5.2.tar.gz
Algorithm Hash digest
SHA256 4c84fdad7acc9c6b5d3bce8253e46910f7f457f19f8fcc26d5452724bccc940d
MD5 12d480c9c3b3db0e542d044b9424999f
BLAKE2b-256 82aeece1b28f3a29e43ad4f1a4a794233cc124c18dfd74ceaeaa6dd64a7e1aa5

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