DDT数据驱动测试

简单介绍

​ DDT(Date Driver Test),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避免在测试中使用硬编码的数据,也就是测试数据和用例脚本代码分离。

​ DDT它其实就是一个装饰器,它会根据你传递进来的数据来决定要生成几个测试用例。

​ 🎈使用的意义

1.代码复用率高:一个测试逻辑只需要写一次,可以多条测试数据复用,同时提高测试脚本的编写效率。

2.异常排查效率高:根据测试数据,每条数据生成一条测试用例,用例相互分离,一条失败的情况下不会影响其他测试用例。

3.代码可维护性高:简洁明了的测试框架,利于其他同事阅读,提高代码的可维护性。

安装及导入

​ cmd命令行执行安装:pip install ddt

​ 直接导入到模块:import ddt,或导入具体的装饰器:from ddt import ddt, data, unpack

ddt使用详解

​ 🎈三个要点

  • @ddt:装饰测试类
  • @data:装饰测试用例
  • @unpack:装饰测试用例

​ 要使用ddt的前提是要有测试用例类,然后用@ddt去装饰测试用例类,用@data(测试数据)去装饰测试用例,如下登录接口例子:

from ddt import ddt, data
from common.read_excel import ReadExcel
from common.my_logger import log@ddt  # 装饰登录测试用例类,声明使用ddt
class LoginTestCase(unittest.TestCase):excel = ReadExcel("cases.xlsx", "login")cases = excel.read_data()@data(*cases)	# 装饰测试用例def test_login(self, case):case_data = eval(case["data"])expected = eval(case["expected"])case_id = case["case_id"]result = login_check(*case_data)response = self.http.send(url=url, method=method, json=data, headers=headers)result = response.json()try:self.assertEqual(expected["code"], result["code"])self.assertEqual((expected["msg"]), result["msg"])except AssertionError as e:log.info("用例:{}--->执行未通过".format(case["title"]))print("预期结果:{}".format(expected))print("实际结果:{}".format(result))raise eelse:log.info("用例:{}--->执行通过".format(case["title"]))if __name__ == '__main__':unittest.main()
 @ddt它做的事情其实就等同于这句代码:LoginTestCase = ddt(LoginTestCase),把具体的类名传给ddt,告诉ddt是这个测试用例类要使用数据驱动。

​ @data做的事情就是把测试数据作为一个参数传递给测试用例,一个数据对应生成一条测试用例,如果data里面有多个数据那么就对应生成多条测试用例。如果data里放的类似是元组、列表等这样的序列类型的数据,data会把他们当成是一个整体,即一个测试数据。

​ 如果想一次传递多个参数给测试用例,需要自行在脚本中对数据进行分解或者使用@unpack分解数据。如上例子中的测试用例,只使用了一个参数,但这个参数case是一个字典,字典中已经包含多个数据,直接用key获取对应的值即可。@unpack则是可以把序列类型的数据拆分为多个,以多个参数传给测试用例,但测试用例也需要定义同等数量的参数来接收。

​ 上面例子的测试数据cases来源是使用了openpyxl来读取excel中的测试数据的,关于openpyxl可以看我这个系列的另外一篇随笔。这里直接说明cases其实就是像下面这样的一个列表:

python

cases = [{'case_id': 1, 'title': '正常登录', 'data': '("test", "Test1234")', 'expected': '{"code": 0, "msg": "登录成功"}'}, {'case_id': 2, 'title': '密码错误', 'data': '("test", "123")', 'expected': '{"code": 1, "msg": "账号或密码不正确"}'}, {'case_id': 3, 'title': '账户名错误', 'data': '("test11", "Test1234")', 'expected': '{"code": 1, "msg": "账号或密码不正确"}'}]# *解包后,一个字典就是一个测试用例数据
# 如第一个字典:{'case_id': 1, 'title': '正常登录', 'data': '("test", "Test1234")', 'expected': '{"code": 0, "msg": "登录成功"}'}

