第六章 应用pytest测试框架(6.4章节-参数化)

感谢大家关注,帮忙分享呦,你们的阅读就是我的动力!!!

公众号:小李测试随笔

第六章 应用pytest测试框架(6.4章节-参数化)

6.4 参数化的应用

参数化是接口测试人员必须掌握的技能。在执行接口测试用例时,需要从数据库中读取所有的测试用例,但是接口测试用例需要一条条执行,这个操作就可以用参数化技术来实现

6.4.1 单个参数的参数化应用

在接口自动化测试当中,单个参数的参数化主要是将要读出的所有测试用例放在列表中,然后依次读取到每一个用例,并供函数使用,从而完成每一个用例的执行。在pytest测试框架中,单个参数的参数化语法如下:

@pytest.mark.parametrize(argnames,argvalues)

语法说明:

@pytest.mark.parametrize:pytest中的装饰器,可以实现测试用例的参数化

argnames:单个参数名

argvalues:参数值,类型为列表。列表当中可以包含字符串、元组及字典对象

1)被参数化的内容是字符串

单个参数被参数化时,如果列表中包含多个字符串对象,其参数化的过程如下

import pytest
'''一个参数的参数化,username依次取列表中的字符串对象
通过test_login()函数依次打印出来'''
@pytest.mark.parametrize("username",["xiaoli","xiaowang","xiaohong"])
def test_login(username):
    #print()函数中的f表示格式化字符串
    print(f"登录成功:登录用户为{username}")
if __name__ == '__main__':
    '''运行方式,直接在文件内执行以下命令
           其中,-v参数显示命令执行过程,-s参数显示打印的信息
           如不加-s参数,则print()函数打印的信息不会显示'''
    pytest.main(['-s','-v','【例 6-3】 列表中的对象为字符串时的参数化.py'])

运行结果

2)被参数化的内容是元组

单个参数被参数化时,如果列表当中包含多个元组对象,其参数化过程如下

import pytest
'''一个参数的参数化,userid依次取出列表中的两个元组对象
通过test_login()函数依次打印出来'''
@pytest.mark.parametrize("userid",[(1,2),(3,4)])
def test_login(userid):
    #print()函数中的f表示格式化字符串
    print(f"登录成功过:登录id为{userid}")
if __name__ == '__main__':
    '''运行方式,直接在文件内执行以下命令
           其中,-v参数显示命令执行过程,-s参数显示打印的信息
           如不加-s参数,则print()函数打印的信息不会显示'''
pytest.main(['-s','-v','【例 6-4】 列表中的对象为元组时的参数化.py'])

结果如下

3)被参数化的内容是字典

单个参数被参数化时,如果列表当中包含多个字典对象,器参数化过程如下

import pytest
'''一个参数的参数化,register依次会取列表中的两个字典对象
通过test_register()函数依次打印出来'''
@pytest.mark.parametrize("register",[{'name':'zhangsan'},{'password':123456}])
def test_register(register):
    # print()函数中的f表示格式化字符串
    print(f":注册成功:注册信息为{register}")


if __name__ == '__main__':
    '''运行方式,直接在文件内执行以下命令
           其中,-v参数显示命令执行过程,-s参数显示打印的信息
           如不加-s参数,则print()函数打印的信息不会显示'''
pytest.main(['-s', '-v', '【例 6-5】 列表中的对象为字典时的参数化.py'])

运行结果

6.4.2 多个参数的参数化应用

在接口自动化测试中,随着测试的不断深入,接口测试用例中所包含的请求地址、请求头、请求的数据类型、请求的主体内容等均可以使用参数化,同时测试环境及相关配置也可以使用参数化。当测试用例及其他测试环境使用多个参数的参数化时,可以让程序的运行、维护变得更加高效和灵活。在语法使用方面,多个参数的参数化与单个参数的参数化并无太多区别,只是参数个数多了一些而已。

在pytest测试框架中,多个参数的参数化语法如下

@pytest.mark.parametrize(argnames001,argvalues)

@pytest.mark.parametrize(argnames002,argvalues)

或者

@pytest.mark.parametrize(argnames001,argnames002,argnames)

说明:

@pytest.mark.parametrize:pytest中的装饰器,可以实现测试用例的参数化

argnames001:第一个参数名

argnames002:第二个参数名

argvalues:参数值,类型为列表。列表当中可以包含字符串、元组及字典对象

1)被参数化的内容是字符串

import pytest
'''多个参数的参数化,且列表中的对象为字符串类型
参数化顺序,username取"xiaoli"时,password取"test1234"
username取"xiaowang"时,password取"test1234"
username取"xiaohong"时,password取"test1234"
username再一次取"xiaoli"时,password取"test5678"
依次类推'''
@pytest.mark.parametrize("username",["xiaoli","xiaowang","xiaohong"])
@pytest.mark.parametrize("password",["test1234","test5678","test9876"])
def test_register(username,password):
    #将会打印出9组数据
    print(f"登录成功:用户名为{username},密码为{password}")
if __name__ == '__main__':
    '''运行方式,直接在文件内执行以下命令
       其中,-v参数显示命令执行过程,-s参数显示打印的信息
       如不加-s参数,则print()函数打印的信息不会显示'''
    pytest.main(['-s','-v','【例 6-6】 列表中的对象为字符串时的参数化.py'])

结果

说明:通过结果可以看到,参数username、password不是同步取值,而是交替取值!!!

2)被参数的内容是元组

import pytest
'''多个参数的参数化,列表的对象为元组
参数化顺序为usernam和password同步取值

'''
@pytest.mark.parametrize("username,password",[("hua","test1"),("liu","test2")])
def test_register(username,password):
#将会打印出2组数据
   print(f"登录成功:用户名为{username},密码为{password}")
if __name__ == '__main__':
'''运行方式,直接在文件内执行以下命令
      其中,-v参数显示命令执行过程,-s参数显示打印的信息
      如不加-s参数,则print()函数打印的信息不会显示'''
   pytest.main(['-s','-v','【例 6-7】 列表中的对象为元组时的参数化.py'])

运行结果

说明:可以看到是同步取值

END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值