unittest 数据驱动DDT应用

前言

一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条case,而这些case除了传参不同外,其实并没什么区别。
这个时候就可以利用ddt来管理测试数据,提高代码复用率。
※但要注意:正向和逆向的要分开写※

安装:pip install ddt
四种模式:第一步引入的装饰器@ddt;导入数据的@data;拆分数据的@unpack;导入外部数据的@file_data

1、读取元组数据

#一定要和单元测试框架一起用
import unittest,os
from ddt import ddt,data,unpack,file_data'''NO.1单组元素'''
@ddt
class Testwork(unittest.TestCase):@data(1,2,3)def test_01(self,value):      #value用来接收data的数据print(value)
if __name__ == '__main__':unittest.main()
结果:
=>123'''NO.2多组未分解元素'''
@ddt
class Testwork(unittest.TestCase):@data((1,2,3),(4,5,6))def test_01(self,value):       print(value)if __name__ == '__main__':unittest.main()
结果:
=>(1, 2, 3)(4, 5, 6)'''NO.3多组分解元素'''
@ddt
class Testwork(unittest.TestCase):@data((1,2,3),(4,5,6))@unpack          #拆分数据def test_01(self,value1,value2,value3):    #每组数据有3个值,所以设置3个形参print(value)if __name__ == '__main__':unittest.main()
结果:
=>1 2 34 5 6

2、读取列表数据

import unittest,os
from ddt import ddt,data,unpack,file_data'''NO.1单组元素和多组元素未分解都一样,下面看嵌套,考眼力了~'''
@ddt
class Testwork(unittest.TestCase):@data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}])# @unpackdef test_01(self,a):print(a)if __name__ == '__main__':unittest.main()
结果:
=>[{'name': 'lili', 'age': 12}, {'sex': 'male', 'job': 'teacher'}]
※上面结果可以看出:无法运用到requests数据请求中,所以不是很实用※'''NO.2多组元素分解'''
@ddt
class Testwork(unittest.TestCase):@data([{'name':'lili','age':12},{'sex':'male','job':'teacher'}])@unpackdef test_01(self,a,b):print(a,b)if __name__ == '__main__':unittest.main()
结果:
=>{'name': 'lili', 'age': 12} {'sex': 'male', 'job': 'teacher'}
※拆分后的运行结果,不带有[ ],拆分是将列表中的2个字典拆分,所以有2个数据※

            

3、读取字典数据

import unittest,os
from ddt import ddt,data,unpack,file_data'''※字典的读取比较特殊,因为在拆分的时候,形参和实参的key值要一致,否则就报错※''''''NO.1单组数据'''
@ddt
class Testwork(unittest.TestCase):@data({'name':'lili','age':'16'},{'sex':'female','job':'nurser'})# @unpackdef test_01(self,a):print(a)if __name__ == '__main__':unittest.main()
结果:
=>{'name': 'lili', 'age': '16'}{'sex': 'female', 'job': 'nurser'}
※以上运行的结果数据,就可以用来作为requests的请求参数~!※'''NO.2多数据拆分,重点来了'''
@ddt
class Testwork(unittest.TestCase):@data({'name':'lili','age':'16'},{'name':'female','age':'nurser'})@unpackdef test_01(self,name,age):print(name,age)if __name__ == '__main__':unittest.main()
结果:
=>lili 16female nurser
※重点来了:首先结果展示的数据是字典里的value,没有打印key的值;其次@data里的数据key值和def方法里的形参
名称一定要一致,否则,打印的时候,就会报莫名的参数错误,这里就不做展示,爱学习的同学可以尝试一下~!※

4、读取文件数据

import unittest,os
from ddt import ddt,data,unpack,file_data'''数据格式必须为json,且必须为双引号的键值对形式,如果不是json格式,有列表等其它格式嵌套的话,无论是
否有@unpack,形参和参数数量都要和key值相等'''
@ddt
class testwork(unittest.TestCase):testdata=[{'a':'lili','b':12},{'a':'sasa','b':66}]@data(*testdata)# @unpackdef test_01(self,value):print(value)@file_data(os.getcwd()+'/jsonll.txt')def test_02(self,value2):print(value2)if __name__ == '__main__':unittest.main()
结果:
=>{'a': 'lili', 'b': 12}{'a': 'sasa', 'b': 66}nickmale29

 总结:

