Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Set up coverage by running tests with an instrumented coverage tool, generating a report format your CI platform accepts, and publishing that report against the same commit the platform is reviewing. Coverage and static analysis are separate signals: coverage records which code ran during tests; static analysis reports potential code issues. Showing both in a pull request does not make coverage an input to the analyzer or prove the tests are effective.

Decide what the report needs to show

Before changing a build, identify the destination and the view you want. A percentage, changed-line annotations, a browsable HTML artifact, and a historical trend may require different outputs or settings. Coverage metrics also differ: line, statement, and branch coverage are not interchangeable. Check which metric the tool produces and which one the destination displays.

  • Choose the destination first. Its accepted formats determine whether the test tool can write a compatible report directly or whether conversion is needed.
  • Choose the report format. Cobertura XML is used in the documented Python and pull-request examples below; JaCoCo XML is common for Java; LCOV is supported by some tools. Do not assume one destination accepts every format. GitLab lists Cobertura and JaCoCo XML for coverage reports, while GitHub’s documented coverage setup uses Cobertura XML.
  • Choose the display. Decide whether you need a total percentage, file or changed-line detail, a downloadable artifact, or trend history. Some destinations require separate configuration for these views.
  • Choose what counts. Review exclusions for generated, vendor, or otherwise out-of-scope files, and keep the same rules for the baseline and proposed changes.
  • Plan for untrusted pull requests. Decide how uploads will work when a workflow from a fork cannot access repository write credentials.

Build the CI flow in the right order

A coverage collector generally has to observe tests as they run. Creating a report later from saved coverage data is not a substitute for collecting that data. The basic sequence is:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
  1. Check out the source revision being tested and reviewed.
  2. Install the project and its coverage dependencies.
  3. Run tests with coverage collection enabled.
  4. Generate the machine-readable report in the format the destination expects.
  5. Publish the report or retain it as an artifact, using the destination’s own upload mechanism.
  6. Confirm that the report is associated with the intended branch or commit and that its file paths match the repository.

Static-analysis results need their own reporting path. For example, GitHub documents SARIF upload for code-scanning results; a coverage XML file does not replace it. See GitHub’s SARIF upload guide.

#1 Best Overall
GameStop Physical Gift Card
  • Redeemable at US GameStop, EB Games, Babbage's, Electronic Boutique, EBX, Planet X, and Software Etc. stores. Also redeemable online at and GameStop.com and EBGames.com.
  • Over 6,100 stores located throughout the United States.
  • GameStop. Power to the Players.
  • Redemption: Instore and Online
  • No returns and no refunds on gift cards.

Example: generate Python coverage as Cobertura XML

With pytest and pytest-cov installed, a common command is:

pytest --cov=your_package --cov-report=xml

This runs the tests while collecting coverage and writes an XML report, commonly named coverage.xml. GitHub’s documented Python example uses this pattern and expects Cobertura XML for its pull-request coverage upload. Replace your_package with the code you intend to measure; the correct package and test setup depend on the project.

Rank #2
Xbox Physical Gift Card
  • XBOX GIFT CARD: Buy full digital game downloads, game add-ons, in-game currency, memberships, devices, apps, movies, TV shows, and more.
  • DIGITAL GAMES: Choose from hundreds of games, from AAA to indie options. Start playing the moment your most anticipated game is available when you pre-order and pre-download it.
  • GAME AD-ONS: Extend the experience of your favorite games with add-ons and in-game currency.
  • MOVIES & TV SHOWS: Rent or buy new and popular movies and TV shows from a massive library.
  • PERFECT GIFT: Great as a gift for a friend or yourself. Xbox Gift Cards are easy to use, never expire, and give the freedom to pick the gift they want. Enjoy more ways to play without a credit card attached to your Microsoft account.

Coverage.py can also write XML after collection, or produce HTML, JSON, and LCOV reports. Its XML output is Cobertura-compatible and defaults to coverage.xml; an explicit output path can be set with -o. For example:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
coverage xml -o coverage.xml

See Coverage.py’s XML command documentation and its reporting command reference. An HTML report is useful for people to browse, but it does not satisfy a machine-readable upload requirement unless the destination explicitly accepts that output.

