本篇博客比较下 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