From e7bab37c09c7c07ff7b46e0079ce7c3f6cfcfe12 Mon Sep 17 00:00:00 2001 From: joejiang Date: Mon, 6 Jan 2025 16:21:51 +0800 Subject: [PATCH 1/2] repeat tests change to happen after -k --- pytest_repeat.py | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/pytest_repeat.py b/pytest_repeat.py index 008b692b..5801d594 100644 --- a/pytest_repeat.py +++ b/pytest_repeat.py @@ -53,21 +53,35 @@ def __pytest_repeat_step_number(request): @pytest.hookimpl(trylast=True) def pytest_generate_tests(metafunc): + # Retrieve the configured count for repetitions count = metafunc.config.option.count - m = metafunc.definition.get_closest_marker('repeat') - if m is not None: - count = int(m.args[0]) - if count > 1: - metafunc.fixturenames.append("__pytest_repeat_step_number") - - def make_progress_id(i, n=count): - return '{0}-{1}'.format(i + 1, n) - - scope = metafunc.config.option.repeat_scope - metafunc.parametrize( - '__pytest_repeat_step_number', - range(count), - indirect=True, - ids=make_progress_id, - scope=scope - ) + + k_option = metafunc.config.getoption('k', None) + + repeat_marker = metafunc.definition.get_closest_marker('repeat') + + if repeat_marker is not None: + count = int(repeat_marker.args[0]) + + # function to add parameterization for test repetition + def apply_repetition(): + if count > 1: + metafunc.fixturenames.append("__pytest_repeat_step_number") + + def make_progress_id(i, n=count): + return '{0}-{1}'.format(i + 1, n) + + scope = metafunc.config.option.repeat_scope + metafunc.parametrize( + '__pytest_repeat_step_number', + range(count), + indirect=True, + ids=make_progress_id, + scope=scope + ) + + if k_option: + if metafunc.definition.nodeid in metafunc.config._matchadd(k_option): + apply_repetition() + else: + apply_repetition() \ No newline at end of file From 9359523c230646d8ada00b653b715ec74b55dc95 Mon Sep 17 00:00:00 2001 From: joejiang Date: Mon, 6 Jan 2025 17:02:15 +0800 Subject: [PATCH 2/2] repeat tests change to happen after -k --- pytest_repeat.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pytest_repeat.py b/pytest_repeat.py index 5801d594..8af329b9 100644 --- a/pytest_repeat.py +++ b/pytest_repeat.py @@ -56,7 +56,7 @@ def pytest_generate_tests(metafunc): # Retrieve the configured count for repetitions count = metafunc.config.option.count - k_option = metafunc.config.getoption('k', None) + k_option = metafunc.config.option.keyword repeat_marker = metafunc.definition.get_closest_marker('repeat') @@ -81,7 +81,7 @@ def make_progress_id(i, n=count): ) if k_option: - if metafunc.definition.nodeid in metafunc.config._matchadd(k_option): + if k_option in metafunc.definition.nodeid: apply_repetition() else: apply_repetition() \ No newline at end of file