pytest之fixture传参request的理解
测试用例参数化传入的参数被fixture调用,需要使用到request.param
@pytest.fixture(scope='function') def mydivision01(request): #通过request.param拿到参数赋值给myparam mylist = [] myparam = request.param print(f'当前参数是{myparam}') mylist.append(myparam) return mylist
@pytest.fixture(scope='function') def mydivision01(request): #通过request.param拿到参数赋值给myparam mylist = [] myparam = request.param print(f'当前参数是{myparam}') mylist.append(myparam) return mylist
定义一个fixture,使用request.param接受用例参数化的数据。重点放在测试用例的parametrize装饰器上,第一个参数是参数化数据的名字,这个名字一定要与request.parma所在的fixture名字一样。第二个参数是测试数据,没啥好说的。第三个参数indirect=True是让mydivision01以函数的方式去执行,此时测试用例中的mydivision01相当于mydivision01(mydivision01),其中mydivision01()就是上面自定义的fixture,参数division01是从数据data1中取得(1,1)、(2,2)、(3,3),一共三条测试用例。若为False,则mydivision01是一个参数,相当于fixture的返回值。
如下是运行结果:
..\mytestcase\test_division\test_division01.py::test_division_04[mydivision010] 当前参数是(1, 1) setup每个用例执行:开始执行 PASSEDteardown每个用例执行:结束执行 ..\mytestcase\test_division\test_division01.py::test_division_04[mydivision011] 当前参数是(2, 2) setup每个用例执行:开始执行 PASSEDteardown每个用例执行:结束执行 ..\mytestcase\test_division\test_division01.py::test_division_04[mydivision012] 当前参数是(3, 3) setup每个用例执行:开始执行 PASSEDteardown每个用例执行:结束执行
浙公网安备 33010602011771号