fixture作为前置方法时,接收参数
1. 参数数量为一个:
@pytest.fixture(scope="class")
def setup_func1(request):
print(request.param)
yield request.param
print("this is end")
@pytest.mark.parametrize("setup_func1", ["xiaoming"], indirect=True)
@pytest.mark.parametrize("course, score", [("math", 100), ("chinese", 89), ("english", 10)])
def test_setup1(setup_func1, course, score):
name = setup_func1
print(f"{name}'s {course} score is {score}")
运行结果:
============================= test session starts =============================
collecting ... collected 3 items
test_pytest_firest.py::test_setup[math-100-xiaoming] xiaoming
PASSED [ 33%]xiaoming's math score is 100
this is end
test_pytest_firest.py::test_setup[chinese-89-xiaoming] xiaoming
PASSED [ 66%]xiaoming's chinese score is 89
this is end
test_pytest_firest.py::test_setup[english-10-xiaoming] xiaoming
PASSED [100%]xiaoming's english score is 10
this is end
============================== 3 passed in 0.04s ==============================
Process finished with exit code 0
2. 多个参数时:
@pytest.fixture(scope="class")
def setup_func(request):
print(request.param[0])
print(request.param[1])
yield request.param[0], request.param[1]
print("this is end")
@pytest.mark.parametrize("setup_func", [("xiaoming", "20230412001"), ("xiaohong", "20230412002")], indirect=True)
@pytest.mark.parametrize("course, score", [("math", 50), ("chinese", 50), ("english", 100)])
def test_setup(setup_func, course, score):
name, student_id = setup_func
print(f"{name}'s {course} score is {score}, student_id is {student_id}")
运行结果:
============================= test session starts =============================
collecting ... collected 6 items
test_pytest_firest.py::test_setup[math-50-setup_func0]
test_pytest_firest.py::test_setup[chinese-50-setup_func0]
test_pytest_firest.py::test_setup[english-100-setup_func0]
test_pytest_firest.py::test_setup[math-50-setup_func1]
test_pytest_firest.py::test_setup[chinese-50-setup_func1]
test_pytest_firest.py::test_setup[english-100-setup_func1]
============================== 6 passed in 0.05s ==============================
Process finished with exit code 0
xiaoming
20230412001
PASSED [ 16%]xiaoming's math score is 50, student_id is 20230412001
this is end
xiaoming
20230412001
PASSED [ 33%]xiaoming's chinese score is 50, student_id is 20230412001
this is end
xiaoming
20230412001
PASSED [ 50%]xiaoming's english score is 100, student_id is 20230412001
this is end
xiaohong
20230412002
PASSED [ 66%]xiaohong's math score is 50, student_id is 20230412002
this is end
xiaohong
20230412002
PASSED [ 83%]xiaohong's chinese score is 50, student_id is 20230412002
this is end
xiaohong
20230412002
PASSED [100%]xiaohong's english score is 100, student_id is 20230412002
this is end