pytest-metadata is a plugin for pytest that provides access to test session metadata.
You will need the following in order to use pytest-metadata:
- Python 3.8+ or PyPy3
To install pytest-metadata:
We welcome contributions.
To learn more, see Development
The following metadata is gathered by this plugin:
Key | Description | Example |
---|---|---|
Python | Python version | 3.6.4 |
Platform | Platform | Darwin-17.4.0-x86_64-i386-64bit |
Packages | pytest packages | {'py': '1.5.2', 'pytest': '3.4.1'} |
Plugins | pytest plugins | {'metadata': '1.6.0'} |
You can provide your own metadata (key, value pair) by specifying --metadata
on the commandline:
pytest --metadata foo bar
Note: You can provide multiple sets of --metadata
:
pytest --metadata foo bar --metadata baz zoo
There's also the possibility of passing in metadata as a JSON string:
pytest --metadata-from-json '{"cat_says": "bring the cat nip", "human_says": "yes kitty"}'
Alternatively a JSON can be read from a given file:
pytest --metadata-from-json-file path/to/valid/file.json
When run in a continuous integration environment, additional metadata is added from environment variables. Below is a list of the supported continuous integration providers, along with links to the environment variables that are added to metadata if they're present.
Note that if you're using Tox to run your tests then you will need to pass down any additional environment variables for these to be picked up.
If you pass --verbose
on the command line when running your tests, then the metadata will be displayed in the terminal report header:
pytest --verbose
============================ test session starts ============================
platform darwin -- Python 3.6.4, pytest-3.4.1, py-1.5.2, pluggy-0.6.0 -- /usr/bin/python
cachedir: .pytest_cache
metadata: {'Python': '3.6.4', 'Platform': 'Darwin-17.4.0-x86_64-i386-64bit', 'Packages': {'pytest': '3.4.1', 'py': '1.5.2', 'pluggy': '0.6.0'}, 'Plugins': {'metadata': '1.6.0'}}
plugins: metadata-1.6.0
Pytest-metadata provides the session scoped fixture include_metadata_in_junit_xml
that you may use to include any metadata in Junit XML as property
tags. For example the following test module
when called with
would produce the following XML
To add/modify/delete metadata at the end of metadata collection, you can use the pytest_metadata
hook:
To access the metadata from a test or fixture, you can use the metadata
fixture:
To access the metadata from a plugin, you can use the stash
attribute of the config
object. This can be used to read/add/modify the metadata:
Here's a handy list of plugins that either read or contribute to the metadata:
- pytest-base-url - Adds the base URL to the metadata.
- pytest-html - Displays the metadata at the start of each report.
- pytest-reporter-html1 -Presents metadata as part of the report.
- pytest-selenium - Adds the driver, capabilities, and remote server to the metadata.