# 1) 当 indirect=False 时,argnames 参数被当成普通变量;
# 2) 当 indirect=True 时,parametrize 中的 argnames 参数被当成函数执行,且 argvalues 值作为 argnames函数中的参数传参
一、具体实例:当indirect=False 时:parametrize中的test_01 被当作一个普通的变量名看待,也就是test_01函数并未被调用执行
import pytest
import logging
class Test_mark():
@pytest.fixture()
def test_01(self,request):
data=request.param
self.a = data+1
logging.info(f"test_01本次输出结果是{self.a}")
return self.a
@pytest.mark.parametrize("test_01",[1,2,3],indirect=False)
def test_03(self,test_01):
self.b=test_01+1
logging.info(f"test_03本次输出结果是{self.b}")
if __name__ == '__main__':
pytest.main(['-vs','test.py'])
test.py::Test_mark::test_03[1] PASSED
test.py::Test_mark::test_03[2] PASSED
test.py::Test_mark::test_03[3] PASSED
2024-03-01 12:26:31--[INFO]--test.py|test_03本次输出结果是2
2024-03-01 12:26:31--[INFO]--test.py|test_03本次输出结果是3
2024-03-01 12:26:31--[INFO]--test.py|test_03本次输出结果是4
二、具体实例:当indirect=True 时:parametrize中的test_01 被当作一个函数名看待,也就是test_01函数被调用执行
import pytest
import logging
class Test_mark():
@pytest.fixture()
def test_01(self,request):
data=request.param
self.a = data+1
return self.a
@pytest.mark.parametrize("test_01",[1,2,3],indirect=True)
def test_03(self,test_01):
self.b=test_01+1
logging.info(f"test_03本次输出结果是{self.b}")
if __name__ == '__main__':
pytest.main(['-vs','test.py'])
test.py::Test_mark::test_03[1] PASSED
test.py::Test_mark::test_03[2] PASSED
test.py::Test_mark::test_03[3] PASSED
2024-03-01 12:33:59--[INFO]--test.py|test_03本次输出结果是3
2024-03-01 12:33:59--[INFO]--test.py|test_03本次输出结果是4
2024-03-01 12:33:59--[INFO]--test.py|test_03本次输出结果是5