爲了運行每個測試的次數,因爲正在生成的測試中,我們將通過編程參數每個測試。
首先,讓我們添加解析器選項(包括下列之一的conftest.py的):
def pytest_addoption(parser):
parser.addoption('--repeat', action='store',
help='Number of times to repeat each test')
現在我們添加一個「pytest_generate_tests」掛鉤。這是魔術發生的地方。
def pytest_generate_tests(metafunc):
if metafunc.config.option.repeat is not None:
count = int(metafunc.config.option.repeat)
# We're going to duplicate these tests by parametrizing them,
# which requires that each test has a fixture to accept the parameter.
# We can add a new fixture like so:
metafunc.fixturenames.append('tmp_ct')
# Now we parametrize. This is what happens when we do e.g.,
# @pytest.mark.parametrize('tmp_ct', range(count))
# def test_foo(): pass
metafunc.parametrize('tmp_ct', range(count))
運行而不重複標誌:
(env) $ py.test test.py -vv
============================= test session starts ==============================
platform darwin -- Python 2.7.5 -- py-1.4.20 -- pytest-2.5.2 -- env/bin/python
collected 2 items
test.py:4: test_1 PASSED
test.py:8: test_2 PASSED
=========================== 2 passed in 0.01 seconds ===========================
與重複標誌運行:
(env) $ py.test test.py -vv --repeat 3
============================= test session starts ==============================
platform darwin -- Python 2.7.5 -- py-1.4.20 -- pytest-2.5.2 -- env/bin/python
collected 6 items
test.py:4: test_1[0] PASSED
test.py:4: test_1[1] PASSED
test.py:4: test_1[2] PASSED
test.py:8: test_2[0] PASSED
test.py:8: test_2[1] PASSED
test.py:8: test_2[2] PASSED
=========================== 6 passed in 0.01 seconds ===========================
延伸閱讀:
儘管這種方法可能工作,我用你的建議找到一個更簡單的方法,它不需要任何參數化的參數等我將它發佈和接受它作爲答案。感謝您的建議;它直接導致我的解決方案。 –
工作在一個新項目上,所以我來這裏弄清楚我以前是如何做到這一點的。我現在明白,這個解決方案不需要我爲每個測試聲明一個夾具參數。所以我選擇這個答案是正確的,我在我的新項目中使用你的策略。謝謝! –