Rank #3
$100 XBOX Gift Card [Digital Code]
  • THE PERFECT GAMING GIFT — Buy an XBOX Gift Card for yourself or a friend and let them choose the games, add‑ons, subscriptions, and accessories they want most.
  • USE FOR GAMES & CONTENT — Redeem for thousands of digital XBOX games, from backward compatible classics to the latest new releases, plus DLC and in‑game currency.
  • GAME PASS READY — Apply your balance toward XBOX Game Pass Ultimate to play new titles on day one* and access a library of hundreds of high‑quality console games.
  • PRE‑ORDER & PRE‑INSTALL GAMES — Use your balance to pre‑order and pre‑download upcoming titles so you’re ready to play the moment they launch.
  • NO FEES OR EXPIRATION — XBOX Gift Cards never expire and have no service fees, so your balance is ready whenever you are.

Publish coverage in GitHub pull requests

As documented on September 24, 2026, GitHub’s repository Code Quality coverage setup uses Cobertura XML, GitHub Actions, and the repository’s Code Quality feature. The workflow needs code-quality: write; the guide recommends running on pushes to the default branch as well as pull requests so GitHub has a baseline and a proposed-change result to compare. It also checks out the pull request head SHA so coverage line positions map to the diff.

A Python workflow based on GitHub’s documented example looks like this:

Rank #4
Fortnite Physical Gift Card
  • An Epic Games account is required to redeem an Epic Games Store Card code
  • If playing on a console platform (PlayStation Network, Xbox Live, Nintendo Switch or Mobile) you need to link your Epic Games account to that gaming platform (one time) to redeem your gift card code
  • The 16 digit code on the back of the card WILL NOT work if redeemed directly through your gaming platform (PlayStation Network, Xbox Live, Nintendo Switch, Mobile, etc.)
  • Note: Nintendo devices do not support Fortnite Shared Wallet, so V-Bucks purchased using your account balance will not show up on your Nintendo device. However, if you purchase items in the web Item Shop — or another platform where you play Fortnite — those items will be available in your Locker across all platforms.
  • Redemption: Online
permissions:
  contents: read
  code-quality: write

steps:
  - uses: actions/checkout@v6
    with:
      ref: ${{ github.event.pull_request.head.sha || github.sha }}

  - name: Run tests with coverage
    run: pytest --cov=. --cov-report=xml

  - name: Upload coverage report
    if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
    uses: actions/upload-code-coverage@v1
    with:
      file: coverage.xml
      language: Python
      label: code-coverage/pytest

The conditional skips the upload for pull requests from forks. That avoids asking an untrusted workflow to use a write credential it may not have. GitHub’s guide says the action can upload Cobertura reports from any language, but the test command and language value must match the project. The documented result can include a pull-request summary and per-file breakdown. Follow GitHub’s setup guide for current prerequisites and workflow details.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

GitHub announced this coverage feature in public preview on May 26, 2026. At that announcement, Code Quality was available for GitHub Enterprise Cloud and Team, was not yet available on GitHub Enterprise Server, and was free during preview. Availability and pricing can change; check GitHub’s announcement and current setup documentation before relying on those plan details.

Best Value
$25 PlayStation Store Gift Card [Digital Code]
  • Redeem for anything on PlayStationStore: games, add-ons, PlayStationPlus and more.
  • Everything you want to play. Choose from the largest library of PlayStation content.
  • Use gift card funds to contribute towards PlayStationPlus memberships.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Adapt the report to Java and JaCoCo

JaCoCo’s Maven plugin attaches its agent to tests and provides report goals including report, report-integration, and report-aggregate. A typical build invocation is mvn test when the plugin is configured in the project. Confirm that an XML report is generated if the recipient requires machine-readable coverage; producing only HTML, such as target/site/jacoco/index.html, is not enough for an XML upload.

