A plugin to write pytest collect output to either a JSON file or a JSON lines file.
pip install pytest-discover
- Use the
--collect-report
together with--collect-only
option to collect tests and generate a JSON file:
pytest --collect-only --collect-report=collect.json
- Use the
--collect-log
together with--collect-only
option to collect tests and generate a JSON lines file:
pytest --collect-only --collect-log=collect.jsonl
The JSON file generated by --collect-report
option follows the DiscoveryResult JSON Schema.
Python tools can also use the DiscoveryResult
dataclass to parse the JSON file.
The JSON lines file generated by --collect-log
option contains one JSON object per line. Each line is a JSON object that follows the DiscoveryEvent JSON Schema.
This schema is the union of the different events that can be emitted by the discovery process:
SessionStart
JSON SchemaWarningMessage
JSON SchemaErrorMessage
JSON SchemaCollectReport
JSON SchemaSessionFinish
JSON Schema
Python tools can also use the DiscoveryEvent
dataclass to parse the JSON lines file, as well as the differnt event classes:
SessionStart
dataclassWarningMessage
dataclassErrorMessage
dataclassCollectReport
dataclassSessionFinish
dataclassTestItem
dataclass
Note: The code generation task is automated using
rye run generate-models
project script.
-
pytest-json-report: This plugin not only generates a JSON report with collected nodes, but also with test results. It is a more complete solution than
pytest-discover
. However, there is no JSON schema to validate the output, nor JSON lines output.
-
pytest-report-log: This package was heavily inspired by the
report-log
plugin. -
pytest-csv: The
pytest-csv
plugin was also a source of inspiration. -
datamodel-code-generator
: The dataclasses generation from JSON schemas is performed usingdatamodel-code-generator
. -
rye: Project management is easy thanks to
rye
.