​ 通过*解包,它的数据就是3个字典,每次给测试用例传入1个字典,而这个字典里就存放了一条完整的登录接口测试用例的测试数据,包括用例id、用例标题、测试的账号密码、期望返回的结果。

​ 🎈小结:

  • @data(a,b):a和b各运行一次用例
  • @data(*(a,b):a和b各运行一次用例,使用*解包,相当于@data(a,b)
  • @data([a,d],[c,d])
    • 如果没有@unpack[a,b]、[c,d]都会被当成一个参数传入用例,即用[a,b]运行一次,用[c,d]运行一次;
    • 如果有@unpack,[a,b]会被分解开,一次传递两个参数给用例,用例需要定义两个参数接收
    • @unpack可适用元组、列表或字典,但当传入的是字典时,字典的key和用例定义的参数名需要保持一致

扩展

​ 关键代码@file_data,传递文件(json/yaml)

# 传递json
"""
json文件数据
{"token":123456,"actionName": "api.login","content": {"user": "miki","pwd": "Test123"}
}
"""
"""
yaml文件
test_list:- 11- 22- 12sorted_list: [ 11, 12, 22 ]
"""
from ddt import *@ddt	# 声明使用ddt
class TestFile(unittest.TestCase):@file_data('D:/test/test.json')def test_json(self, json_data):print(json_data)@file_data('D:/test/test.yaml')def test_yaml(self, yaml_data):print("yaml", yaml_data)

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1621633.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【80天学习完《深入理解计算机系统》】第十一天 3.5 过程(函数调用)

专注 效率 记忆 预习 笔记 复习 做题 欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)   文章字体风格: 红色文字表示&#…

模板(二)

目录 非类型模板参数 引入 分类 使用typename的特殊情况 注意点 模板特化 引入 介绍 函数模板特化 使用 ​编辑 优点 类模板特化 全特化 偏特化 部分特化 特殊的特化 使用 分离编译 介绍 问题代码示例 代码 说明 预处理 编译 链接 类模板实例化…

期货量化软件:衡量指标信息

机器学习依靠数据训练来学习市场的一般行为,最终做出相当准确的预测。 所选学习算法必须遍历精心挑选的样本,以便提取有意义的信息。 许多人未能成功应用这些精密工具的原因是,大多数有意义的信息都隐藏在嘈杂的数据当中。 对于许多策略开发人…

期货量化交易软软件:怎样开发可以获利的交易策略

简介 通过技术分析开发成功交易策略的过程可以分为以下几步: ​ 编辑 添加图片注释,不超过 140 字(可选) 在某个资产价格图表窗口上附加几个技术指标, 并识别出其中信号指标与市场关联的模式. 把上一步相关性分析取得的数据进行公式化. …

免费期货量化交易软件:种群优化算法引力搜索算法(GSA)

1. 概述 ​​​​​​​ 引力搜索算法(GSA)是由 E. Rashedi 提出的,用于解决优化问题,特别是非线性问题,它遵循牛顿的万有引力定律原理。 在所提议的算法中,粒子被视为物体,并在考虑其质量的情…

免费_期货量化软件:神经网络变得轻松-网络训练和测试

1. 定义问题 在开始创建智能交易系统之前,必须定义将为新神经网络设定的目标。 当然,金融市场上所有智能交易系统的共同目标是获利。 然而,此目的太笼统宽泛。 赫兹期货量化软件需要为神经网络指定更具体的任务。 甚至,我们需要了…

免费期货量化软件:多层感知器和反向传播算法

免费期货量化软件:多层感知器和反向传播算法 什么是 TensorFlow? TensorFlow 是一个快速数值处理的开源函数库。 它是由 Google 依照 Apache 开源许可下创建、支持和发布。 该 API 是为 Python 语言设计的,尽管它也可以访问基本的 C API。…

免费期货量化软件策略:艾伦·安德鲁斯和他的时间序列分析技术

