A simple plugin to use with pytest
Project description
pytest-elk-reporter
A plugin to send pytest test results to ELK stack, with extra context data
Features
- Reporting into Elasticsearch each test result, as the test finish
- Automaticlly append context data to each test:
- git inforamtion such as
branch
orlast commit
and more - all of Jenkins env variables
- username if available
- git inforamtion such as
- Report a test summery to Elastic for each session with all the context data
- can append any user data into the context sent to elastic
Requirements
- having pytest tests written
Installation
You can install "pytest-elk-reporter" via pip from PyPI
pip install pytest-elk-reporter
ElasticSearch configureation
We need this auto_create_index enable for the indexes that are going to be used, since we don't have code to create the indexes, this is the default
curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
"persistent": {
"action.auto_create_index": "true"
}
}
'
For more info on this elasticsearch feature check thier index documention
Usage
Run and configure from command line
pytest --es-address 127.0.0.1:9200
# or if you need user/password to authenticate
pytest --es-address my-elk-server.io:9200 --es-username fruch --es-password 'passwordsarenicetohave'
Configure from code
import pytest
@pytest.fixture(scope='session', autouse=True)
def configure_es(elk_reporter):
# TODO: get cerdentials in more secure fashion programtically, maybe AWS secrects or the likes
# or put them in plain-text in the code... what can ever go wrong...
elk_reporter.es_address = "my-elk-server.io:9200"
elk_reporter.es_user = 'fruch'
elk_reporter.es_password = 'passwordsarenicetohave'
elk_reporter.es_index_name = 'test_data'
Configure from pytest ini file
# put this in pytest.ini / tox.ini / setup.cfg
[pytest]
es_address = my-elk-server.io:9200
es_user = fruch
es_password = passwordsarenicetohave
es_index_name = test_data
see pytest docs for more about how to configure using .ini files
Collect context data for the whole session
For example, with this I'll be able to build a dash board per version
@pytest.fixture(scope="session", autouse=True)
def report_formal_version_to_elk(request):
"""
Append my own data specific, for example which of the code uner test is used
"""
# TODO: take it programticly of of the code under test...
my_data = {"formal_version": "1.0.0-rc2" }
elk = request.config.pluginmanager.get_plugin("elk-reporter-runtime")
elk.session_data.update(**my_data)
Collect data for specific tests
def test_my_service_and_collect_timings(request, elk_reporter):
response = requests.get("http://my-server.io/api/do_something")
assert response.status_code == 200
elk_reporter.append_test_data(request, {"do_something_response_time": response.elapsed.total_seconds() })
# now doing response time per version dashboard quite easy
# and yeah, it's not exactly real usable metric, it's just an example...
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.
License
Distributed under the terms of the MIT license, "pytest-elk-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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for pytest-elk-reporter-0.1.6.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | dfa152fe35a2f641dfa9cba46ad77405dffd9d3d461599f441f13c93d544368b |
|
MD5 | a46dadece4cf0d5a2fc7eb2d1a2f4373 |
|
BLAKE2b-256 | 39d457193f8ece9daedcf91e3d522ef5e42ff92f391b45e92d8e0d874aec33a6 |
Hashes for pytest_elk_reporter-0.1.6-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3c34da9b287639d48164c7e3ec041bcaa602d13d686271fa79152263036f3240 |
|
MD5 | 8a43ab7766f6ede23b48bf86fc8419ad |
|
BLAKE2b-256 | fcc9ba7f0ae678924f973adb6b2134bc1ae5617bb8d2a652746c0033a9159af4 |
Hashes for pytest_elk_reporter-0.1.6-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8a39e5d0bebb643a63232b8e10e3e2d759a85c9e4d176870d7b61a575696200f |
|
MD5 | 95a5058d88b791acc7ea94036190a1ba |
|
BLAKE2b-256 | 6b20d663dd033696ef103d67b49d213955863dcef64ea501846ae7528e436787 |
Hashes for pytest_elk_reporter-0.1.6-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | e9ad56fa7a4650ab0a681b1594f345fb6b3446de4f9c6777930e822d2921e58e |
|
MD5 | 53b87069364adbae0ef034a8e22c48b9 |
|
BLAKE2b-256 | 289d9484f24feea08b2e59d6240837e0779c990a90a2845a8b855137e8ecfee7 |