Pytest 数据参数化
-
应用场景
登录功能都是输入用户名,输入密码,点击登录。但登录的用户名和密码如果想测试多个值是没有办法用普通的操作实现的。数据参数化可以帮我实现这样的效果。
-
方法名
-
pytest.mark.parametrize
# 数据参数化 # 参数: # argnames:参数名 # argvalues:参数对应值,类型必须为可迭代类型,一般使用list @pytest.mark.parametrize(argnames, argvalues, indirect=False, ids=None, scope=None)
-
1. 一个参数使用方式
- argnames 为字符串类型,根据需求决定何时的参数名
- argvalues 为列表类型,根据需求决定列表元素中的内容
- 在测试脚本中,参数,名字与 argnames 保持一致
- 在测试脚本中正常使用
-
示例
import pytest class TestLogin: @pytest.mark.parametrize("name", ["xiaoming", "xiaohong"]) def test_a(self, name): print(name) assert 1
-
结果
scripts/test_login.py xiaoming .xiaohong .
2. 多个参数使用方式
-
示例
import pytest class TestLogin: @pytest.mark.parametrize(("username", "password"), [("zhangsan", "zhangsan123"), ("xiaoming", "xiaoming123")]) def test_a(self, username, password): print(username) print(password) assert 1
-
结果
scripts/test_login.py zhangsan zhangsan123 .xiaoming xiaoming123 .
多个参数还可以将装饰器写成 @pytest.mark.parametrize(“username,password”, [(“zhangsan”,
“zhangsan123”), (“xiaoming”, “xiaoming123”)]) 效果是一样的。