一般进行接口测试时,每个接口的传参都不止一种情况,一般会考虑正向、逆向等多种组合。所以在测试一个接口时通常会编写多条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用法相关推荐

  1. 五分钟理解yield在python中的简单用法,让你不再迷惑

    很多同学无论是在学习python还是使用python的过程中,都会遇到yield关键字,这个让人头大的问题,今天,就给大家分享一下我自学yield的心路历程 基本概念: (1)在 Python 中,使 ...

  2. format函数python的顺序_[转载] Python中format函数用法

    Python中format函数用法 format优点 format是python2.6新增的格式化字符串的方法,相对于老版的%格式方法,它有很多优点. 1.不需要理会数据类型的问题,在%方法中%s只能 ...

  3. python代码大全表解释-python中的字典用法大全的代码

    如下代码是关于python中的字典用法大全的代码. #!/usr/bin/env python # # [SNIPPET_NAME: Dictionaries 101] # [SNIPPET_CATE ...

  4. python教程实例-Python中函数的用法实例教程

    本文以数值计算为例讲述了Python中函数的用法,分享给大家供大家参考借鉴之用.具体如下: 我们都知道圆的面积计算公式为: S = πr2 当我们知道半径r的值时,就可以根据公式计算出面积.假设我们需 ...

  5. 详解python中的用法_详解python中*号的用法

    1.表示乘号 2.表示倍数,例如: def T(msg,time=1): print((msg+' ')*time) T('hi',3) 打印结果(打印3次): hi hi hi 3.单个 * (1) ...

  6. python中 str.strip()用法

    python中 str.strip()用法 1.描述 str.strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. (即可以去除特殊字符串) 注意:该方法只能删除开头或是 ...

  7. Python中的del用法

    python中的del用法比较特殊,新手学习往往产生误解,弄清del的用法,可以帮助深入理解python的内存方面的问题. python的del不同于C的free和C++的delete. 由于pyth ...

  8. python中的super用法详解_【Python】【类】super用法详解

    一.问题的发现与提出 在Python类的方法(method)中,要调用父类的某个方法,在Python 2.2以前,通常的写法如代码段1: 代码段1: class A: def __init__(sel ...

  9. python中argv的用法

    python中argv的用法 sys.argv可以用来获取命令行参数,其中sys.argv[0]为脚本名,即python文件名,列表中的其他值为传入的参数值,一般定义方式为 script, arg1, ...

最新文章

  1. android的文件操作,Android文件操作概要1.ppt
  2. 100c之31:哥德巴赫猜想
  3. [转]处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”...
  4. python数学计算模块_Python-NumPy模块数学和统计方法(4)
  5. 超赞 | 计算机视觉联盟全新Logo!近期精华回顾!
  6. Android 系统(265)----Android进程保活全攻略(上)
  7. 只需 45 秒,Python 给故宫画一组手绘图!
  8. eclipse找不到arm-linux-gcc,使用 Eclipse 和 ARM GCC 搭建 STM32 开发环境
  9. MySQL数据库环境变量设置
  10. 对项目工时的估算: PERT(计划评审技术) 三点估算法
  11. 两直线平行交叉相乘_十字交叉双乘法没有公式
  12. ERP系统借贷关系表
  13. 互联网营销,不同阶层的人脉关系,对你真的有用吗?
  14. 5.计算圆周长和面积的c代码
  15. 使用scrapy爬取拉钩网招聘信息
  16. setopaque java_setOpaque(真/假); Java的
  17. 传智播客创始人张孝祥因病去世(转)
  18. c语言求1平方根,c语言求平方根公式
  19. 数商云B2B跨境电子商务平台综合服务解决方案
  20. ios 判断手机角度_IOS 判断iPhone刘海屏

热门文章

  1. nedc和epa续航里程什么意思_NEDC、WLTP和EPA续航里程是什么
  2. W801/W800-wifi-socket开发(二)-UDP蓝牙控制wifi连接
  3. 一文读懂Redis的四种模式,单机、主从、哨兵、集群(*)
  4. 企鲸客scrm跟小裂变的功能对比
  5. 2021深圳大学计算机考研,2021深圳大学计算机技术考研真题经验参考书
  6. onenote运用onetastic和notehighlight插件
  7. 巨控PLC远程下载调试最新方案
  8. lut及3D LUT调色预设怎么导入Mac?fcpx/PR/AE/PS/LR/达芬奇lut预设导入教程!
  9. 色选机和筛选机的区别?
  10. 通过VMware Horizon Client访问虚拟机