VOL 154

02

2020-09

今天距2021年120天

这是ITester软件测试小栈第154次推文

点击上方蓝字“ITester软件测试小栈“关注我,每周一、三、五早上 08:30准时推送,每月不定期赠送技术书籍

微信公众号后台回复“资源”、“测试工具包”领取测试资源,回复“微信群”一起进群打怪。

本文3090字,阅读约需8分钟

在上一篇Pytest系列文章:Pytest之自定义mark,主要介绍pytest自定义配置及用例运行实战。以下主要介绍pytest参数化讲解及实战。

熟悉unittest单元测试框架的小伙伴知道,使用ddt进行数据驱动测试,那么身为功能更加强大且更加灵活的Pytest框架怎么可能没有数据驱动的概念呢?Pytest使用@pytest.mark.parametrize装饰器来实现数据驱动测试的,也就是常说的参数化。

parametrize语法

parametrize(self,argnames, argvalues, indirect=False, ids=None, scope=None)

argnames:参数名。

argvalues:参数对应值,类型必须为list。如果只有一个参数,里面则是值的列表:

如:@pytest.mark.parametrize("username", ["yy", "yy2", "yy3"])。如果有多个参数,则需要用元组来存放值,一个元组对应一组参数的值,如:@pytest.mark.parametrize("name,pwd", [("yy1", "123"), ("yy2", "123"), ("yy3", "123")])。

indirect:如果设置成True,则把传进来的参数当函数执行,而不是一个参数。

ids:用例的ID,传一个字符串列表,用来标识每一个测试用例,自定义测试数据结果,增加可读性。

参数讲解

1

单个数据

import pytest
data = ["小红", "小明"]
@pytest.mark.parametrize("name",data)
def test_demo(name):print("测试数据为{}".format(name))

运行结果为:

2

一组数据

01 列表嵌套字典

import pytest
data_1 = [{"username": "admin1", "password": "123456"},{"username": "admin2", "password": "12345678"},
]
@pytest.mark.parametrize("data", data_1)
def test_login(data):print("账号:{},密码:{}".format(data["username"],data["password"]))

运行结果为:

02 列表嵌套列表

import pytest
data_1 = [["admin1", "123456"],["admin2", "12345678"],
]
@pytest.mark.parametrize("username,password", data_1)
def test_login(username,password):print("账号:{},密码:{}".format(username, password))

运行结果为:

03 列表嵌套元组

import pytest
data_1 = [("admin1", "123456"),("admin2", "12345678"),
]
@pytest.mark.parametrize("username,password", data_1)
def test_login(username,password):print("账号:{},密码:{}".format(username, password))

运行结果为:

场景运用

1

装饰函数

import pytest
@pytest.mark.parametrize("username,password",[("admin01","123456"),("admin02","12345678")])
def test_demo(username,password):print("用户名:{},密码:{}".format(username,password))

运行结果为:

2

装饰类

import pytest
@pytest.mark.parametrize("username,password",[("admin01","123456"),("admin02","12345678")])
class TestDemo:def test_demo(self,username,password):print("用户名:{},密码:{}".format(username,password))

运行结果为:

注意:装饰测试类时,类内所有的方法必须接收测试数据,否则会报错;装饰测试函数时比较灵活,如果函数不使用数据就可以不装饰。

3

多个参数化装饰器

使用多个参数化装饰器,数据会进行交叉组合的方式传递给测试函数,进而生成n*n个测试用例(笛卡尔积)。

test_demo.py

import pytest
username = ["admin1", "admin2", "admin3"]
password = ["123456", "1234567", "12345678"]
@pytest.mark.parametrize("uname",username)
@pytest.mark.parametrize("pwd",password)
def test_demo(uname,pwd):print("用户名:{},密码:{}".format(uname, pwd))

运行结果如下:

4

增加可读性

parametrize参数中的ids,可以标识每一个测试用例,自定义测试数据结果的显示,增加可读性。

test_demo.py

import pytest
data_1 = [(1, 2, 3),(4, 5, 9)
]
ids = ["a:{} + b:{} = expect:{}".format(a, b, expect) for a, b, expect in data_1]
def add(a, b):return a + b
@pytest.mark.parametrize('a, b, expect', data_1, ids=ids)
def test_parametrize_1(a, b, expect):print('\n测试函数1测试数据为\n{}-{}'.format(a, b))assert add(a, b) == expect

命令行输入:pytest -v

以上

That‘s all

更多系列文章

敬请期待

ITester软件测试小栈

往期内容宠幸

1.Pytest之基本介绍


2.Pytest之断言


3.Pytest之fixture


4.Pytest之自定义mark


5.Pytest之收集用例及命令行参数


