unittest---unittest数据驱动(ddt)
在做测试的时候,有些地方无论是接口还是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)的更多相关文章
- unittest使用数据驱动ddt
简介 ddt(data driven test)数据驱动测试:由外部数据集合来驱动测试用例,适用于测试方法不变,但需要大量变化的数据进行测试的情况,目的就是为了数据和测试步骤的分离 由于unittes ...
- unittest框架(三)unittest+yaml数据驱动
学习完了如何用yaml文件管理用例,如何进行单元测试,如何产生漂亮的测试报告,那么结合这几点,我们简单学习下unittest+yaml数据驱动来测试. 第一步:首先,我们建一个yaml文件,管理用例, ...
- python webdriver 测试框架-数据驱动DDT的例子
先在cmd环境 运行 pip install ddt 安装数据驱动ddt模块 脚本: #encoding=utf-8 from selenium import webdriver import un ...
- Python 数据驱动ddt 使用
准备工作: pip install ddt 知识点: 一,数据驱动和代码驱动: 数据驱动的意思是 根据你提供的数据来测试的 比如 ATP框架 需要excel里面的测试用例 代码驱动是必须得写代码 ...
- python之数据驱动ddt操作(方法二)
import unittestfrom ddt import ddt,unpack,datafrom selenium import webdriverfrom selenium.webdriver. ...
- python之数据驱动ddt操作(方法一)
下载ddt并安装 Pip install ddt 或者官网下载安装 http://ddt.readthedocs.io/en/latest/ https://github.com/txels/ddt ...
- 数据驱动——ddt
1: pip3 install ddt 2: @ddt 装饰 @data((2,3),(4,5)) 支持列表,元祖,字典 @unpack 解压数据 1 import unittest 2 from ...
- Python Unittest与数据驱动
python中有一个装饰器类DDT,通过它我们可以复用代码,达到数据驱动测试的目的,该类的官方介绍可以参考 http://ddt.readthedocs.io/en/latest/index.html ...
- Python unittest excel数据驱动
安装xlrd 下载地址:https://pypi.python.org/pypi/xlrd 安装ddt 下载地址:https://pypi.python.org/pypi/ddt/1.1.0 clas ...
- Python unittest excel数据驱动 写入
之前写过一篇关于获取excel数据进行迭代的方法,今天补充上写入的方法.由于我用的是Python3,不兼容xlutils,所以无法使用copy excel的方式来写入.这里使用xlwt3创建excel ...
随机推荐
- 吴裕雄--天生自然神经网络与深度学习实战Python+Keras+TensorFlow:LSTM网络层详解及其应用
from keras.layers import LSTM model = Sequential() model.add(embedding_layer) model.add(LSTM(32)) #当 ...
- netty笔记-:Channel与ChannelHandlerContext执行write方法的区别
在netty中有我们一般有两种发送数据的方式,即使用ChannelHandlerContext或者Channel的write方法,这两种方法都能发送数据,那么其有什么区别呢.这儿引用netty文档 ...
- ThreadLocal是什么?
早在JDK 1.2的版本中就提供Java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序. 当使 ...
- 【JavaScript基础#1】
" 目录 #. 概述 1. ECMAScript与JavaScript的关系 2. ECMAScript版本历史 3. 简单总结 #. 用法 1. 引入方式 2. 规范 3. 变量声明 ...
- linux chrome rpm chrome浏览器下载(ver 63-70)
我的github chrome下载地址:https://github.com/chen1932390299/python 国内开源的资源 chrome下载centos 的:https://www.ch ...
- 【笔记5-购物车及地址模块】从0开始 独立完成企业级Java电商网站开发(服务端)
购物车模块 数据库表设计 购物车表 CREATE TABLE mmall_ cart ( 'id' int(11) NOT NULL AUTO_ INCREMENT, 'user_ id' int(1 ...
- Python - __getattr__和__getattribute__的区别
传送门 https://docs.python.org/3/reference/datamodel.html#object.__getattr__ https://docs.python.org/3/ ...
- sso系统登录以及jsonp原理
登录的处理流程: 1.登录页面提交用户名密码. 2.登录成功后生成token.Token相当于原来的jsessionid,字符串,可以使用uuid. 3.把用户信息保存到redis.Key就是toke ...
- Java单例和多例
背景:最近在学习韩老师的笔记时候发现不是很了解单例和多例,于是通过网上查找资料的方式去学习. 设计模式:最佳的实践,是软件开发人员在软件开发过程中面临一般解决方案,也就是开发的经验总结. 单例模式(S ...
- 吴裕雄 python 神经网络——TensorFlow 滑动平均类的保存
import tensorflow as tf v = tf.Variable(0, dtype=tf.float32, name="v") for variables in tf ...