在做测试的时候,有些地方无论是接口还是UI只是参数数据的输入不一样,操作过程是一样的。重复去写操作过程会增加代码量,我们可以通过参数化的方式解决这个问题,也叫做数据驱动,我们通过python做参数化的方法有很多种,今天我们介绍一种简单的方法DDT

ddt

官方文档:https://ddt.readthedocs.io/en/latest/example.html

ddt属于python的第3方库,需要通过pip进行安装

pip install ddt

ddt中常用的类的装饰器一个data(可以直接传数据)一个filed_data(可以通过json或者yaml传输)解压分析数据unpack,剩下的小伙伴们可以自己看看源码进行学习哈

data装饰器源码

def data(*values):
"""
方法装饰器来添加到您的测试方法中。
应该添加到' ' unittest.TestCase ' '实例的方法中
"""
global index_len
index_len = len(str(len(values)))
return idata(values)

file_data装饰器源码

def file_data(value):
"""
方法装饰器来添加到您的测试方法中。
应该添加到' ' unittest.TestCase ' '实例的方法中。
' ' value ' '应该是一个相对于文件目录的路径
包含修饰过的' ' unittest.TestCase ' '。该文件
应该包含JSON编码的数据,可以是列表,也可以是
字典
对于列表,列表中的每个值都对应一个值
测试用例,该值将连接到测试方法
的名字。 """
def wrapper(func):
setattr(func, FILE_ATTR, value)
return func
return wrapper

unpack源码

def unpack(func):
"""
方法装饰器来添加解压功能。 """
setattr(func, UNPACK_ATTR, True)
return func

这里我们通过一个来更加的了解下DDT数据驱动的内容

小试牛刀

通过查询音乐接口了解ddt使用方法

data装饰器

1、首先导入ddt模块,在类在修饰ddt.ddt

2、编写ddt用例格式

3、使用的用例修饰ddt.data

4、查看导入数据是否正确

这里的参数数据一般字典形式存放,一组数据为一组字典

# coding:utf-8
import unittest
import requests
import ddt
# 参数数据
testddt = [{'name':'断桥残雪'},
{'name':'像鱼'}]
@ddt.ddt
class Music(unittest.TestCase): def select(self,name):
url = 'https://api.apiopen.top/searchMusic'
data = {
"name":name
}
r = requests.post(url,data=data)
b = r.json()['result'][0]['title']
return b
@ddt.data(*testddt)
def test01(self,data):
print('当前测试数据:%s'%data)
result = self.select(data['name'])
self.assertEqual(result,data['name']) if __name__ == '__main__':
unittest.main()

通过执行后,我们可以发现用例全部都是通过的,执行的数据也是我们ddt中存放的数据

unpack装饰器

如果数据在字典内容展示,但是下面没有具体的提取数据,我们可以通过这个unpack来解压数据

# coding:utf-8
import unittest
import requests
import ddt
# 参数数据
testddt = [{'name':'断桥残雪'},{'name':'像鱼'}]
@ddt.ddt
class Music(unittest.TestCase):
def select(self,name):
url = 'https://api.apiopen.top/searchMusic'
data = {
"name":name
}
r = requests.post(url,data=data)
b = r.json()['result'][0]['title']
return b
@ddt.data(*testddt)
@ddt.unpack
def test01(self,name):
print('当前测试数据:%s'%name)
result = self.select(name)
self.assertEqual(result,name) if __name__ == '__main__':
unittest.main()

file_data装饰器

file_data可以通过读取yaml和json的数据来进行实现,我们可以动手试试下,先配置yaml把想要的数据类型都存放在里面

读取方法,在用例上方添加装饰器后面带上yaml的文件名,通过请求后发现已经请求成功了

# coding:utf-8
import unittest
import requests
import ddt
@ddt.ddt
class Music(unittest.TestCase):
def select(self,name):
url = 'https://api.apiopen.top/searchMusic'
data = {
"name":name
}
r = requests.post(url,data=data)
b = r.json()['result'][0]['title']
return b
@ddt.file_data('name.yaml')
def test01(self,name):
print('当前测试数据:%s'%name)
result = self.select(name)
self.assertEqual(result,name) if __name__ == '__main__':
unittest.main() 当前测试数据:断桥残雪
当前测试数据:像鱼
..
----------------------------------------------------------------------
Ran 2 tests in 0.244s OK

这里还有file_data也可以请求json数据,这里就不做写,大家可以自己动手写一写

