pytest学习笔记-参数化学习笔记(四)
一、测试用例的参数化:在自动化测试中,一个测试用例对应一个测试点,
通常一组数据没办法覆盖所有的测试场景,所以需要通过参数化 去传递多组测试数据。
二、熟悉unittest的人应该知道,unittest采用ddt数据驱动的方式实现参数化,
那么pytest呢,它本身是支持参数化的,不需要额外安装插件,而是通过@pytest.mark.parameterize 这样一个装饰器 来实现。
三、@pytest.mark.parameterize的语法
parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None)
# argnames:参数名
# argvalues:参数值列表,如果是一个参数,里面就是值的列表,比如:parameterize(“username”,["yy1","yy2","yy3"])
# 如果是多个参数,就需要用元组来存放值,每个元组对应一组参数的值,
# 比如:parameterize("username,pwd",[("yy1","pwd1"),("yy2","pwd2"),("yy3","pwd3")])
# ids:用例的ID,其实是一个字符串列表,比如:["case1","case2","case3"]用来标识每一个测试用例,可以自定义。
代码实战:
---------------------------------------一个参数-------------------------------------------------
data = ["小明","小红"]
@pytest.mark.parametrize("username",data)
def test_login(username):
print('测试数据为:{}'.format(username))
运行结果为:
-----------------------------------------多个参数----------------------------------------------
一、参数值列表嵌套字典
# 列表嵌套字典
data_1 = [
{"username":"lqw","pwd":"123456"},
{"username":"tzy","pwd":"777777"},
{"username":"yyy","pwd":"323232"}
]
@pytest.mark.parametrize("data",data_1)
def test_login(data):
print("用户名:{},密码:{}".format(data["username"],data["pwd"]))
if __name__ == "__main__":
pytest.main(['-s','-v','test_parameterize.py'])
运行结果:
二、参数值列表嵌套列表
# 列表嵌套列表
data_2 = [
["lqw","12324"],
["tzy","23232"],
["yyy","65656"]
]
@pytest.mark.parametrize("username,pwd",data_2)
def test_login2(username,pwd):
print("用户名为:{},密码为:{}".format(username,pwd))
if __name__ == "__main__":
pytest.main(['-s','test_parameterize.py'])
运行结果:
三、参数值列表嵌套元组
# 列表嵌套元组
data_3 = [
("lqw","12321"),
("tzy","34324"),
("yyy","67676")
]
@pytest.mark.parametrize("username,pwd",data_3)
def test_login3(username,pwd):
print("用户名为:{},密码为:{}".format(username,pwd))
运行结果为:
参数化的实际应用场景:
举个栗子:
不要当自己回首过去,除了蹉跎岁月,一无所有。