ddt 结合单元测试一起用
ddt(data.driven.test):数据驱动测试
由外部数据集合来驱动测试用例
核心的思想:数据和测试代码分离
应用场景:一组数据来执行相同的操作
当测试数据发生大量变化的情况下测试代码,(或者说测试用例)可以保持不变
excel存储测试数据,ddt读取测试数据到 单元测试框架(测试用例中)-输出到html报告
python.ddt框架
安装:pip install ddt
使用之前先导入ddt
import ddt
ddt结合单元测试来使用
1.在测试类定义定义之前使用:@ddt.ddt
2.在测试用例定义之前使用,@ddt.data(测试数据) 测试数据之间用逗号隔开
3.在2的基础上定义测试用例时,参数接收2中的测试数据
例:
@ddt.ddt
class Demo Test(unittest.TestCase):
@ddt.data(2,3,4)
def test_print(self,a)
print("简单调用@data查看输出的是什么?",a)
例子
import ddt
import unittest
@ddt.ddt
class test_PersonInfo(unittest.TestCase):
@classmethod
def setUp(self):
print("==========开始测试==========")
@classmethod
def tearDown(self):
print("==========结束测试==========")
@ddt.data(1,2,3,4)
def test_print(self,a):
print(a)
ddt-data 数据
一组数据之间用逗号隔开
data的参数可以为如下几种
1.一组数据中,每个数据为单个值
2.一组数据中,每个数据为一个列表或者一个字典
3.文件对象:jason,yaml
一组数据中的数据为列表或者字典:
@data([a,b],[c,d])
如何从以上数据中获取到字典中每一项值
@unpack
若变量A=[{a:b,a1:b1},{c:d,c1:d1}]
如何将变量A中的每一组元素作为测试数据
@ddt.data(*A)
import ddt
import unittest
@ddt.ddt
class test_PersonInfo(unittest.TestCase):
@classmethod
def setUp(self):
print("==========开始测试==========")
@classmethod
def tearDown(self):
print("==========结束测试==========")
@ddt.data([1,2],[3,4])
def test_print(self,a):
print(a)
==========开始测试==========
[1, 2]
==========结束测试==========
==========开始测试==========
[3, 4]
==========结束测试==========
print(a[0])
==========开始测试==========
1
==========结束测试==========
==========开始测试==========
3
==========结束测试==========
@ddt.data([1,2],[3,4])
@ddt.unpack
def test_print(self,a,b):
print(a,b)
==========开始测试==========
1 2
==========结束测试==========
==========开始测试==========
3 4
==========结束测试==========
@ddt.data([{"a":2,"b":3},{"c":4,"d":8},{"e":5,"f":7}])
def test_print(self,a):
print(a)
==========开始测试==========
[{'a': 2, 'b': 3}, {'c': 4, 'd': 8}, {'e': 5, 'f': 7}]
==========结束测试==========
@ddt.data(*datas)
def test_print(self,datas):
print(datas)
==========开始测试==========
{'class': 'python2', 'name': 'xiaoshitou', 'id': '0001', 'sex': 'male'}
==========结束测试==========
==========开始测试==========
{'class': 'python2', 'name': 'nuonuo', 'id': '0002', 'sex': 'female'}
==========结束测试==========
==========开始测试==========
{'class': 'python2', 'name': 'fly', 'id': '0003', 'sex': 'male'}
==========结束测试==========
==========开始测试==========
{'class': 'python2', 'name': 'haiyang', 'id': '0004', 'sex': 'male'}
==========结束测试==========
==========开始测试==========
{'class': 'python2', 'name': 'shuangshuang', 'id': '0005', 'sex': 'female'}
==========结束测试==========
dat-data数据
数据为文件对象:Json yaml
json格式里面必须为双引号“”,且必须为键值对,不存在纯列表格式,值作为测试数据
{"name":"nick","gender":"male","age":29}
@ddt.file_data(jason文件路径)
@ddt.file_data(os.getcwd()+"/test.json")
def test_json(self,data):
print(data)
==========开始测试==========
[1, 2, 3]
==========结束测试==========
==========开始测试==========
python2
==========结束测试==========
==========开始测试==========
male
==========结束测试==========
==========开始测试==========
xiaoshitou
==========结束测试==========
==========开始测试==========
0001
==========结束测试==========
python下读取excel文件
项目中要用到这个,所以记录一下. python下读取excel文件方法多种,用的是普通的xlrd插件,因为它各种版本的excel文件都可读. 首先在https://pypi.python.org/py ...
Delphi中使用python脚本读取Excel数据
Delphi中使用python脚本读取Excel数据2007-10-18 17:28:22标签:Delphi Excel python原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 . ...
python+ddt+unittest+excel+request实现接口自动化
接口自动化测试流程:需求分析-用例设计--脚本开发--测试执行--结果分析1.获取接口文档,根据文档获取请求方式,传输协议,请求参数,响应参数,判断测试是否通过设计用例2.脚本开发:使用request ...
python xlrd 读取excel.md
文章链接:https://mp.weixin.qq.com/s/fojkVO-AB2cCu7FtDtPBjw 之前的文章介绍过关于写入excel表格的方法,近期自己在做一个网站,涉及到读取excel, ...
python(读取excel操作-xlrd模块)
一.安装xlrd模块 到python官网下载http://pypi.python.org/pypi/xlrd模块安装,前提是已经安装了python 环境. 或者在cmd窗口 pip install ...
Python实现读取Excel文档中的配置并下载软件包
问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...
python(读取 excel 操作 xlrd 模块)
一.安装 xlrd 模块 到 python 官网下载 http://pypi.python.org/pypi/xlrd 模块安装,前提是已经安装了 python 环境. 或者在 cmd 窗口 pip ...
python脚本 读取excel格式文件 并进行处理的方法
一.安装xlrd模块 pip install xlrd 二.读取excel文件 try: excel_obj = xlrd.open_workbook("文件路径") except ...
python实现读取excel
实现代码如下: #读取excel,将每行数据放入一个列表,将所有列表放入一个列表形成二维列表,返回该二维列表 import xlrd class ReadExcel: def read_excel(s ...
随机推荐
javascript遍历数组最优写法
var arr = [];//这样定义的数组,是null,等待开辟空间 var arr = new Array();//不建议使用,会占用一块内存空间 var i=0,len=arr.length; ...
USB 设备类协议入门【转】
本文转载自: 一.应用场合 USB HID类是比较大的一个类,HID类设备属 ...
ZigBee组网原理
Zigbee组建一个完整的网络包含两个步骤:网络初始化和节点加入网络.其中,节点加入网络可以分为通过协调器直接连接入网和通过已有父节点入网.下面来依次说明. 1. 网络初始化 ZigBee网络初始化只 ...
(转载)使用JavaScript操作表单
(转载)http://www.blogjava.net/junglesong/archive/2008/03/02/183263.html 使用JavaScript操作表单 获取表单的引用 在开始对表 ...
linux文件查找find命令
linux文件查找find命令 1.文件查找 基本介绍 在文件系统上查找符合条件的文件 linux上常见的文件查找工具:find命令 查找分类 实时查找 精确查找 基本语法 find [option ...
Python核心编程 | 浅谈闭包的使用
1.函数的引用 >>> def test(): print('test:') >>> test
完美的代码生成器SNF.CodeGenerator-快速开发者的利器--SNF快速开发平台3.1
第1章 SNF.CodeGenerator代码生成器简介 本项目是完全基于Spring.Net.Framework 平台进行研发.与Spring.Net.Framework平台无缝衔接.并支持模型层. ...
Java线程之Callable和Future
本篇说明的是Callable和Future,它俩很有意思的,一个产生结果,一个拿到结果. Callable接口类似于Runnable,从名字就可以看出来了,但是Runnable不会返回结 ...
Java自动类型转换
■ 自动类型转换:容量小的数据类型可以自动转换为容量大的数据类型. ■ 特例:可以讲整型常量直接赋给byte,short,char等类型变量,而不需要强制类型转换,只要不超出其表数范围. ■ 强制类型 ...