python之ddt模式随记
时间:2019-08-16
本文章向大家介绍python之ddt模式随记,主要包括python之ddt模式随记使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
ddt 是第三方模块,需安装, pip install ddt
DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@data(a,b)
a和b各运行一次用例,该方法会调用2次
@data([a,d],[c,d])
如果没有@unpack,那么[a,b]当成一个参数传入用例运行
如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
1、首先安装ddt
$>pip install ddt
由于已经安装过了,所以提示为下面的,可以忽略
2、安装完毕之后,可以配合unittest来实操一下,具体看例子。
import ddt import unittest ## 定义任意的参数,list,dict,str,tuple等等 t_list = [1,2] t_dict = {"a":"a","b":"b"} t_str = 'test_string' t_tuple = (1,2) @ddt.ddt class Test(unittest.TestCase): def setUp(self): print('start') ##这个仅有一个参数,将t_list赋值给data,打印 @ddt.data(t_list) def test_a(self,data): print(data) ## 这个有多个参数传入时,有一个函数接受 @ddt.data(t_list,t_dict,t_str,t_tuple) def test_b(self,data): print(data) ## 这个有多个参数传入,有多个函数接收 @ddt.data(t_list,t_dict,t_str,t_tuple) def test_c(self,a,b,c,d): print(a) print(b) print(c) print(d) if __name__ == '__main__': unittest.main()
结果如下:
由上可以看出,第一个,第二个函数执行没有问题,第三个函数执行报错了。可以得出如下
---可以传入多个类型的参数,可以接受多个类型
---可以同时传入多个类型的参数,分别传入,每个参数都会执行一次测试函数,作为一个整体传给测试函数。
3、那么如果我们单个传入参数的内容有很多,需要分解一下来执行呢?这个时候就要用到unpack了,如下
import ddt import unittest ## 定义任意的参数,list,dict,str,tuple等等 t_dict = {"a":'a',"b":"b","c":"c"} @ddt.ddt class Test(unittest.TestCase): def setUp(self): print('start') ##这里加了unpack,分别给传入对应参数 @ddt.data(t_dict) @ddt.unpack def test_a(self,a,b,c): print(a) print(b) print(c) ##这里没有加unpack,分别对应参数 @ddt.data(t_dict) def test_b(self,a,b,c): print(a) print(b) print(c) if __name__ == '__main__': unittest.main()
结果如下:
由上,我们可以得到,unpack的用法
以上就是ddt 的学习总结
原文地址:https://www.cnblogs.com/dflblog/p/11363376.html
- SendCloud邮件队列状态和已使用额度的Python监控脚本
- linux/scp命令报“bash: scp: command not found lost connection”错误的解决办法
- bat/cmd批处理连接SqlServer数据库查询脚本
- 一起用 HTML5 Canvas 做一个简单又骚气的粒子引擎
- 解决mstsc无法连接问题:由于没有远程桌面授权服务器可以提供许可证…
- Apache/Nginx伪静态规则匹配http://出现的问题与解决
- 微信文件微起底
- Go语言TCP Socket编程--1
- Go语言TCP Socket编程--2
- 服务器 数据库设计技巧--1
- CVE-2015-0235:Linux glibc高危漏洞的检测及修复方法
- zabbix监控在lnmp环境下编译安装小记
- 【重磅】百度开源分布式深度学习平台,挑战TensorFlow (教程)
- WordPress评论ajax动态加载,解决静态缓存下评论不更新问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 鸿蒙 Ability 讲解(页面生命周期、后台服务、数据访问)
- MySQL如何管理客户端连接?线程池篇
- 让python装饰器不再晦涩难懂
- Android开发3年,九月份面试12家大厂跳槽成功,我有一些面试经验想分享给你们
- MySQL的防火墙功能
- Java中线程池的参数有几个?
- MySQL企业版备份工具MEB
- python生成器函数的应用场景举例---为copy过程添加进度条显示
- 短网址程序YOURLS安装及配置教程与设置中文
- MGR用哪个版本?5.7 vs 8.0
- 同事直呼666!小姐姐仅用3行代码就能玩出花来
- MySQL升级至8.0需要考虑哪些因素?
- 某云Music——JS破解全过程
- 和低效 IO 说再见,回头补一波 Java 7 的 NIO.2 特性
- 框架源码调试实战之easypoi异常解决方案精讲