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))

运行结果为:

参数化的实际应用场景:
举个栗子:

posted @ 2020-12-08 12:16  打不死的强强强强  阅读(185)  评论(0)    收藏  举报