1
0
mirror of https://github.com/quay/quay.git synced 2026-01-26 06:21:37 +03:00
Files
quay/test/conftest.py
2020-02-05 19:55:07 -08:00

39 lines
1.2 KiB
Python

from __future__ import print_function
import pytest
def pytest_collection_modifyitems(config, items):
"""
This adds a pytest marker that consistently shards all collected tests.
Use it like the following:
$ py.test -m shard_1_of_3
$ py.test -m shard_2_of_3
$ py.test -m shard_3_of_3
This code was originally adopted from the MIT-licensed ansible/molecule@9e7b79b:
Copyright (c) 2015-2018 Cisco Systems, Inc.
Copyright (c) 2018 Red Hat, Inc.
"""
mark_opt = config.getoption("-m")
if not mark_opt.startswith("shard_"):
return
desired_shard, _, total_shards = mark_opt[len("shard_") :].partition("_of_")
if not total_shards or not desired_shard:
return
desired_shard = int(desired_shard)
total_shards = int(total_shards)
if not 0 < desired_shard <= total_shards:
raise ValueError("desired_shard must be greater than 0 and not bigger than total_shards")
for test_counter, item in enumerate(items):
shard = test_counter % total_shards + 1
marker = getattr(pytest.mark, "shard_{}_of_{}".format(shard, total_shards))
item.add_marker(marker)
print("Running sharded test group #{} out of {}".format(desired_shard, total_shards))