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

#########################################################

注意:

1、unpack按逗号将拿到的每条数据拆分,如下图

2、拆分的数据个数不一样时,可以使用默认值,但一般test_data里边的数据要保持个数一致,如下图

3、如果@unpack后的参数 少于5个,推荐使用unpack,

需要注意参数不对待的情况,提供对应个数的参数来接收变量

如果要对字典进行unpack,参数名一定要与字典里边的名字保持一样。

import unittest
from ddt import ddt, data, unpack
test_data = [{"name": "张三", "age": 18}, {"name": "李四", "age": 20}]@ddt
class TestDdtDic(unittest.TestCase):@data(*test_data)def test_dic(self, item):print("test_dic 方法中  item is : {}".format(item))@data(*test_data)@unpackdef test_dic_unpack(self, name, age):print("test_dic_unpack 方法中:name:{},age is {}".format(name, age))if __name__ == '__main__':unittest.main()#################运行结果如下:#################
test_dic 方法中  item is : {'name': '张三', 'age': 18}
test_dic 方法中  item is : {'name': '李四', 'age': 20}
test_dic_unpack 方法中:name:张三,age is 18
test_dic_unpack 方法中:name:李四,age is 20

python ddt相关推荐

  1. 案例驱动python编程入门-python ddt数据驱动实例代码分享

    python ddt数据驱动最简实例 在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写 ...

  2. python ddt mysql_Python数据驱动DDT的应用

    原标题:Python数据驱动DDT的应用 在开始之前,我们先来明确一下什么是数据驱动,在百度百科中数据驱动的解释是:数据驱动测试,即黑盒测试(Black-box Testing),又称为功能测试,是把 ...

  3. python ddt mysql_40- 数据驱动(ddt)

    [TOC] 前言 在设计用例的时候,有些用例只是参数数据的输入不一样,比如登录这个功能,操作过程但是一样的.如果用例重复去写操作过程会增加代码量,对应这种多组数据的测试用例,可以用数据驱动设计模式,一 ...

  4. python ddt浅析

    文章目录 前言 一.ddt简单介绍 1.ddt是什么 2.使用ddt的好处 3.导入ddt模块 4.四种模式 二.ddt处理各种类型数据 1.分析ddt工作原理 2.ddt测试元祖数据 2.1测试单组 ...

  5. python ddt模块

    python数据驱动模块ddt 一.安装 pip install ddt 二.使用,参考文章 https://www.cnblogs.com/miniren/p/7099187.html 1.传入一个 ...

  6. python+ddt

    ddt 依赖宝:pip install ddt from ddt import ddt,data data = [1,2,3] class Test:@data(*data)def test_ddt( ...

  7. python ddt安装

    pip install ddt

  8. python ddt 实现数据驱动

    ddt 是第三方模块,需安装, pip install ddt DDT包含类的装饰器ddt和两个方法装饰器data(直接输入测试数据)@data和@file_data 通常情况下,data中的数据按照 ...

  9. python输入多组测试数据_python ddt数据驱动实例代码分享

    python ddt数据驱动最简实例 在接口自动化测试中,往往一个接口的用例需要考虑 正确的.错误的.异常的.边界值等诸多情况,然后你需要写很多个同样代码,参数不同的用例.如果测试接口很多,不但需要写 ...

最新文章

  1. 求方程ax2+bx+c的根python_Python,计算 ax^2 + bx + c = 0的根
  2. JAVA IO - RandomAccessFile Seek学习
  3. 互联网1分钟 | 0117 IBM入驻上海张江人工智能岛;IoT业务将成为小米新支撑点
  4. 如何自行查找SAP ERP的物料主数据和CRM产品主数据的映射关系
  5. Hadoop 倒排索引
  6. sc openscmanager 失败 5 mysql_如何增加windows服务
  7. 深入开展计算机设备保密检查,江西安远县检察院深入开展网络安全保密自查工作...
  8. 类string的构造函数、拷贝构造函数和析构函数
  9. python实现matlab_用matlab和python实现符号运算
  10. idea中拉取项目时 没有文件_idea编译器中maven项目获取路径的方法
  11. Android—修改button属性
  12. 如何使用定时器产生两路频率可调、占空比可调的PWM波
  13. python 中time, datetime的用法
  14. 2021下半年软考网络工程师上午真题(二)
  15. Java字符串排序比较。
  16. 51单片机学习——1天学完普中基本实验例程,走马观花式学习,大家切勿效仿。
  17. 病毒conime.exe、mmlucj.exe、severe.exe 查杀办法
  18. Tier-1 ISP Tier-2 ISP and Tier-3 ISP
  19. 中科大计算机与华科,2021全国理工科大学排名!打破传统模式,华科第二,哈工大第五...
  20. 在1705年第一个电灯泡是如何被发明的?

热门文章

  1. void readstring( char s[] ); 怎样_char *s和char s[]
  2. 12.2 新特性:RMAN 自动恢复到 REDO 终点的步骤简化
  3. 从内存管理原理,窥探OS内存管理机制
  4. 支撑1300+矿井监控,华为云数据库助力打造智能矿山
  5. 云图说|应用魔方AppCube:揭秘码农防脱神器
  6. 超详细的jQuery的 DOM操作,一篇就足够!
  7. 比物理线程都好用的C++20的协程,你会用吗?
  8. 三色标记原理,我给应聘者问懵了...
  9. 云原生势不可挡,华为云GaussDB加速企业数字化转型
  10. 互联网短平快下,DevCloud如何支撑软件开发的“转型”?