6.Pytest之skip、skipif、xfail


7.Python接口自动化之requests请求封装


8.Python接口自动化之pymysql数据库操作


9.Python接口自动化之logging日志


10.Python接口自动化之logging封装及实战

想获取更多最新干货内容

快来星标 置顶 关注我

每周一、三、五 08:30见

<<  滑动查看下一张图片  >>

后台 回复"资源"取干货

回复"微信群"一起打怪升级

测试交流Q群:727998947

点亮一下在看,你更好看

Pytest之参数化相关推荐

  1. pytest实战--参数化parametrize+前置fixture

    文章目录 参数化 parametrize 适用场景 一个典型的例子 前置fixture+参数化 适用场景 一个典型的例子 示例2 个人疑问? pytest既可以用来做单元测试,也可以用来做自动化接口测 ...

  2. pytest中参数化方法,并且根据执行的命令进行动态参数化

    pytest中参数化的几种方法 @pytest.mark.parametrize 元组组成的列表进行参数化,每一组元素表示一组参数化值 每个参数单独赋值 添加用例id pytest.param, 针对 ...

  3. Pytest fixture参数化params

    unittest使用ddt来实现测试用例参数化.或parameterized实现测试用例参数化,pytest测试用例里面对应的参数可以用 parametrize 实现参数化,今天我们来了解下fixtu ...

  4. pytest.5.参数化的Fixture

    From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...

  5. 『德不孤』Pytest框架 — 14、Pytest参数化

    文章目录 1.Pytest参数化说明 2.Pytest参数化方式 3.parametrize装饰器参数说明 4.Pytest参数化(单个参数) 5.Pytest参数化(多个参数) 6.ids参数说明 ...

  6. pytest合集(8)— 测试用例和夹具的参数化

    一.测试用例参数化 pytest.mark.parametrize() 语法糖: parametrize(argnames, argvalues, indirect=False, ids=None,  ...

  7. 接口测试 Pytest参数化处理

    pytest的参数化方式 pytest.fixture()方式进行参数化,fixture装饰的函数可以作为参数传入其他函数 conftest.py 文件中存放参数化函数,可作用于模块内的所有测试用例 ...

  8. pytest单侧模块_入门汇总

    Pytest简单介绍 (pytest是python的一个测试框架,主要是用来进行一些小的测试) 安装:pip install -U pytest 查看是否安装成功:pytest --version 运 ...

  9. python制作考试系统_Python系统学习 - Pytest单元测试框架

    哈咯,大家,我们今天来学习pytest单元测试框架,这个框架要比unittest更加易于使用,结构性也更加好,希望大家能够从中学习到有用的东西,然后在下一章,我们来使用pytest单元测试框架来搭建一 ...

最新文章

  1. Objective-C 内存管理之ARC规则
  2. easyui 添加 自定义图标
  3. 【阿里云产品公测】大数据下精确快速搜索OpenSearch
  4. Resource interpreted as Script but transferred with MIME type text/plain:
  5. 作者:夏帆(1988-),男,华东师范大学计算机科学与软件工程学院博士后。...
  6. 北京焦灼?上海颓废?看大数据如何解读城市性格
  7. CHM无法打开解决办法
  8. 特斯拉车顶维权女车主称被恐吓 将公布特斯拉提供的不完整数据
  9. php7 测试数据库_达梦数据库PHP连接测试
  10. java方法的重载 编程题,java面试编程题:重载方法
  11. reactor线程模型_面试一文搞定JAVA的网络IO模型
  12. 浅谈我的UI设计之路
  13. 易班显示服务器错误,重新认识一下,这里是易班
  14. 通信专业实务(中级)
  15. 北理工计算机学院新闻,新闻睇睇睇 | 计算机学院举办第八届ACM/ICPC程序设计竞赛校内选拔赛暨北理工邀请赛...
  16. 高通MSM8953平台调整通话音量
  17. Python的IDLE无法打开
  18. 名词用作动词举例_名词作动词的句子
  19. 基准电压——Reference voltage
  20. 抖音直播伴侣和快手直播伴侣如何实现无人直播还能防封号

热门文章

  1. c++ assert() 使用方法
  2. C++面试宝典之STL向量容器
  3. netbeans打包java程序,并包含外部jar包
  4. 随想录(反调试技术)
  5. linux下的C语言开发(gdb调试)
  6. 让51单片机八段数码管亮起来(静态显示和动态显示、共阴极和共阳极、位码和段码)
  7. python3数字类型_python3笔记八:python数据类型-Number数字
  8. 装饰者模式 php,php装饰者模式简单应用案例分析
  9. 飞狐的日线 java_JAVA 版 ATX-Client
  10. pythonfor循环输入_python的for循环