python数据驱动测试设计_Python+unittest+DDT实现的数据驱动测试

2023-11-18

前言

数据驱动测试:

避免编写重复代码

数据与测试脚本分离

通过使用数据驱动测试,来验证多组数据测试场景

通常来说,多用于单元测试和接口测试

ddt介绍

Data-Driven Tests(DDT)即数据驱动测试,可以实现不同数据运行同一个测试用例。ddt本质其实就是装饰器,一组数据一个场景。

ddt模块包含了一个类的装饰器ddt和三个个方法的装饰器:

data:包含多个你想要传给测试用例的参数,可以为列表、元组、字典等;

file_data:会从json或yaml中加载数据;

unpack:分割元素,如以下示例:

@data([a,d],[c,d])

如果没有@unpack,那么[a,b]当成一个参数传入用例运行

如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递

安装

pip install ddt

使用data装饰器

传递整体列表,字典、元组

importunittestfrom ddt importddt,data,unpackdefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):#@data([1,2,3,4,5,6,7])

@data({"a":"1","b":2})#@data((1,2,3))

deftest(self,data):print(data)if __name__ == '__main__':

unittest.main(verbosity=2)

嵌套列表、元组、字典的整体传递方式

importunittestfrom ddt importddt,data,unpackdefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):#@data(*[[1,2,3],[1,0,1],[0,0,0],[1,1,3]])

#@data(*[{"a":1}, {"a":2}, {"a":3}, {"a":4}])

@data(*[(1,5), (4,2), (6,7), (5,6)])deftest(self,data):print(data)if __name__ == '__main__':

unittest.main(verbosity=2)

使用unpack装饰器

unpack 依次传递元组

importunittestfrom ddt importddt,data,unpackdefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):

@data((1,2,3),(1,0,1),(0,0,0),(1,1,3))

@unpackdeftest(self,a,b,c):print(a,b,c)if a+b ==c:print(True)else:print(False)

if __name__ == '__main__':

unittest.main(verbosity=2)

输出结果:

1 2 3True1 0 1True

0 0 0

True1 1 3False

依次传递字典

importunittestfrom ddt importddt,data,unpackdefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):

@data({"a":1,"b":1,"c":2},

{"a":0,"b":0,"c":0},

{"a":-1,"b":1,"c":0})

@unpackdeftest(self,a,b,c):print(a,b,c)if a + b ==c:print(True)else:print(False)if __name__ == '__main__':

unittest.main(verbosity=2)

输出结果:

1 1 2True

0 0 0

True-1 10

True

依次传递列表

importunittestfrom ddt importddt,data,unpackdefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):

@data([1,2,3],[1,0,1],[0,0,0],[1,1,3])

@unpackdeftest(self,a,b,c):print(a,b,c)if a + b ==c:print(True)else:print(False)

if __name__ == '__main__':

unittest.main(verbosity=2)

输出结果:

1 2 3True1 0 1True

0 0 0

True1 1 3False

使用file_data装饰器

ddt支持从文件中加载数据,@file_data()装饰器会从json或yaml中加载数据。只有以“.yml” 和 “.yaml” 结尾的文件被加载为Yaml文件。所有其他格式文件都作为json文件加载,比如txt。

传递json数据

test.json文件

{"case1": {"a": 1,"b": 1,"c": 2},"case2": {"a": -1,"b": 1,"c": 0

},"case3": {"a": 0,"b": 0,"c": 0

}

}

View Code

importunittestfrom ddt importddt,file_datadefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):

@file_data("test.json")deftest(self, a, b, c):print(a,b,c)if __name__ == '__main__':

unittest.main(verbosity=2)

传递多层json文件

test.json文件

{"case1": {"data": {"a": 1,"b": 1},"result": 2},"case2": {"data": {"a": 0,"b": 1},"result": 1},"case3": {"data": {"a": 0,"b": 0

},"result": 0

}

}

View

importunittestfrom ddt importddt,file_datadefadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):

@file_data("test.json")deftest(self,data,result):print(data,result)if __name__ == '__main__':

unittest.main(verbosity=2)

传递yml数据

yml 需要安装yml(pip install PyYAML)

test.yml

defadd(a,b):return a+b

@ddtclassMyTest(unittest.TestCase):

@file_data("test.yml")deftest(self,a,b,c):

