Pytest的参数化之fixture
使用fixture实现参数化
那么下面我们再看一下fixture是如何实现参数化的?它为什么能实现参数化?
- fixture提供了这么一个机制,fixture装饰的函数拥有一个内置的对象request,同时fixture中还有一个params参数是用来传递参数化数据的
- 还是用登录的案例进行验证:
import pytest username = [ { "case": "登录成功", "name": "zhangsan", "pwd": 123 }, { "case": "账号不存在", "name": "lisi", "pwd": 234 }, { "case": "账号或密码错误", "name": "wangwu", "pwd": 345 }, { "case": "账号或密码不能为空", "name": "", "pwd": "" }, ] @pytest.fixture(params=username) def parm_data(request): return request.param # 返回request的params数据,这里存放的就是参数化数据 def test_login(parm_data): name = parm_data.get("name") pwd = parm_data.get("pwd") print(f"user:{name},pwd:{pwd}") # 调用登录接口,传入name和pwd即可,代码省略
在上面的代码中,我们定义了一个fixture,把参数化的数据传入了params,同时给fixture设置了返回request.param。在测试函数中,我们把定义好的fixture传入即可。通过fixture我们就能拿到每次迭代的参数化数据了!执行结果:
在执行结果中用例名称没有显示出来,在fixture中也执行ids来进行传递参数,与parametrize一样
@pytest.fixture(params=username,ids=[data.get("case") for data in username])加上上面代码后的执行结果如下:
注:可以看到左侧的用例标题和右侧的输出都很完美,没有问题!不过要记得conftest.py中的Hook函数同样也是需要
在执行结果中用例名称没有显示出来,在fixture中也执行ids来进行传递参数,与parametrize一样
注:可以看到左侧的用例标题和右侧的输出都很完美,没有问题!不过要记得conftest.py中的Hook函数同样也是需要
浙公网安备 33010602011771号