感谢每一个认真阅读我文章的人!!!

我个人整理了我这几年软件测试生涯整理的一些技术资料,包含:电子书,简历模块,各种工作模板,面试宝典,自学项目等。欢迎大家点击下方名片免费领取,千万不要错过哦。

 Python自动化测试学习交流群:全套自动化测试面试简历学习资料获取点击链接加入群聊【python自动化测试交流】:http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DhOSZDNS-qzT5QKbFQMsfJ7DsrFfKpOF&authKey=eBt%2BF%2FBK81lVLcsLKaFqnvDAVA8IdNsGC7J0YV73w8V%2FJpdbby66r7vJ1rsPIifg&noverify=0&group_code=198408628

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/11768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WEB APIs day4 (2)

三、M端事件 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

6.修饰符

文章目录 6.1 在一个静态方法内调用一个非静态成员为什么是非法的?6.2 静态方法和实例方法有何不同 6.1 在一个静态方法内调用一个非静态成员为什么是非法的? 由于静态方法可以不通过对象进行调用&#xff0c;因此在静态方法里&#xff0c;不能调用其他非静态变量&#xff0…

下级平台级联安防视频汇聚融合EasyCVR平台,层级显示不正确是什么原因?

视频汇聚平台安防监控EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等&#xff0c;以及厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等&#xff0c;能对外分发RTSP、RTMP、FLV、HLS、WebRTC等…

算法练习-LeetCode1071. Greatest Common Divisor of Strings

题目地址&#xff1a;LeetCode - The Worlds Leading Online Programming Learning Platform Description: For two strings s and t, we say "t divides s" if and only if s t ... t (i.e., t is concatenated with itself one or more times). Given two strin…

Ubuntu 交叉编译openssl + pahomqtt

&#xff08;一&#xff09;交叉编译openssl 1 下载openssl 下载链接&#xff1a;/source/index.html 2 解压openssl tar -xzvf openssl-3.0.9.tar.gz 3 配置其config编译条件 ~/Downloads/openssl-3.0.9$ ./config no-asm -shared --prefix/home/cidi/Downloads/openss…

【华为OD机试】模拟消息队列【2023 B卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 让我们来模拟一个消息队列的运作,有一个发布者和若干消费者, 发布者会在给定的时刻向消息队列发送消息若此时消息队列有消费者订阅, 这个消息会被发送到订阅的消费者中优先级最高(输…

springboot 发送邮件,以及邮件工具类 并且解决spring-boot-starter-mail 发送邮件附件乱码或者文件错乱

1、设置系统值 System.setProperty(“mail.mime.splitlongparameters”, “false”); 2、 在创建对象的时候定义编码格式(utf-8)&#xff1a; MimeMessageHelper helper new MimeMessageHelper(mes, true, “utf-8”); 3、 其次&#xff0c;在添加附件的时候&#xff0c;附…

安全基础 --- html基础标签 + DNS工作原理

html基础标签 &#xff08;1&#xff09;id id属性是元素在网页内的唯一标识符。 比如&#xff0c;网页可能包含多个<p>标签&#xff0c;id属性可以指定每个<p>标签的唯一标识符。 <p id"p1"></p> <p id"p2"></p>…

React的hooks---useReducer

useReducer 作为 useState 的代替方案&#xff0c;在某些场景下使用更加适合&#xff0c;例如 state 逻辑较复杂且包含多个子值&#xff0c;或者下一个 state 依赖于之前的 state 等。 使用 useReducer 还能给那些会触发深更新的组件做性能优化&#xff0c;因为父组件可以向自…

linux terminal显示git分支

首先查看PS1&#xff1a; echo $PS1 在.bashrc中添加下面修改&#xff1a; function git_branch {branch"git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //""if [ "${branch}" ! "" ];thenif [[ $branch *&…

华为OD机考--阿里巴巴黄金箱

题目内容 贫如洗的樵夫阿里巴巴在去砍柴的路上&#xff0c;无意中发现了强盗集团的藏宝地&#xff0c;藏宝地有编号从0~N的箱子每个箱子上面贴有一个数字箱子中可能有一个黄金宝箱。 黄金宝箱满足排在它之前的所有箱子数字和等于排在它之后的所有箱子数字之和; 一个箱子左边部分…

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2023)

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated Jul 2023) Windows 11, version 22H2 官方原版&#xff0c;2023 年 7 月 更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作…