print(a,b,c)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python数据驱动测试设计_Python+unittest+DDT实现的数据驱动测试 的相关文章

  • 机器学习笔记GBDT(一):原理

    目录 文章目录 目录 前言 1 GBDT概述 2 GBDT的负梯度拟合 3 GBDT回归算法 1 初始化弱学习器 2 对于迭代轮数t 1 2 T有 3 得到强学习器f x 的表达式 4 GBDT分类算法 4 1 二元GBDT分类算法 4 2
  • Spring Boot自动扫描

    进行Spring Boot和Mybatis进行整合的时候 Spring Boot注解扫描的时候无法扫描到Application类的以外的包下面的注解 如下图 App就是Application类 下图是ProductMapper 类 Mapp
  • 函数的参数(形参与实参)的理解

    函数的参数 实际参数 实参 真实传给函数的参数 叫实参 实参可以是 常量 变量 表达式 函数等 无论实参是何种类型的量 在进行函数调用时 它们必须有确定的值 以便把这些值传送给形参 形式参数 形参 形式参数是指函数名后括号中的变量 因为形式
  • springboot项目响应信息Jackson解析映射,key为null时抛异常解决办法

    当使用 RestController注解时 会把响应信息自动解析成json格式 使用的是Jackson 但是Jackson默认不解析key为null的映射时会抛出异常 需要增加配置 解决 import com fasterxml jacks
  • 执行npm run dev 报【<--- Last few GCs --->内存溢出】

    setx NODE OPTIONS max old space size 10240 cmd 运行 set NODE OPTIONS max old space size 4096 这两个都试过都不行 欲哭无泪 后来听大佬说要下载 npm
  • yum与apt的区别

    一般来说著名的 Linux 系统基本上分两大类 RedHat 系列 Redhat Centos Fedora 等 Debian 系列 Debian Ubuntu 等 对比项 rpm yum dpkg apt 系列 RedHat系 RedHa
  • 什么是加密(Encrypt)?什么是哈希(Hash)?

    加密 Encrypt 加密的概念 假设有一个参数k和一种变换方式E 原始信息 m 通过变换 E 得到一个新的字符串c 公式为 c E m 那么我们就称原始信息 m 为明文 新字符串 c 为密文 将明文转化为密文的过程叫做加密 E 这种变换方
  • Your password has expired. To log in you must change it using a client that supports expired pa

    这个是初始密码问题 有两张方法 我这里用的是命令行的方法 即进入相应mysql目录 再修改密码的方法 首先输入mysqld defaults file F Program Files x86 MySQL my ini skip grant
  • std::bind

    std bind是函数模板 是一个函数 使用std bind可以将可调用对象和参数一起绑定 绑定后的结果使用std function进行保存 并延迟调用到任何我们需要的时候 std bind返回一个基于f的函数对象 其参数被绑定到args上
  • 一个老程序员告诉你:中国程序员为什么要跳槽

    http www jizhuomi com career 318 html
  • Rust学习笔记

    Rust学习笔记 文章目录 Rust学习笔记 1 0 Rust概述 Rust语言的特点 rust适合的领域 1 1 安装 配置开发环境 安装rust linux windows 配置开发环境 1 2 cargo Cargo 是什么 carg
  • 【满分】【华为OD机试真题2023 JAVA&JS】微服务的集成测试

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 微服务的集成测试 知识点深搜 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 现在有n个容器服务 服务的启动可能有一定的依赖性 有些服务启动没有依赖 其次服务自身
  • 程序人生:无他,唯心向尔

    无他 唯心向尔 哎 怎么说呢 太长时间没写日记了 手和脑袋都有些生疏 不知道如何下笔 如何结尾 那还是老规矩 随波逐流地跟着beyond的歌写吧 希望这碗 鸡汤 不会给你带来油腻的感觉 今天我 寒夜里看雪飘过 怀着冷却了的心窝飘远方 贵州那
  • 利用QT进行web与本地混合应用开发

    利用QT进行web与本地混合应用开发 T 利用QT进行web与本地混合应用开发 Qt Features for Hybrid Web Native Application Development 原文参见 http www qtsoftwa
  • YOLOv8目标检测PySide6 GUI可视化界面

    课程链接 https edu csdn net course detail 38552 YOLOv8目标检测PySide6 GUI可视化界面效果图如下 YOLOv8目标检测PySide6 GUI可视化界面支持本地图片和视频推理 摄像头实时视
  • PyTorch深度学习实践笔记#8

    嗨 我是error 我来记录PyTorch深度学习实践的笔记了 这会是这个系列的最后一篇文章 个人之前都是使用tensorflow进行深度学习实践 这是第一次学习Pytorch 若笔记有误欢迎提出纠正 课件采用自B站 刘二大人 老师的视频
  • Latex常用数学公式整理——矩阵

    文章目录 1 简单矩阵 2 复杂矩阵 1 简单矩阵 带 的矩阵 begin pmatrix 0 0 0 0 1 0 0 0 0 end pmatrix 0

