A utility to report pytest results to Jira and Slack
Project description
Description
This repository contains utility scripts for
- reporting automated test results Jira
- sending a slack notification with proper stats and jira url that shows failed tests in the current test run id (trid) specifically designed for use in CI/CD pipelines such as Bitbucket Pipelines.
Prerequisites
- Python: Version 3.12 or higher.
- Json Report: Calling project should generate json report. How to create pytest json report
- Jira Access: A Jira instance with API token authentication. How to create jira api token
- Slack Webhook: A Slack webhook URL for sending notifications. How to create slack incoming webhook
- Configuration File: A
_env_configs/third_party.conffile with Jira and Slack settings.
Installation
pip install jira-test-reporting
Jira project preperation
Create new Jira project and configure issue type "Task" with following fields
The script uses the following custom fields in Jira tasks:
- Test Environment : Field Type - Dropdown.
Important - Pre-populate the values - Test Area : Field Type - Dropdown -
Important - Pre-populate the values - Test Type : Field Type - Labels
- Test Run : Field Type - Short Text
- Test Tags : Field Type - Labels
- Test Status : Field Type - Dropdown
Important - Pre-populate the values - TRID : Field Type - Short Text
Important Instructions
- In the pytest json report check block
"nodeid": "api_tests/Test_Pilot/test_jira_reporting_scenarios.py::Test_JIRA_Reporting_Scenarios::test_jira_reporting_test_passed",--api_testsshould be pre-populated under the Test Type field options --Test_Pilotshould be pre-populated under the Test Area field options - Similarly, in the pytest json report check block
"outcome": "passed"--Passedshould be pre-populated under the Test Status field options. For this field, the values should be pre-populate in the title case. - Also, make sure that in your jira project, the issue type "Task" has default fields Description and Status
- In the caller projetct, create
_env_configs/third_party.conffile with the following structure:[DEFAULT] jira_field_id_test_env = customfield_10208 jira_field_id_test_area = customfield_10236 jira_field_id_test_type = customfield_10301 jira_field_id_test_run_name = customfield_10205 jira_field_id_test_tags = customfield_10202 jira_field_id_test_status = customfield_10235 jira_field_id_test_run_id = customfield_10269 scm_url_variable = BITBUCKET_GIT_HTTP_ORIGIN scm_build_number_variable = BITBUCKET_BUILD_NUMBER
The script also uses the following default fields in Jira tasks:
project- reflectsjira_project_keysummary- test_namedescription- failure or passing descriptionstatus- reflects test_status as injira_field_id_test_status
The values for the fields above will be fetched directly from the json_report
New jira tasks will be created for non-existing tests
Existing tests will be updated
Examples
Jira Reported Tests Example
Slack Notification Example
API Test Results
──────────────
🚀 *Test Run:* Release-X
🌎 *Environment:* Staging
❌ *Failed:* 4
──────────────
🧪 *Total Tests:* 148
✅ *Passed:* 143
🔄 *Executed:* 147
⏸️ *Skipped:* 1
📈 Click to open Test Report in Jira
📡 FYA: @User1 @User2
Execution Date: May-23-2025
Usage
Standalone
- Ensure parameters in
_env_configs/third_party.confhas valid values - Export environment variables as follows
export jira_host_url=https://my-jira-team.atlassian.net
export jira_username=whoami@my-jira-team.com
export jira_password=XXXXXXXXXXXXXXXXXXXXX
export jira_project_key=TQER
export slack_dev_channel_webhook=https://hooks.slack.com/services/AAAAAA/BBBBBBB/CCCCCCCCC
export slack_prod_channel_webhook=https://hooks.slack.com/services/AAAAAA/BBBBBBB/CCCCCCCCC
export slack_test_webhook=https://hooks.slack.com/services/AAAAAA/BBBBBBB/CCCCCCCCC
- Run the script with command-line arguments to process a pytest report:
python -m jira_test_reporting.test_results_processor --test-env=Dev --test-run=Release-X --report=test-reports/pytest_report.json --notify-slack=yes
CI-CD hooked example (this copies required files into your test_automation directory)
Assuming you have
- set
Repository Variables(as in step #2 mentioned in the standalone setup above) in your scm tool. (How to: bitbcket, github) - configured pipeline in your SCM tool or a shell script in the caller project to execute the tests.
#!/bin/bash
# -----------------------------------------------------------------------------------------
# # Test Execution
# -----------------------------------------------------------------------------------------
.. pip install -r requirements.txt > /dev/null 2>&1
.. test execution code here
.. pytest -s --tb=no --no-header api_tests --testenv="$TEST_ENV" --json-report -v --json-report-indent=4 --json-report-omit collectors setup teardown --json-report-file=./test-reports/pytest_report.json
# JUST ADD FOLLOWING CODE BLOCK to report the issues
# -----------------------------------------------------------------------------------------
# Report test results to Jira
# -----------------------------------------------------------------------------------------
echo "Reporting test results into Jira and notifying slack"
if [ -n "$TEST_RUN_NAME" ]; then
python -m jira_test_reporting.test_results_processor --test-env="$TEST_ENV" --test-run="$TEST_RUN_NAME"
else
python -m jira_test_reporting.test_results_processor --test-env="$TEST_ENV"
fi
Arguments
--test-env: Test environment (default:Dev). Examples:--test-env=dev,--test-env=stage.--test-run: Test run identifier (default:Daily Run). Examples:--test-run=Release-X,--test-run="Regression Tests".--report: Test report file path (default:test-reports/pytest_report.json). Examples:--report=my-test-reports/my-pytest_report.json--notify-slack: Whether or not you want to send out a notification to slack (default:yes). Examples:--notify-slack=yes,--notify-slack=no--comments-cleanup: whether or not you want to clean up the comments on the tests if it has grown a big pile. Examples:--comments-cleanup=yes,--comments-cleanup=no
Troubleshooting
- Jira Connection Errors:
- Verify
jira_host_url,jira_username, andjira_passwordin_env_configs/third_party.conf. - Ensure the API token is valid and has “Create Issues” and “Edit Issues” permissions.
- Verify
- Slack Notification Failure:
- Check the webhook URL in the config file.
- Ensure the Slack app is configured to allow incoming webhooks.
- Pytest Report Issues:
- Confirm
test-reports/pytest_report.jsonexists and contains valid JSON.
- Confirm
- Custom Field Errors:
- Validate field IDs and allowed values in Jira Admin > Issues > Custom Fields.
Contributing
Please read CONTRIBUTE.md
License
This project is licensed under the MIT License. See LICENSE for details.
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 Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file jira_test_reporting-1.4.4.tar.gz.
File metadata
- Download URL: jira_test_reporting-1.4.4.tar.gz
- Upload date:
- Size: 14.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7e68a47478a6352e0b979ba9deb68bc54678b5ac8118c4d5d4bca9d01239402
|
|
| MD5 |
3f68846fcc63e3053dd9f96cf65053e4
|
|
| BLAKE2b-256 |
43e2aa519d776f8c6e3bf54679d036f029ef5c4c88cbfb166f3266cfb552004d
|
File details
Details for the file jira_test_reporting-1.4.4-py3-none-any.whl.
File metadata
- Download URL: jira_test_reporting-1.4.4-py3-none-any.whl
- Upload date:
- Size: 13.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c5d397f01c0bdd09837e17b9b13288a25641e002474358871ee37ca52cc1027d
|
|
| MD5 |
382f4ed51cb81ed5db2bd06c2d32cb5b
|
|
| BLAKE2b-256 |
e1e7c93150bc94e5c0a4d3d41891ce581e95ef4de7b2955184aff36bec653b12
|