我相信,所有现代图表分析应用程序都会包括 安德鲁草叉。 在高级系统中,在原本的三条主线中会添加一些额外的线(例如,为了更方便,赫兹期货量化中加入了“侧边”等级)。 一些开发人员在他们的程序中包括“希夫…

免费期货量化软件:数据科学与机器学习——线性回归

它是一个跨学科领域,它运用科学方法、流程、算法、系统,从嘈杂、结构化和非结构化数据中提取出知识和见解,并将这些知识和可操作的见解在广泛的应用领域加以运用。 数据科学家则是创建编程代码、并将其与统计学相结合,从中挖掘创…

免费期货量化软件策略:在一张图表上的多个指标为用户开发

通常,当我们开始实现一个新系统时,我们并不真正知道我们如何对其进行改进;故此,我们应该始终启动一个新项目,并着眼于未来进行改进。 这对那些刚开始的人来说非常重要:持续地规划一些事情,想象未…

免费期货量化软件策略您能用移动平均线做什么呢?

我们将学习布林带,它测量数据在其平均值附近的离散度。该指标由约翰博林格(John Bollinger)创造。 它由围绕 20 天移动平均线的两条波段构成,以测量数据(价格)在其均值(20 天移动平均线&#xf…

免费期货量化软件策略:从头开始开发智能交易系统(第 25 部分)

概述 在上一篇文章提供系统健壮性 (I)中,赫兹期货量化已经看到了如何更改 EA 的某些部分,从而令系统更加可靠和健壮。 这只是针对兹期货量化将要在本文中所做之事的介绍。 请忘记您所知道的、计划的、或希望的一切。 这里最困难…

免费期货量化软件:学习如何设计一款布林带Bollinger Bands交易系统

我们将学习布林带,它测量数据在其平均值附近的离散度。该指标由约翰博林格(John Bollinger)创造。 它由围绕 20 天移动平均线的两条波段构成,以测量数据(价格)在其均值(20 天移动平均线&#xf…

免费期货量化软件:针对交易的组合数学和概率论曲线分析

赫兹期货量化将继续为构建多重状态、可扩展的交易系统奠定基础。 在本文的框架内,我想为您展示如何利用前几篇文章中的发展成果,来进一步阐述交易过程的广泛可能性。 这有助于从这些层面评估策略,来弥补其它分析方法未能涵盖的地方。 在本文中…

免费期货量化软件:从头开始开发智能交易系统概念上的飞跃

有时,在开发一些项目时,我们也许会发现新的思路和新的可能特性,这些特性能够派上用场,并为我们正在创建的系统提供极大的改进。 但问题出来了:实现新功能的最简单途径是什么? 问题在于,有时我们…

Bugku 密室逃脱 WP

一、打开题目 二、解压文件夹,查看文件和压缩包,发现压缩包进行了加密 三、查看剧本,发现摩斯密码,并解析得到电脑密码:xjpc 四、输入电脑密码得到一张图片和一个压缩包,查看图片发现图片位置发生错误&a…

如何不下载软件来制作自己的网站

注意:本文使用Windows操作系统。如果你计算机的操作系统不是Windows,这篇文章对于你来说没有丝毫意义。 我们前几天介绍了如何建立一个自己的网站,虽然也有用,但是下载了许多软件。Windows系统就自带了一个名为IIS的软件&#xff…

能优化你的网站的网页制作软件

做一个网站也许并不是一件很难的事情,但是想做出漂亮而且极富个性的网站就不那么容易了。这里笔者就给大家介绍几款用于修饰和改造网页的软件,让你的主页效果更炫一些。 有声有色 “有声有色”是给网页添加Java特效的一款软件,它集合了518个十…

搭建个人网站软件安装

搭建个人网站软件安装(均在Root用户下完成) 系统环境为:Centos7.6 参考文献: 在CentOS 7系统上安装PHP 7.4版本的方法 解决CentOS中yum安装程序时出现的"Transaction check error"错误 Centos7下安装MySQL Centos 7下安装配置Nginx Ngi…