随机推荐

  • Jaspersoft 环境搭建和入门简单实例

    JasperReport简介 JasperReport是一个强大 灵活的报表生成工具 能够展示丰富的页面内容 并将之转换成PDF HTML 或者XML格式 该库完全由Java写成 可以用于在各种Java应用程序 包括J2EE Web应用程序
  • BFS(广度优先算法)——判断无向简单图中任意两点是否连通

    include
  • dojo SplitContainer

    SplitContainer author amushen email amushen yahoo com cn qq 38371354 相关的文件 dojo widget LayoutContainer dojo widget HtmlW
  • Pytorch2.0中compiled_model=torch.compile(model) 的正确添加位置

    今天pytorch官网更新了pytorch2 0稳定版 迫不及待的我直接更新了 确实像官方所说 只需加入model torch compile model 一行代码即可加速 加入的位置如下 cpu训练 model UNet deep sup
  • 混杂设备与字符设备的区别----misc_register、 register_chrdev 的区别总结

    杂项设备 misc device 杂项设备也是在嵌入式系统中用得比较多的一种设备驱动 在 Linux 内核的include linux目录下有Miscdevice h文件 要把自己定义的misc device从设备定义在这里 其实是因为这些
  • openstack开发实践(一):devstack搭建all-in-one的openstack开发环境

    Devstack简介 devstack是面向开发者的一个openstack部署工具 用户可以指定不同的版本分支进行安装 devstack借助于Shell脚本实现openstack自动化部署 devstack源码中的stack sh即为安装脚
  • Python基于控制台的学生管理系统

    encoding utf 8 定义一个函数 显示可以使用的功能列表给用户 def showInfo print 30 print 学生管理系统 v1 0 print 1 添加学生的信息 print 2 删除学生的信息 print 3 修改学
  • MIPI信号的分析--结合示波器实际测试波形

    如果排查的思路对你有帮助 请记住 消雨匆匆 码字和排查很累 仅此而已 硬件不是抄电路 拿烙铁 懂点软件 细致分析 找问题和破案搜集线索是一样的 PS 硬件知识也可以性感 部分内容来自于此博客的大神总结 http www elecfans c
  • Java+GeoTools实现WKT数据根据EPSG编码进行坐标系转换

    场景 Java GeoTools 开源的Java GIS工具包 快速入门 实现读取shp文件并显示 Java GeoTools 开源的Java GIS工具包 快速入门 实现读取shp文件并显示 霸道流氓气质的博客 CSDN博客 在上面实现J
  • 数字人+ChatGPT强强联手能擦出什么火花?

    随着元宇宙概念的快速发展 以数字人 ChatGPT为形式的创作方式正在颠覆传统视频创作方式 并在市场上呈现快速增长的态势 根据新榜的报道 目前已经有多位大V使用虚拟数字人来协助完成短视频制作 并且值得一提的是 这些视频并没有因为采用数字人而
  • 定时器编码器AB相电机测速( 补充)

    TIM编码器AB相电机测速 定时器编码器AB相电机测速 1 四倍频 2 算法应用 3 stm32硬件连接 3 stm32环境配置端口配置 3 C语言实现编码器个数读取 3 C语言实现编码器个数转换为速度 定时器编码器AB相电机测速 1 四倍
  • vue3配置eslint 出现问题

    vue3配置eslint 出现问题 标题必须使用导入来加载 ES 模块 ESlint Error Must use import to load ES Module 加上这一行即可
  • Jmeter之ForEach控制器

    场景运用 ForEach控制器一般和用户自定义变量或者正则表达式提取器一起使用 其在用户自定义变量或者从正则表达式提取器的返回结果中读取一系列相关的变量 该控制器下的采样器或者控制器都会被执行一次或多次 每次读取不同的变量值 需求2 有一组
  • 学习java随堂练习-20220609

    学习Java的第八天 第1题 第2题 第3题 第4题 第5题 今天是学习Java的第八天 5道练习题 第1题 题目 1 循环输入近6年某高校的录取分数 求出平均分和最低分 运行结果 代码如下 循环输入近6年某高校的录取分数 求出平均分和最低
  • PHP操作Excel

    头 header Content Type application vnd ms excel header Content Disposition attachment filename sample xls header Pragma n
  • 时序预测

    时序预测 MATLAB实现DNN全连接神经网络时间序列预测 目录 时序预测 MATLAB实现DNN全连接神经网络时间序列预测 基本介绍 模型研究 程序设计 学习总结 参考资料 基本介绍 DNN的结构不固定 一般神经网络包括输入层 隐藏层和输
  • 传指针和传引用的区别以及指针和引用的区别

    一 引用 引用的定义 引用是给另外一个变量其别名 所以引用不会分配内存空间 引用是引入了对象的一个同义词 例如 Point pt1 10 10 Point pt2 pt1 上述的代码 定义了pt2为pt1的引用 通过这样的定义 pt2和pt
  • 让生产活动更高效,物料管理场景的RPA应用

    作为制造业 供应链领域常见环节 物料管理 Material Management 通常是对企业生产经营活动所需各种物料的采购 验收 供应 保管 发放 使用等一系列计划与控制活动的总称 物料管理科学与否 将会影响到组织各职能部门间的协调 生产
  • 文件的上传与下载

    一 文件上传 文件上传程序步骤 1 如何在web页面中添加上传输入项
  • python数据驱动测试设计_Python+unittest+DDT实现的数据驱动测试

    前言 数据驱动测试 避免编写重复代码 数据与测试脚本分离 通过使用数据驱动测试 来验证多组数据测试场景 通常来说 多用于单元测试和接口测试 ddt介绍 Data Driven Tests DDT 即数据驱动测试 可以实现不同数据运行同一个测