本篇博客比較下 parametrize 中 參數分別為 True 和 False 時的兩種情況:
1) 當 indirect=False 時,argnames 參數被當成普通變量
import pytest
@pytest.fixture(params=['a', 'b', 'c'])
def fixture_and_parametrize(request):
print('\n執行參數{}'.format(request.param))
return request.param
# indirect=False
@pytest.mark.parametrize('fixture_and_paramterize', ['d', 'e', 'f'], indirect=False)
def test_fixture_and_parametrize(fixture_and_paramterize):
print('indirect=False,參數為{}'.format(fixture_and_paramterize))
if __name__ == '__main__':
pytest.main(['-s', '-q', 'run.py'])
執行代碼:
indirect=False,參數為d .indirect=False,參數為e .indirect=False,參數為f . 3 passed in 0.03s
2) 當 indirect=True 時,parametrize 中的 argnames 參數被當成函數執行,且 argvalues 值作為 argnames函數中的參數傳參。
import pytest
@pytest.fixture(params=['a', 'b', 'c'])
def fixture_and_parametrize(request):
print('\n執行參數{}'.format(request.param))
return request.param
# indirect=True
@pytest.mark.parametrize('fixture_and_parametrize', ['d', 'e', 'f'], indirect=True)
def test_fixture_and_parametrize_2(fixture_and_parametrize):
print('indirect=True,參數為{}'.format(fixture_and_parametrize))
if __name__ == '__main__':
pytest.main(['-s', '-q', 'run.py'])
執行代碼:
執行參數d indirect=True,參數為d . 執行參數e indirect=True,參數為e . 執行參數f indirect=True,參數為f . 3 passed in 0.03s
True