DDT

ddt 是第三方模块,需安装, pip install ddt

DDT包含的装饰器

包含一个类装饰器@ddt和两个方法装饰器@data和@file_data

通常情况下,@data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。

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

那么[a,b]和[c,d]各运行一次用例

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

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

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

import unittest
from ddt import ddt,data,unpack,file_data
#data([a,b],[c,d])
#如果没有@unpack,那么[a,b]当成一个参数传入用例运行 #如果有@unpack,那么[a,b]被分解开,按照用例中的两个参数传递
@ddt#类装饰器
class MyTesting(unittest.TestCase):
def setUp(self):
print('this is the setUp')
@data([1,2,3])#方法装饰器
def test_1(self,value):
print('value=',value) @data([3,2,1],[5,3,2],[10,4,2])
@unpack
def test_2(self,a,b,c):
print('a=%s,b=%s,expected=%s'%(a,b,c))
actual = int(a) - int(b)
expected = int(c)
self.assertEqual(actual, expected) @data([2,3],[4,5])
def test_3(self,a,b):
self.assertEqual(a,b) @data({'a':'first','b':'second'})
@unpack
def test_4(self,a,b):
print('test_4',a,b) @file_data("test_data_list.json")#方法装饰器
def test_5(self,value):
print('test_5_file_data,value=',value) def tearDown(self):
print('this is tearDown') if __name__ == '__main__':
unittest.main(verbosity=2)

执行分析

test_1

  1. 执行次数:1次
  2. 参数值:value=[1,2,3]
  3. 执行结果:pass

test_2

  1. 执行次数:3次
  2. 参数值:第一轮a=3,b=2,c=1;第二轮a=5,b=3,c=2;第三轮a=10,b=4,c=2
  3. 执行结果:第一轮、第二轮通过,第三轮失败FAIL
  4. 失败原因:self.assertEqual(a-b = c)失败

test_3

  1. 执行次数:2次
  2. 参数值:第一轮a=[2,3];第二轮a=[4,5]
  3. 执行结果:执行错误ERROR
  4. 失败原因:缺少参数b

i.            由于没有加@unpack, 虽然还是会被理解成2组测试数据,但是[2,3]作为一个整体被传给了a, 因为b就没有值传入了,所以一执行后报了  TypeError: test_compare() missing 1 required positional argument: 'b'  这句错

test_4

  1. 执行次数:1次
  2. 参数值:a = first,b=second
  3. 执行结果:pass

test_5

  1. 执行次数:test_data_list.json文件里面的数据数
  2. 参数值:每次value = test_data_list.json里面的一条数据
  3. 执行结果:pass

@data里面的数据格式

@data里面的数据可以是字典,列表,字典(注意字典的key值一定要跟参数名对应)

Json文件创建内容参考如下(tip,将文件的后缀名改为.json):

[
"邓肯||蒂姆",
"乔丹||迈克尔",
"库里||斯蒂芬",
"杜兰特||凯文",
"詹姆斯||勒布朗"
]

原文参考:https://www.cnblogs.com/nancyzhu/p/8563884.html

最新文章

  1. 网络编程学习笔记:linux下的socket编程
  2. (转)sql的join图解
  3. 【C语言】结构体
  4. hdu 1385 Minimum Transport Cost (floyd算法)
  5. 深入浅出JMS(一)——JMS简单介绍
  6. C# 几种退出程序的方式
  7. MEF初体验之四:Imports声明
  8. Tensorflow学习-数据读取
  9. MySQL高可用——PXC简介
  10. 【原创】Mac book pro入手后,需要做哪些才能开始开展自动化测试工作
  11. C# string数组转int数组
  12. IntelliJ IDEA 2017版 spring-boot使用JdbcTemplate实例
  13. libsvm svmtrain函数运行出错问题
  14. 【转载】windows 下重置 mysql 的 root 密码
  15. Hypver-V中的快照
  16. Linux下打包压缩war、解压war包和jar命令
  17. Java ConcurrentHashMap 源代码分析
  18. angular中的$http服务
  19. Java构造和解析Json数据的两种方法详解一——json-lib
  20. extjs增删改查(自己调用extjs)

热门文章

  1. windows2008服务器设置系统启动时程序自动运行
  2. POI2010 Bridges
  3. mysql PS1个性化
  4. WebSocketSharp 创建客户端和服务端
  5. OpenGL ES: (3) EGL、EGL绘图的基本步骤、EGLSurface、ANativeWindow
  6. LinearGradient线型渐变效果
  7. Strin类
  8. 013-多线程-基础-Fork/Join框架、parallelStream讲解
  9. Mongo查询百万级数据性能问题及JAVA优化问题
  10. springboot集成调用Azkaban