pytest扫盲10--parametrize之indirect参数

本篇博客比较下 parametrize 中 参数分别为 True 和 False 时的两种情况:

1) 当 indirect=False 时,argnames 参数被当成普通变量

import pytest

@pytest.fixture(params=['a', 'b', 'c'])
def fixture_and_parametrize(request):
print(' 执行参数{}'.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(' 执行参数{}'.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
喜时之言,多失信;怒时之言,多失体
原文地址:https://www.cnblogs.com/xiaohuboke/p/13533083.html