Skip to main content

A pytest plugin which allows to stream test reports at runtime

Project description

PyPI version Python versions
Authors:

Christos Liontos

Version:

0.1.0

Date:

2023-09-22

Download:

https://pypi.python.org/pypi/pytest-report-stream#downloads

Code:

https://github.com/kolitiri/pytest-report-stream

Welcome to pytest-report-stream!

pytest-report-stream is a pytest plugin which allows to stream test reports at runtime.

It is a simple plugin the leverages pytest’s build-in hook pytest_runtest_makereport to intercept test execution and publish the status of the test run.

The plugin produces report events at specific moments: - One report in the beginning of the test run - One report in the end of each test - One report in the end of the test run

The report structure looks like the dictionary below:

{
    "test_run_tag": "My first test framework",
    "test_run_id": "5e080accaee748dc80619ee99245124e",
    "timestamps": {
        "started": datetime.datetime(2023, 10, 22, 17, 4, 43, 161646),
        "duration": 0.002042,
        "finished": datetime.datetime(2023, 10, 22, 17, 4, 43, 163688),
    },
    "summary": {"passed": 1, "failed": 1, "status": "in-progress"},
    "results": {
        "tests/test_module1": {
            "test_func_1": {
                "name": "test_func_1",
                "description": "Docstrings of function 1",
                "status": "passed",
                "error": "None",
            },
            "test_func_2": {
                "name": "test_func_2",
                "description": "Docstrings of function 2",
                "status": "failed",
                "error": "None",
            }
        }
    },
}

Use cases

The pytest-report-stream plugin can be particularly useful while running large and long lasting integration testing suites using pytest.

The plugin can be used to stream live report events to a remote service, allowing to monitor the progress and the status of the tests.

For example, Jenkins and other CI/CD tools are great, but there might be a requirement to aggregate test results from multiple builds.

Installation

Install the plugin as below.

pip install pytest-report-stream

Usage

The plugin is available after installation and can be enabled using the --stream-reports flag.

pytest --stream-reports

The plugin is using a report_client: ReportClient instance to generate the reports.

A default report_client is used to log the reports in STDOUT. (Note that in order to view the reports in STDOUT you will need to run pytest with the flag -s)

The default client can be overriden in your own pytest_configure with an implementation of the abstract pytest_report_stream::ReportClient class.

Synchronous test using the default STDOUT report client

# content of tests/test_my_module.py
def test_sync():
    pass

Aynchronous test using the default STDOUT report client

# content of tests/test_my_module.py
import pytest

@pytest.mark.asyncio
async def test_async():
    pass

Aynchronous test using a custom report client

# content of tests/conftest.py
import pytest
from pytest_report_stream import ReportClient, ReportStreamPlugin


class myCustomReportClient(ReportClient):
    async def publish_report(self, report_msg: dict) -> None:
        print('Some log comming from my custom report client')


def pytest_configure(config):
    if config.option.stream_reports:
        config._stream_reports = ReportStreamPlugin(
            report_client=myCustomReportClient()
        )
        config.pluginmanager.register(config._stream_reports)
# content of tests/test_my_module.py
import pytest

@pytest.mark.asyncio
async def test_async():
    pass

You can implement the publish_report function and do pretty much anything, such as publishing the events to a message broker.

Requirements

  • pytest>=7.0.0

  • pytest-asyncio

Contributing

Contributions are very welcome.

Tests can be run with tox, please ensure the coverage at least stays the same before you submit a pull request.

tox

License

Distributed under the terms of the MIT license, “pytest-report-stream” is free and open source software

Issues

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

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

pytest-report-stream-0.1.0.tar.gz (6.6 kB view details)

Uploaded Source

File details

Details for the file pytest-report-stream-0.1.0.tar.gz.

File metadata

  • Download URL: pytest-report-stream-0.1.0.tar.gz
  • Upload date:
  • Size: 6.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.12.0

File hashes

Hashes for pytest-report-stream-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b1bd187eb8b21f6da7b59eab17dcd11de4e69fe10b1d6fcf0d3ec135b2184ddd
MD5 ef803df16e579dbffd7e80430182ce82
BLAKE2b-256 70e5a2a99f4d51b605a6234907b81ccac1f235f3e82797d53eba72037223c805

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