Skip to main content

Select a portion of the collected tests

Project description

PyPI version Python versions See Build Status on Travis CI

Select a portion of the collected tests, so you can run diferents parts of your test suite in differents instances to balance the number of test run on each one.

Use case

Suppose you have a big, slow test suite, but you can trigger several CI workers to run different portions of it, in a sake lazy/simple way to parallelize it.

A basic, obvious way to do that is to explictily collect from different directories/modules

  • worker1: pytest tests/a (100 tests, ~4 minutes to finish)

  • worker2: pytest tests/b (20 tests, ~1 minute to finish)

  • worker3: pytest tests/c tests/d (30 tests, ~1 minute to finish)

The problem is that directory tests/a may have a lot more tests that tests/c plus test/d, so worker1 takes a lot more to finish.

With pytest-portion you can still split the tests in different instances, but letting the extension makes the selection in a more balanced way.

  • worker1: pytest --portion 1/3 tests (first 50 tests, ~2 minutes)

  • worker2: pytest --portion 2/3 tests (next 50 tests, ~2 minutes)

  • worker3: pytest --portion 3/3 tests (last 50 tests, ~2 minutes)

In this case, the tests of all the directories are collected, but only a third (a different one!) of them will be actually executed on each worker.

Note this balance is by number of tests, so if there is very slow tests in a particular portion, the duration may not be expected.

For a fine tuning, you could pass the portion in a more explicit way:

  • worker1: pytest --portion 0:0.5 tests (first half, 1st to 75th test)

  • worker2: pytest --portion 0.5:0.8 tests (next 30%, from 76th to 125º)

  • worker3: pytest --portion 0.8:1 tests (last 20%)

Installation

You can install “pytest-portion” via pip from PyPI:

$ pip install pytest-portion

Usage

Pass --portion <i/n> where:

  • n is the number of portions

  • i is the i-th portion to select (1 <= i <= n)

Alternatively --portion start:end where:

  • start and end are the coefficient (between 0 and 1) that represent the segment of the collected tests to select.

Contributing

Contributions are very welcome. Please ensure the coverage at least stays the same before you submit a pull request.

License

Distributed under the terms of the BSD-3 license, “pytest-portion” is free and open source software

Issues

If you encounter any problems, please file an issue along with a detailed description.

Acknowledgements

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

pytest_portion-0.1.0-py3-none-any.whl (5.2 kB view details)

Uploaded Python 3

File details

Details for the file pytest_portion-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: pytest_portion-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 5.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.1.1 pkginfo/1.5.0.1 requests/2.25.1 setuptools/50.3.0 requests-toolbelt/0.9.1 tqdm/4.40.2 CPython/3.6.8

File hashes

Hashes for pytest_portion-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e3718edf597c1697114b55be809d5a96c1066b39c1a7d385ec828661a2f34994
MD5 6c799251226ac13b108d1e4a41277ed3
BLAKE2b-256 3fd2e084b1c42a9c985be01c30eaebd1ac23ad9b892f97dedc4777f7cef64cbc

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