写点什么

Python 自动化测试 (三): pytest 参数化测试用例构建

  • 2022 年 9 月 30 日
    北京
  • 本文字数:1227 字

    阅读完需:约 4 分钟

在之前的文章中主要分享了 pytest 的实用特性,接下来讲 Pytest 参数化用例的构建。

如果待测试的输入与输出是一组数据,可以把测试数据组织起来用不同的测试数据调用相同的测试方法。参数化顾名思义就是把不同的参数,写到一个集合里,然后程序会自动取值运行用例,直到集合为空便结束。pytest 中可以使用 @pytest.mark.parametrize 来参数化。

parametrize( ) 方法源码:


  • 主要参数说明

  • argsnames :参数名,是个字符串,如中间用逗号分隔则表示为多个参数名

  • argsvalues :参数值,参数组成的列表,列表中有几个元素,就会生成几条用例

  • 使用方法

  • 使用 @pytest.mark.paramtrize() 装饰测试方法

  • parametrize(‘data’, param) 中的 “data” 是自定义的参数名,param 是引入的参数列表

  • 将自定义的参数名 data 作为参数传给测试用例 test_func

  • 然后就可以在测试用例内部使用 data 的参数了

  • 创建测试用例,传入三组参数,每组两个元素,判断每组参数里面表达式和值是否相等,代码如下:

  • 运行结果:

  • 整个执行过程中,pytest 将参数列表 [(“3+5”,8),(“2+5”,7),("75",30)] 中的三组数据取出来,每组数据生成一条测试用例,并且将每组数据中的两个元素分别赋值到方法中,作为测试方法的参数由测试用例使用。

  • 同一个测试用例还可以同时添加多个 @pytest.mark.parametrize 装饰器, 多个 parametrize 的所有元素互相组合(类似笛卡儿乘积),生成大量测试用例。

  • 场景:比如登录场景,用户名输入情况有 n 种,密码的输入情况有 m 种,希望验证用户名和密码,就会涉及到 nm 种组合的测试用例,如果把这些数据一一的列出来,工作量也是非常大的。pytest 提供了一种参数化的方式,将多组测试数据自动组合,生成大量的测试用例。示例代码如下:

  • 运行结果:

  • 分析如上运行结果,测试方法 test_foo( ) 添加了两个 @pytest.mark.parametrize() 装饰器,两个装饰器分别提供两个参数值的列表,2 * 3 = 6 种结合,pytest 便会生成 6 条测试用例。在测试中通常使用这种方法是所有变量、所有取值的完全组合,可以实现全面的测试。

  • 下面讲结合 @pytest.fixture 与 @pytest.mark.parametrize 实现参数化。

  • 如果测试数据需要在 fixture 方法中使用,同时也需要在测试用例中使用,可以在使用 parametrize 的时候添加一个参数 indirect=True,pytest 可以实现将参数传入到 fixture 方法中,也可以在当前的测试用例中使用。

  • parametrize 源码:

  • indirect 参数设置为 True,pytest 会把 argnames 当作函数去执行,将 argvalues 作为参数传入到 argnames 这个函数里。创建“test_param.py”文件,代码如下:

  • 运行结果:

  • 上面的结果可以看出,当 indirect=True 时,会将 login_r 作为参数,test_user_data 被当作参数传入到 login_r 方法中,生成多条测试用例。通过 return 将结果返回,当调用 login_r 可以获取到 login_r 这个方法的返回数据。

更多学习资料戳下方!!!

https://qrcode.ceba.ceshiren.com/link?name=article&project_id=qrcode&from=infoQ&timestamp=1662366626&author=xueqi

用户头像

社区:ceshiren.com 2022.08.29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
Python 自动化测试(三): pytest 参数化测试用例构建_测试_测吧(北京)科技有限公司_InfoQ写作社区