python中的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()
结果:
=>1
2
3
'''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 3
4 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'}])
# @unpack
def 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'}])
@unpack
def 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'})
# @unpack
def 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'})
@unpack
def test_01(self,name,age):
print(name,age)
if __name__ == '__main__':
unittest.main()
结果:
=>lili 16
female 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)
# @unpack
def 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}
nick
male
29
python中的ddt用法相关推荐
- 五分钟理解yield在python中的简单用法,让你不再迷惑
很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...
- format函数python的顺序_[转载] Python中format函数用法
Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...
- python代码大全表解释-python中的字典用法大全的代码
如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...
- python教程实例-Python中函数的用法实例教程
本文以数值计算为例讲述了Python中函数的用法,分享给大家供大家参考借鉴之用.具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需 ...
- 详解python中的用法_详解python中*号的用法
1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...
- python中 str.strip()用法
python中 str.strip()用法 1.描述 str.strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. (即可以去除特殊字符串) 注意:该方法只能删除开头或是 ...
- Python中的del用法
python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...
- python中的super用法详解_【Python】【类】super用法详解
一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...
- python中argv的用法
python中argv的用法 sys.argv可以用来获取命令行参数,其中sys.argv[0]为脚本名,即python文件名,列表中的其他值为传入的参数值,一般定义方式为 script, arg1, ...
最新文章
- android的文件操作,Android文件操作概要1.ppt
- 100c之31:哥德巴赫猜想
- [转]处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”...
- python数学计算模块_Python-NumPy模块数学和统计方法(4)
- 超赞 | 计算机视觉联盟全新Logo!近期精华回顾!
- Android 系统(265)----Android进程保活全攻略(上)
- 只需 45 秒,Python 给故宫画一组手绘图!
- eclipse找不到arm-linux-gcc,使用 Eclipse 和 ARM GCC 搭建 STM32 开发环境
- MySQL数据库环境变量设置
- 对项目工时的估算: PERT(计划评审技术) 三点估算法
- 两直线平行交叉相乘_十字交叉双乘法没有公式
- ERP系统借贷关系表
- 互联网营销,不同阶层的人脉关系,对你真的有用吗?
- 5.计算圆周长和面积的c代码
- 使用scrapy爬取拉钩网招聘信息
- setopaque java_setOpaque(真/假); Java的
- 传智播客创始人张孝祥因病去世(转)
- c语言求1平方根,c语言求平方根公式
- 数商云B2B跨境电子商务平台综合服务解决方案
- ios 判断手机角度_IOS 判断iPhone刘海屏
热门文章
- nedc和epa续航里程什么意思_NEDC、WLTP和EPA续航里程是什么
- W801/W800-wifi-socket开发(二)-UDP蓝牙控制wifi连接
- 一文读懂Redis的四种模式,单机、主从、哨兵、集群(*)
- 企鲸客scrm跟小裂变的功能对比
- 2021深圳大学计算机考研,2021深圳大学计算机技术考研真题经验参考书
- onenote运用onetastic和notehighlight插件
- 巨控PLC远程下载调试最新方案
- lut及3D LUT调色预设怎么导入Mac?fcpx/PR/AE/PS/LR/达芬奇lut预设导入教程!
- 色选机和筛选机的区别?
- 通过VMware Horizon Client访问虚拟机