Skip to main content

Replacement for the --resultlog option, focused in simplicity and extensibility

Project description

python version anaconda ci black

Replacement for the --resultlog option, focused in simplicity and extensibility.

Note

This plugin was created so developers can try out the candidate to replace the deprecated –resultlog option.

If you use --resultlog, please try out --report-log and provide feedback.

Usage

The --report-log=FILE option writes report logs into a file as the test session executes.

Each line of the report log contains a self contained JSON object corresponding to a testing event, such as a collection or a test result report. The file is guaranteed to be flushed after writing each line, so systems can read and process events in real-time.

Each JSON object contains a special key $report_type, which contains a unique identifier for that kind of report object. For future compatibility, consumers of the file should ignore reports they don’t recognize, as well as ignore unknown properties/keys in JSON objects that they do know, as future pytest versions might enrich the objects with more properties/keys.

Example

Consider this file:

# content of test_report_example.py


def test_ok():
    assert 5 + 5 == 10


def test_fail():
    assert 4 + 4 == 1
$ pytest test_report_example.py -q --report-log=log.json
.F                                                                   [100%]
================================= FAILURES =================================
________________________________ test_fail _________________________________

    def test_fail():
>       assert 4 + 4 == 1
E       assert (4 + 4) == 1

test_report_example.py:8: AssertionError
------------------- generated report log file: log.json --------------------
1 failed, 1 passed in 0.12s

The generated log.json will contain a JSON object per line:

$ cat log.json
{"pytest_version": "5.2.2", "$report_type": "SessionStart"}
{"nodeid": "", "outcome": "passed", "longrepr": null, "result": null, "sections": [], "_report_type": "CollectReport"}
{"nodeid": ".tmp/test_report_example.py", "outcome": "passed", "longrepr": null, "result": null, "sections": [], "_report_type": "CollectReport"}
{"nodeid": ".tmp/test_report_example.py::test_ok", "location": [".tmp\\test_report_example.py", 0, "test_ok"], "keywords": {"test_ok": 1, "pytest-reportlog": 1, ".tmp/test_report_example.py": 1}, "outcome": "passed", "longrepr": null, "when": "setup", "user_properties": [], "sections": [], "duration": 0.0, "_report_type": "TestReport"}
{"nodeid": ".tmp/test_report_example.py::test_ok", "location": [".tmp\\test_report_example.py", 0, "test_ok"], "keywords": {"test_ok": 1, "pytest-reportlog": 1, ".tmp/test_report_example.py": 1}, "outcome": "passed", "longrepr": null, "when": "call", "user_properties": [], "sections": [], "duration": 0.0, "_report_type": "TestReport"}
{"nodeid": ".tmp/test_report_example.py::test_ok", "location": [".tmp\\test_report_example.py", 0, "test_ok"], "keywords": {"test_ok": 1, "pytest-reportlog": 1, ".tmp/test_report_example.py": 1}, "outcome": "passed", "longrepr": null, "when": "teardown", "user_properties": [], "sections": [], "duration": 0.00099945068359375, "_report_type": "TestReport"}
{"nodeid": ".tmp/test_report_example.py::test_fail", "location": [".tmp\\test_report_example.py", 4, "test_fail"], "keywords": {"test_fail": 1, "pytest-reportlog": 1, ".tmp/test_report_example.py": 1}, "outcome": "passed", "longrepr": null, "when": "setup", "user_properties": [], "sections": [], "duration": 0.0, "_report_type": "TestReport"}
{"nodeid": ".tmp/test_report_example.py::test_fail", "location": [".tmp\\test_report_example.py", 4, "test_fail"], "keywords": {"test_fail": 1, "pytest-reportlog": 1, ".tmp/test_report_example.py": 1}, "outcome": "failed", "longrepr": {"reprcrash": {"path": "D:\\projects\\pytest-reportlog\\.tmp\\test_report_example.py", "lineno": 6, "message": "assert (4 + 4) == 1"}, "reprtraceback": {"reprentries": [{"type": "ReprEntry", "data": {"lines": ["    def test_fail():", ">       assert 4 + 4 == 1", "E       assert (4 + 4) == 1"], "reprfuncargs": {"args": []}, "reprlocals": null, "reprfileloc": {"path": ".tmp\\test_report_example.py", "lineno": 6, "message": "AssertionError"}, "style": "long"}}], "extraline": null, "style": "long"}, "sections": [], "chain": [[{"reprentries": [{"type": "ReprEntry", "data": {"lines": ["    def test_fail():", ">       assert 4 + 4 == 1", "E       assert (4 + 4) == 1"], "reprfuncargs": {"args": []}, "reprlocals": null, "reprfileloc": {"path": ".tmp\\test_report_example.py", "lineno": 6, "message": "AssertionError"}, "style": "long"}}], "extraline": null, "style": "long"}, {"path": "D:\\projects\\pytest-reportlog\\.tmp\\test_report_example.py", "lineno": 6, "message": "assert (4 + 4) == 1"}, null]]}, "when": "call", "user_properties": [], "sections": [], "duration": 0.0009992122650146484, "_report_type": "TestReport"}
{"nodeid": ".tmp/test_report_example.py::test_fail", "location": [".tmp\\test_report_example.py", 4, "test_fail"], "keywords": {"test_fail": 1, "pytest-reportlog": 1, ".tmp/test_report_example.py": 1}, "outcome": "passed", "longrepr": null, "when": "teardown", "user_properties": [], "sections": [], "duration": 0.0, "_report_type": "TestReport"}
{"exitstatus": 1, "$report_type": "SessionFinish"}

License

Distributed under the terms of the MIT license.

Project details


Release history Release notifications

Download files

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

Files for pytest-reportlog, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size pytest_reportlog-0.1.0-py3-none-any.whl (5.4 kB) File type Wheel Python version py3 Upload date Hashes View hashes
Filename, size pytest-reportlog-0.1.0.tar.gz (7.3 kB) File type Source Python version None Upload date Hashes View hashes

Supported by

Elastic Elastic Search Pingdom Pingdom Monitoring Google Google BigQuery Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN SignalFx SignalFx Supporter DigiCert DigiCert EV certificate StatusPage StatusPage Status page