vue实现excel数据下载,后端提供的list由前端转excel并下载

前言,因为项目需求需要,我们需要把后端传来的list转成excel模板,并且下载下来) 之前有用的插件,但是会有少0的情况,如下 所以采用另一个项目用过的方法,最终完美实现效果,如下: 1,首先我们来看下后端提供的数据结构 2,具体前端代码如下 封装的组件,需要的同学直接copy就行(这…

苍穹外卖Day01项目日志

1.软件开发流程和人员分工是怎样的&#xff1f; 软件开发流程 一个软件是怎么被开发出来的&#xff1f; 需求分析 先得知道软件定位人群、用户群体、有什么功能、要实现什么效果等。 需要得到需求规格说明书、产品原型。 需求规格说明书 其中前后端工程师要关注的就是产品原…

nginx启动报 ssl parameter requires ngx_http_ssl_module

更新网站安全证书时报上面的错&#xff0c;解决步骤&#xff1a; 问题分析 原因&#xff1a;nginx缺少http_ssl_module模块&#xff0c;编译安装的时候带上–with-http_ssl_module配置就行了&#xff0c;但是现在的情况是我的nginx已经安装过了&#xff0c;怎么添加模块&…

IP代理技术在网络安全与爬虫应用中的优势与挑战

一、IP代理技术简介 IP代理是一种将客户端请求通过中间服务器转发至目标服务器的网络技术。通过代理服务器&#xff0c;客户端的真实IP地址被隐藏&#xff0c;从而提高用户的匿名性和隐私保护。常见的IP代理类型有HTTP代理和SOCKS代理。 二、IP代理在网络安全中的应用 防止DOS…

数据库缓存服务——NoSQL之Redis配置与优化

目录 一、缓存概念 1.1 系统缓存 1.2 缓存保存位置及分层结构 1.2.1 DNS缓存 1.2.2 应用层缓存 1.2.3 数据层缓存 1.2.4 硬件缓存 二、关系型数据库与非关系型数据库 2.1 关系型数据库 2.2 非关系型数据库 2.3 关系型数据库和非关系型数据库区别&#xff1a; 2.4 非…

B076-项目实战--宠物上下架 展示 领养 收购订单

目录 上下架功能提供后台宠物列表实现 前台展示前台宠物列表和详情展示店铺展示 领养分析前台后端PetControllerPetServiceImpl 订单需求分析可能产生订单的模块订单模块额外功能 订单设计表设计流程设计 集成基础代码收购订单创建订单前端后端 上下架功能提供 后台宠物列表实…

深度学习算法的计算量

文章目录 一、FLOPs与FLOPS二、参数量parameters三、Latency与FPS四、结论 一、FLOPs与FLOPS 二、参数量parameters 三、Latency与FPS 四、结论

Spring 项目过程及如何使用 Spring

文章目录 1.创建 Spring 项目步骤1.1 创建 Maven 项目1.2添加 Spring 框架支持1.3 添加启动项2.如何使用 Spring2.1 存储 Bean 对象2.1.1 创建 Bean对象2.1.2 将 Bean对象注册到容器中 2.2 获取并使用 Bean对象2.2.1 使用 ApplicationContext 获取对象2.2.2 使用 BeanFactory 获…