For line-number information, JaCoCo requires target classes compiled with debug information. Its documentation also warns against Maven Surefire/Failsafe settings forkCount 0 or forkMode never: tests then run without the configured Java agent, so coverage is not recorded. For multi-module builds, configure aggregation deliberately rather than treating separate module reports as one repository-wide result. See the JaCoCo Maven plugin documentation. GitLab’s coverage visualization accepts JaCoCo XML; format support is destination-specific.

GitLab: percentage and changed-line annotations are separate

GitLab has two distinct coverage mechanisms. The job-level coverage keyword parses a percentage from job logs using a regular expression. The artifacts:reports:coverage_report setting ingests Cobertura or JaCoCo XML for changed-line visualization. Configure both if you want both views; one does not imply the other.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
test:
  script:
    - ./run-tests-with-coverage
  coverage: '/TOTAL.*? ([0-9]+(?:\.[0-9]+)?%)/'
  artifacts:
    reports:
      coverage_report:
        coverage_format: cobertura
        path: coverage/cobertura-coverage.xml

This example assumes the script writes the named XML report and prints a line matched by the illustrative regular expression. Replace the command, format, path, and expression to match the real job output. GitLab’s examples cover many tools, but output can change, so validate the expression against actual logs. Its report processing happens after the pipeline completes, and annotations are limited to changed files in the merge request. GitLab can combine multiple matching reports with wildcard paths. Consult the current coverage reporting documentation and CI/CD artifact report types.

Diagnose missing or misleading results

  • No report file: Check that the test command enables collection, that report generation runs after tests, and that the configured output path is the same path the publishing step expects.
  • Empty report or zero coverage: Confirm tests actually ran under the collector. For JaCoCo Maven builds, check that test forking has not been disabled and that the agent is attached.
  • Report exists but no annotations: Inspect the XML file paths and compare them with repository paths. Absolute container paths, a different checkout directory, or a report generated from another revision can prevent matching. On GitLab, annotations apply only to changed files and processing is asynchronous after pipeline completion.
  • Wrong lines or no pull-request comparison: Ensure the report and analysis refer to the intended commit. GitHub’s documented workflow checks out the pull request head SHA; a different source revision can misalign line positions.
  • Percentage differs across tools: Compare the metric, measured files, exclusions, and aggregation rules. Line coverage and branch coverage can yield different percentages, and module reports do not necessarily use the same denominator as a whole-repository report.
  • Fork upload is skipped: Check whether the workflow intentionally excludes fork pull requests because write permissions or secrets are unavailable. Do not expose upload credentials to untrusted code; verify the destination’s current safe authentication options.
  • Percentage is missing but annotations work, or vice versa: Configure the destination’s percentage parser and report ingestion independently where required, and validate each output separately.

Use coverage as context, not a quality verdict

Coverage helps identify code that tests did not execute and can guide reviewers toward less-exercised areas when considering analysis findings. It does not show that assertions are meaningful, that edge cases are tested, or that a reported issue is safe or false. A threshold is a project policy and can serve as a regression guard, but no universal percentage establishes quality. Keep the chosen metric and exclusions visible to the people interpreting the result.

Quick Recap

Bestseller No. 1
GameStop Physical Gift Card
GameStop Physical Gift Card
Over 6,100 stores located throughout the United States.; GameStop. Power to the Players.; Redemption: Instore and Online
$25.00
Bestseller No. 2
Xbox Physical Gift Card
Xbox Physical Gift Card
MOVIES & TV SHOWS: Rent or buy new and popular movies and TV shows from a massive library.
$25.00
Bestseller No. 3
$100 XBOX Gift Card [Digital Code]
$100 XBOX Gift Card [Digital Code]
Gift cards are region‑specific (U.S. only) and cannot be transferred once redeemed.
$100.00
Bestseller No. 4
Fortnite Physical Gift Card
Fortnite Physical Gift Card
An Epic Games account is required to redeem an Epic Games Store Card code; Redemption: Online
$50.00
Bestseller No. 5
$25 PlayStation Store Gift Card [Digital Code]
$25 PlayStation Store Gift Card [Digital Code]
Redeem for anything on PlayStationStore: games, add-ons, PlayStationPlus and more.; Everything you want to play. Choose from the largest library of PlayStation content.
$25.00

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.