在做测试的时候,有些地方无论是接口还是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. python中的while

    while循环 循环就是一个重复的过程,不断的重复.while循环又称条件循环 while 条件: code 1 code 2 code 3 ... ##实现ATM的输入密码重新输入的功能 while ...

  2. AspectRatio图片的宽高比、Card 卡片组件

    一.AspectRatio 组件 AspectRatio 的作用是根据设置调整子元素 child 的宽高比. AspectRatio 首先会在布局限制条件允许的范围内尽可能的扩展,widget 的高度 ...

  3. shell中遍历数组的几种方式

    #!/bin/bash arr=( '你好') length=${#arr} echo "长度为:$length" # for 遍历 for item in ${arr[*]} d ...

  4. 【Python协程的实现】

    " 补充:数据安全问题 进程: 多个进程操作同一个文件,会出现数据不安全 线程: 多个线程操作同一个全局变量,会出现数据不安全 对于共享的数据操作: 如果是 += *= /= -= 操作,都 ...

  5. .click() 和 onclick方法

    onclick=""只能绑定一次,再次绑定会把之前的覆盖 $('').click()可以绑定多次,再次绑定会在前一个程序执行完后触发

  6. Steam 游戏 《Sudoku Universe(数独宇宙)》、《Sudoku Killer(数独杀手)》、《Sudoku Jigsaw(数独拼图)》数字位置解析 ---------C# 数独程序解析(2020年寒假小目标11)

    日期:2020.02.11 博客期:151 星期二 今天,准备肝一个 C# 的数独读写工具(汇编语言也在努力学习命令方法中...),这三个游戏我早就买下了,一直放在 Steam 库里积灰,看着它的成就 ...

  7. 无刷新的批量图片上传插件.NET版

    啥都不说,先上效果图: 这是一个网上的第三方组件,原版是php的,我用.NET重写了图片上传的处理,下面贴上代码 using System; using System.Collections.Gene ...

  8. Java基础题目

    题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析:兔子的规律为数列1,1,2,3,5,8, ...

  9. 【渗透测试】NSA Windows 0day漏洞+修复方案

    这个漏洞是前段时间爆出来的,几乎影响了全球70%的电脑,不少高校.政府和企业都还在用Windows服务器,这次时间的影响力堪称网络大地震. ------------------------------ ...

  10. CocosCreator内存与性能优化

    一.内存优化 因为 iOS小游戏和微信共用同一个进程,而微信在连续两次收到系统内存警告的时候会关闭小游戏并释放小游戏占用的内存.如果你的小游戏有外网用户反馈“闪退”,或者你自己测试的时候频繁出现“该小 ...