A Pytest plugin for automatically prioritizing/ranking tests to speed up failure detection
Project description
pytest-ranking
A Pytest plugin for reducing failure detection time of your Python test suite with automated test prioritization/ranking.
This pytest plugin allows you to find failures faster and receive sooner debugging feedback from CI. It speed up test failure detection for your test suite by prioritizing the execution of tests that have shorter execution time and/or recently failed and/or more textually related to code change.
Installation
To install pytest-ranking
via pip from PyPI:
pip install pytest-ranking
Usage
Pytest will automatically find the plugin and use it when you run pytest
. You can use the default prioritization heuristic, which runs tests that have shorter execution time first by passing the --rank
option:
pytest --rank
The terminal output will tell you the current configurations and runtime overhead of this plugin:
[pytest-ranking] Weights: 1-1-0
[pytest-ranking] History length: 30
[pytest-ranking] Number of files with new hashes: 0
[pytest-ranking] Change relatedness computation time (s): 0.0007872581481933594
[pytest-ranking] Test order computation time(s): 0.00020933151245117188
You can configure the weights of different prioritization heuristics by additionally passing the optional --rank-weight
flag with formatted values:
pytest --rank --rank-weight=0-1-0
Weights are separated by hyphens -
. The 1st weight is for running faster tests, the 2nd weight is for running recently failed tests, and the 3rd weight is for running tests more textually similar to the changed *.py
files in the codebase since the last run.
All weights must be integers or floats, and the sum of their sum will be normalized to 1.
A higher weight means that a corresponding heuristic is favored. The default value is 1-0-0
, meaning it entirely favors running faster tests.
You can also configure the maximum window size of previous test runs to compute the number of runs since a test had failed by additionally passing the optional --rank-hist-len
flag as an integer input:
pytest --rank --rank-hist-len=30
You can make these options always apply by adding them to the addopts
setting in your pytest.ini.
For example, create pytest.ini
in the codebase root folder as such:
[pytest]
addopts = --rank --rank-weight=0-1-0 --rank-hist-len=30
Alternatively, you can create pytest.ini
in the codebase root folder as such:
[pytest]
rank-weight=0-1-0
rank-hist-len=30
and run pytest --rank
on command line.
Warning
Because pytest-ranking
re-orders tests to speed up failure detection time, please disable other pytest plugins that enforeces other test orders, e.g., pytest-randomly, pytest-random-order, pytest-reverse.
Contributing
Contributions are very welcome. Tests can be run with tox.
License
Distributed under the terms of the MIT license, pytest-ranking
is free and open source software.
Issues
If you encounter any problems, please file an issue or pull request along with a detailed description.
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
File details
Details for the file pytest-ranking-0.2.0.tar.gz
.
File metadata
- Download URL: pytest-ranking-0.2.0.tar.gz
- Upload date:
- Size: 10.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.8.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 95ba88c8a524d76b550b7c6132cde3a0eea38968437f830b0c3681d80f5680da |
|
MD5 | 2b48a715a312abf4c6899bdb508ef79a |
|
BLAKE2b-256 | 116b429572e79276fe1863543723da9f1db6664d897131c21377f11d431bce76 |
File details
Details for the file pytest_ranking-0.2.0-py3-none-any.whl
.
File metadata
- Download URL: pytest_ranking-0.2.0-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.0.0 CPython/3.8.9
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a3a71af497a07c7268b682ec6e797eb2282ef36b8cfe51a4e1bc7e50e151051f |
|
MD5 | b7fd7f355260a5777778abd04d3cf391 |
|
BLAKE2b-256 | 5da14952c6912b30d9e6e69c19532a1b138d1631a3207fab08aef66ebec5e198 |