Skip to main content

pytest-argus-reporter

PyPI version Python versions .github/workflows/tests.yml Libraries.io dependency status for GitHub repo Using Black Codecov Reports

A plugin to send pytest tests results to Argus, with extra context data

Features

  • Report each test result into Argus as they finish
  • Automatically append contextual data to each test:
    • git information such as branch or last commit and more
    • all of CI env variables
      • Jenkins
      • Travis
      • Circle CI
      • Github Actions
    • username if available
  • Report a test summary to Argus for each session with all the context data
  • Append any user data into the context sent to Argus

Requirements

Installation

You can install "pytest-argus-reporter" via pip from PyPI

pip install pytest-argus-reporter

Usage

Run and configure from command line

pytest --argus-post-reports --argus-base-url http://argus-server.io:8080 --argus-api-key 1234 --extra-headers '{"X-My-Header": "my-value"}'

Configure from code (ideally in conftest.py)

from pytest_argus_reporter import ArgusReporter

def pytest_plugin_registered(plugin, manager):
    if isinstance(plugin, ArgusReporter):
      # TODO: get credentials in more secure fashion programmatically, maybe AWS secrets or the likes
      # or put them in plain-text in the code... what can ever go wrong...
      plugin.base_url = "https://argus.scylladb.com"
      plugin.api_key = "123456" # get it from your user page on Argus
      plugin.test_type = "dtest"
      plugin.extra_headers = {}

see pytest docs for more about how to configure pytest using .ini files

Collect context data for the whole session

In this example, I'll be able to build a dashboard for each version:

import pytest

@pytest.fixture(scope="session", autouse=True)
def report_formal_version_to_argus(request):
    """
    Append my own data specific, for example which of the code under test is used
    """
    # TODO: programmatically set to the version of the code under test...
    my_data = {"formal_version": "1.0.0-rc2" }

    elk = request.config.pluginmanager.get_plugin("argus-reporter-runtime")
    elk.session_data.update(**my_data)

Collect data for specific tests

import requests

def test_my_service_and_collect_timings(request, argus_reporter):
    response = requests.get("http://my-server.io/api/do_something")
    assert response.status_code == 200

    argus_reporter.append_test_data(request, {"do_something_response_time": response.elapsed.total_seconds() })
    # now, a dashboard showing response time by version should be quite easy
    # and yeah, it's not exactly a real usable metric, but it's just one example...

Or via the record_property built-in fixture (that is normally used to collect data into junit.xml reports):

import requests

def test_my_service_and_collect_timings(record_property):
    response = requests.get("http://my-server.io/api/do_something")
    assert response.status_code == 200

    record_property("do_something_response_time", response.elapsed.total_seconds())

TODO: Split tests based on their duration histories

One cool thing that can be done now that you have a history of the tests, is to split the tests based on their actual runtime when passing. For long-running integration tests, this is priceless.

In this example, we're going to split the run into a maximum of 4 min slices. Any test that doesn't have history information is assumed to be 60 sec long.

# pytest --collect-only --argus-splice --argus-max-splice-time=4 --argus-default-test-time=60
...

0: 0:04:00 - 3 - ['test_history_slices.py::test_should_pass_1', 'test_history_slices.py::test_should_pass_2', 'test_history_slices.py::test_should_pass_3']
1: 0:04:00 - 2 - ['test_history_slices.py::test_with_history_data', 'test_history_slices.py::test_that_failed']

...

# cat include000.txt
test_history_slices.py::test_should_pass_1
test_history_slices.py::test_should_pass_2
test_history_slices.py::test_should_pass_3

# cat include000.txt
test_history_slices.py::test_with_history_data
test_history_slices.py::test_that_failed

### now we can run each slice on its own machine
### on machine1
# pytest $(cat include000.txt)

### on machine2
# pytest $(cat include001.txt)

Contributing

Contributions are very welcome. Tests can be run with nox. Please ensure the coverage at least stays the same before you submit a pull request.

License

Distributed under the terms of the Apache license, "pytest-argus-reporter" is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

Thanks

This pytest plugin was generated with Cookiecutter along with @hackebrot's cookiecutter-pytest-plugin template.

Metadata

Release files for pytest-argus-reporter 0.16.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pytest-argus-reporter 0.16.5
File Size Uploaded
pytest_argus_reporter-0.16.5.tar.gz 17.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pytest-argus-reporter 0.16.5
File Interpreter ABI Platform
pytest_argus_reporter-0.16.5-py3-none-any.whl Python 3 none any Details

Total release size: 31.2 kB

Release files / pytest_argus_reporter-0.16.5.tar.gz

Download URL pytest_argus_reporter-0.16.5.tar.gz
Size 17.7 kB
Tags Source
SHA-256 checksum
How to use checksums
79edfef049607c3a9493aefae867c97dd1c7712a5cd946e2eb6cdef2f15d7acf
BLAKE2b-256 checksum
How to use checksums
48bd2cf130ef845d9a436b1d7583c3e337d4a0116e1d9ea6f74e5bc9ee23cbda
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log

Release files / pytest_argus_reporter-0.16.5-py3-none-any.whl

Download URL pytest_argus_reporter-0.16.5-py3-none-any.whl
Size 13.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
aacbf1e4d530ec8b4b83cce703541175870ff451cce8197534c080d0bcddae2b
BLAKE2b-256 checksum
How to use checksums
a0ea7a36f1a161a09956f63d0ebbcae6f5da5f61deef94a4b7a123c499e7a736
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 28, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page