Skip to main content

A Pytest plugin for automatically prioritizing/ranking tests to speed up failure detection

Project description

pytest-ranking

CI PyPI pre-commit.ci status

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 are faster, 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 (the default value is 50):

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytest-ranking-0.2.3.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

pytest_ranking-0.2.3-py3-none-any.whl (8.9 kB view details)

Uploaded Python 3

File details

Details for the file pytest-ranking-0.2.3.tar.gz.

File metadata

  • Download URL: pytest-ranking-0.2.3.tar.gz
  • Upload date:
  • Size: 10.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.8.9

File hashes

Hashes for pytest-ranking-0.2.3.tar.gz
Algorithm Hash digest
SHA256 6cd8ca385add3d0c934ccb04ec15d8dca4998e3a9217f13b5c7708977592f849
MD5 23685a408f3be36d877e98814ba03494
BLAKE2b-256 cb8413bd0f41c442933246515f0691bbd1601215da95a9a0610d14d260f71e70

See more details on using hashes here.

File details

Details for the file pytest_ranking-0.2.3-py3-none-any.whl.

File metadata

File hashes

Hashes for pytest_ranking-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 8fb1e972259e703ab9b3acf91e4a23d794d568b63419bd70636f3224d630be47
MD5 77ebdbaf5e7b2d03b8900ebe1c582153
BLAKE2b-256 22b3408f7ce7a96e3455d05ec2b3f98fb6cf04bc9fb774acbf56cab85f8e3690

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page