Pytest的参数化之parametrize
在Pytest中,提供了两种参数化方式
-
使用@pytest.mark.parametrize装饰器
-
使用fixture,对没错,又是fixture
使用parametrize实现参数化
- @pytest.mark.parametrize是pytest自带的装饰器之一,我们可以直接使用
- @pytest.mark.parametrize可以直接装饰在任何的测试函数上面
- 案例1:用户名做参数化
import pytest name = ["张三", "李四", "王五"] @pytest.mark.parametrize("item", name) def test_login(item): print(item) - 案例2:如果存在用户名和密码做参数化
- 如果按照案例1中的写法,如下:
import pytest name = ["zhangsan", "lisi", "wangwu"] pwd = ["123", "234", "345"] @pytest.mark.parametrize("item", name) @pytest.mark.parametrize("pwd", pwd) def test_login(item, pwd): print(item, pwd)执行结果:"zhangsan 123","lisi 123","wangwu 123","zhangsan 234","lisi 234","wangwu 234","zhangsan 345","lisi 345","wangwu 345"
注:按照这样写法,就会执行9条用例,每个用户名都会对密码执行一遍,这就不能做到一个账号对应一个密码了
- 如果按照案例1中的写法,如下:
- 案例3:参数化,解决一个账号对应一个密码问题
- 只需要在参数化中进行修改传入参数方式即可
import pytest name = ["zhangsan", "lisi", "wangwu"] pwd = ["123", "234", "345"] @pytest.mark.parametrize("item,pwd", zip(name,pwd)) def test_login(item, pwd): print(item, pwd)
执行结果:"zhangsan 123","lisi 234","wangwu 345"
- 只需要在参数化中进行修改传入参数方式即可
- 案例1:用户名做参数化
注:在parametrize中传入的两个参数加上zip,也要进行接收两个参数,表示为一一对应
-
- 案例4:升级案例,测试登录时需要有以下几种场景
- 场景1:正常登录(账号和密码正确)
- 场景2:异常登录(账号不存在)
- 场景3:异常登录(账号正确,密码错误)
- 场景5:异常登录(账号和密码为空)
import pytest username = [ { "case": "登录成功", "name": "zhangsan", "pwd": 123 }, { "case": "账号不存在", "name": "lisi", "pwd": 234 }, { "case": "账号或密码错误", "name": "wangwu", "pwd": 345 }, { "case": "账号或密码不能为空", "name": "", "pwd": "" }, ] @pytest.mark.parametrize("item", username,ids=[data.get("case") for data in username]) def test_login(item): name = item.get("name") pwd = item.get("pwd") print(f"user:{name},pwd:{pwd}") # 调用登录接口,传入name和pwd即可,代码省略执行结果:
执行结果中出现中文乱码的现象,需要对乱码进行处理,在conftest.py(该文件在测试固件中已写)文件找那个加入一下代码对乱码进行处理
处理后的执行结果def pytest_collection_modifyitems(items): ''' 处理用例名称中文乱码的问题 :param items: :return: ''' for item in items: item.name = item.name.encode("utf-8").decode("unicode_escape") item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")![]()
- 案例4:升级案例,测试登录时需要有以下几种场景
执行结果中出现中文乱码的现象,需要对乱码进行处理,在conftest.py(该文件在测试固件中已写)文件找那个加入一下代码对乱码进行处理

浙公网安备 33010602011771号