unittest---unittest数据驱动(ddt)的更多相关文章

  1. unittest使用数据驱动ddt

    简介 ddt(data driven test)数据驱动测试:由外部数据集合来驱动测试用例,适用于测试方法不变,但需要大量变化的数据进行测试的情况,目的就是为了数据和测试步骤的分离 由于unittes ...

  2. unittest框架(三)unittest+yaml数据驱动

    学习完了如何用yaml文件管理用例,如何进行单元测试,如何产生漂亮的测试报告,那么结合这几点,我们简单学习下unittest+yaml数据驱动来测试. 第一步:首先,我们建一个yaml文件,管理用例, ...

  3. python webdriver 测试框架-数据驱动DDT的例子

    先在cmd环境 运行 pip install ddt 安装数据驱动ddt模块  脚本: #encoding=utf-8 from selenium import webdriver import un ...

  4. Python 数据驱动ddt 使用

    准备工作: pip install ddt 知识点: 一,数据驱动和代码驱动: 数据驱动的意思是  根据你提供的数据来测试的  比如 ATP框架 需要excel里面的测试用例 代码驱动是必须得写代码  ...

  5. python之数据驱动ddt操作(方法二)

    import unittestfrom ddt import ddt,unpack,datafrom selenium import webdriverfrom selenium.webdriver. ...

  6. python之数据驱动ddt操作(方法一)

    下载ddt并安装 Pip install ddt 或者官网下载安装 http://ddt.readthedocs.io/en/latest/ https://github.com/txels/ddt ...

  7. 数据驱动——ddt

    1: pip3 install ddt 2: @ddt 装饰 @data((2,3),(4,5)) 支持列表,元祖,字典 @unpack 解压数据   1 import unittest 2 from ...

  8. Python Unittest与数据驱动

    python中有一个装饰器类DDT,通过它我们可以复用代码,达到数据驱动测试的目的,该类的官方介绍可以参考 http://ddt.readthedocs.io/en/latest/index.html ...

  9. Python unittest excel数据驱动

    安装xlrd 下载地址:https://pypi.python.org/pypi/xlrd 安装ddt 下载地址:https://pypi.python.org/pypi/ddt/1.1.0 clas ...

  10. Python unittest excel数据驱动 写入

    之前写过一篇关于获取excel数据进行迭代的方法,今天补充上写入的方法.由于我用的是Python3,不兼容xlutils,所以无法使用copy excel的方式来写入.这里使用xlwt3创建excel ...

随机推荐

  1. TensorFlow:使用inception-v3实现各种图像识别

    程序来自博客: # https://www.cnblogs.com/felixwang2/p/9190740.html上面这个博客是一些列的,所以可以从前往后逐一练习. # https://www.c ...

  2. ThreadLocal是什么?

    早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使 ...

  3. python中for循环中的循环变量

    废话不多说,代码伺候: for i in range(3): print("hello") print(i) 运行结果如下: 从上面的例子可以看出,for循环里面的循环变量i作用域 ...

  4. 创业学习--《预判行业机会》--B-2.预判模块---HHR计划--以太一堂

    一,<开始学习> 1,行业机会的判断,是可以通过不断地训练提高自己的判准的概率的,要科学思考创业. 2,创业者在行业机会上的三个问题: a. 对市场变化,敏感性太弱,没有洞察行业的意识. ...

  5. numpy中的max()函数

    1.ndarray.max([int axis]) 函数功能:求ndarray中指定维度的最大值,默认求所有值的最大值. axis=0:求各column的最大值 axis=1:求各row的最大值

  6. 【渗透测试】Squirrelmail远程代码执行漏洞+修复方案

    最近网上有点不太平,爆出各种漏洞,等下会把近期的漏洞复现一下,发出来.安全圈的前辈总是默默的奉献,在这里晚辈们只能站在巨人的肩膀上,跟紧前辈们的步伐,走下去. -------------------- ...

  7. ANSYS热分析简介1

    目录 1. ANSYS热分析简介 1.1 传导 1.2 热载荷分类 1.2.1 载荷施加 1.3 热分析分类 1.3.1 稳态热分析 1.3.2 瞬态热分析 1.3.3 非线性分析综述 2. 热分析单 ...

  8. Nginx 七层反向代理

    目录 1.代理 2.正向代理 3.反向代理 4.Nginx 反向代理 5.Nginx 反向代理相关指令介绍 ①.listen ②.server_name ③.location ④.proxy_pass ...

  9. string类的具体实现

    bigThree,注意拷贝构造函数的写法. #ifndef __MYSTRING__ #define __MYSTRING__ class String { public: String(); Str ...

  10. Jenkins 定时备份插件 ThinBackup

    需求 公司的整个测试环境正式环境打包都是用的同一个Jenkins, 该Jenkins是搭建在内部的一台机器上,之前有一台机器的硬盘出了问题,为了安全起见,我们决定备份 Jenkins 的配置和数据. ...