我遇到了 pytest 参数化的问题 - 递归调用永远不会停止。
我们创建了一个自定义标记并将其多次分配给同一个测试。
在 pytest 生成器中,标记被参数化,以便每个标记运行一次测试。
当存在多个消息代理标记时,测试会失败,因为递归调用永远不会停止。
我想通过强制停止条件来解决这个问题,但我很乐意听到任何替代解决方案。
这是使用 2 个不同的消息代理标记的测试的错误:
tests/markers/test_message_broker_marker.py:3 (test_successful_with_parameterized_message_brokers[2])
{'passed': 1, 'skipped': 0, 'failed': 0, 'errors': 0, 'xpassed': 0, 'xfailed': 0} != {'passed': 2, 'skipped': 0, 'failed': 0, 'errors': 0, 'xpassed': 0, 'xfailed': 0}
Expected :{'passed': 2, 'skipped': 0, 'failed': 0, 'errors': 0, 'xpassed': 0, 'xfailed': 0}
Actual :{'passed': 1, 'skipped': 0, 'failed': 0, 'errors': 0, 'xpassed': 0, 'xfailed': 0}
<Click to see difference>
testdir = <Testdir local('/tmp/pytest-of-naomi/pytest-2/test_successful_with_parameterized_message_brokers1')>
number_of_brokers = 2
@pytest.mark.parametrize("number_of_brokers", range(1, 3))
def test_successful_with_parameterized_message_brokers(testdir, number_of_brokers):
testdir.copy_example("test_examples.py")
result = testdir.runpytest("-k", f"test_successful_when_message_broker_quantity_is_{number_of_brokers}")
> result.assert_outcomes(passed=number_of_brokers)
E AssertionError: assert {'errors': 0,\n 'failed': 0,\n 'passed': 1,\n 'skipped': 0,\n 'xfailed': 0,\n 'xpassed': 0} == {'errors': 0,\n 'failed': 0,\n 'passed': 2,\n 'skipped': 0,\n 'xfailed': 0,\n 'xpassed': 0}
E Common items:
E {'errors': 0, 'failed': 0, 'skipped': 0, 'xfailed': 0, 'xpassed': 0}
E Differing items:
E {'passed': 1} != {'passed': 2}
E Full diff:
E {
E 'errors': 0,
E 'failed': 0,
E - 'passed': 2,
E ? ^
E + 'passed': 1,
E ? ^
E 'skipped': 0,
E 'xfailed': 0,
E 'xpassed': 0,
E }
/home/naomi/Documents/projects/pytest-celery/tests/markers/test_message_broker_marker.py:8: AssertionError