Python 中使用 ddt 来进行数据驱动,批量执行用例,修改ddt代码
1. 什么是数据驱动? 使用数据驱动有什么好处?
用例执行是靠数据来驱动的,每条测试用例除了测试数据不一样意外,所有的用例代码都是一样的,为了使用例批量执行,我们会使用数据驱动的思想来批量执行测试用例;
好处:
批量的执行测试用例,提高执行的测试效率;数据与脚本分离,测试数据需要修改时,代码不需要修改,只需要修改Excel文件的数据即可;
2. 数据驱动作用:
根据用例的数量来自动生成实例方法, 批量执行用例
from ddt import ddt, data
from Python_0722_handle_config.handle_excel import HandleExcel # Excel文件处理类 do_excel = HandleExcel("cases.xlsx", "multiply")
cases = do_excel.get_cases() # cases 为嵌套字典的列表 @ddt # ddt和data是黄金搭档, 要一起使用才行
class TestMulti(unittest.TestCase): # 在文件中获取测试用例,*cases()进行拆包,自动创建用例名称:test_negative_multiply + 01
# *cases 拆包后,会有四个字典,相当于data的位置参数,先去第一个位置参数给one_case
# 1. 每迭代一次,会创建不同的实例方法;自动加01,用于遍历执行所有测试用例
# 1. 创建实例方法, 用于执行一条测试用例,一定要以test_开头
@data(*cases)
def test_negative_multiply(self, one_case):
。。。。。。。。
。。。。。。。
其他代码
ddt总结:
- 执行了多少条用例, 用例执行的条数与data装饰器的(位置)参数的个数一致,每执行一条用例, 会自动将一个参数传给one_case, 当最后一个参数传给one_case, 且用例执行结束之后, 程序就会执行完毕
- ddt和data是黄金搭档, 要一起使用才行
4. 复制 ddt 源码另存为,不建议在源码上修改
修改 ddt 源码107行,测试报告中的用例名不明确test_negative_multiply_01
作用:
如果数据是字典,则获取字典当中的title对应的值,加到HTML测试报告名称中
# 修改大概源码107行的这个方法
def mk_test_name(name, value, index=0):
"""
name:用例名/实例方法名
value:用例数据字典
""" # Add zeros before index to keep order
index = "{0:0{1}}".format(index + 1, index_len) # 注释下面两行
# if not is_trivial(value):
# return "{0}_{1}".format(name, index) # 添加对字典数据的处理
# 判断如果不是字典类型,条件就不满足;value不是字典类型则为假,就不会按原来拼接
if not is_trivial(value) and not isinstance(value, dict):
return "{0}_{1}".format(name, index) # 如果数据是字典,则获取字典当中的title对应的值,加到测试用例名称中
if isinstance(value, dict):
try:
# 取出title值
value = value["title"]
except KeyError:
return "{0}_{1}".format(name, index) try:
value = str(value) # 把title转换为字符串类型
except UnicodeEncodeError:
# fallback for python2
value = value.encode('ascii', 'backslashreplace') # value是title名称
test_name = "{0}_{1}_{2}".format(name, index, value) # 用例名称拼接
return re.sub(r'\W|^(?=\d)', '_', test_name)
*******请大家尊重原创,如要转载,请注明出处:转载自:https://www.cnblogs.com/shouhu/ 谢谢!!*******
Python 中使用 ddt 来进行数据驱动,批量执行用例,修改ddt代码的更多相关文章
- python:unittest之discover()方法批量执行用例
自动化测试过程中,自动化覆盖的功能点和对应测试用例之间的关系基本都是1 VS N,如果每次将测试用例一个个单独执行,不仅效率很低, 无法快速反馈测试结果,而且维护起来很麻烦.在python的单元测试框 ...
- PHP mysqli 增强 批量执行sql 语句的实现代码
本篇文章介绍了,在PHP中 mysqli 增强 批量执行sql 语句的实现代码.需要的朋友参考下. mysqli 增强-批量执行sql 语句 <?php //mysqli 增强-批量执行sql ...
- python接口自动化(二十六)--批量执行用例 discover(详解)
简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...
- python自动化-unittest批量执行用例(discover)
前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...
- python中 try、except、finally 的执行顺序
def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return ...
- unittest中diascover批量执行用例
# case_dir='./'#当前脚本的路径 # discover=unittest.defaultTestLoader.discover(case_dir,pattern='unittest_fr ...
- python中 try、except、finally 的执行顺序(转)
def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return 'try ...
- 批量执行用例,且结果显示在html中,python控制台也会显示运行过程
下载HTMLTestRunner.py放到python安装目录的Lib下: 如下以登录为例,创建不同的.py文件, ========================================== ...
- python 中 try,except,finally 的执行顺序
写代码的时候发现了好玩的事情,常常作为终止的 return 语句并不总是能够立刻跳出函数 def A(): try: for i in range(10): if i == 5: return pri ...
随机推荐
- 【快学springboot】使用springboot发送邮件
前言 在实际项目中,经常需要用到邮件通知功能.比如,用户通过邮件注册,通过邮件找回密码等:又比如通过邮件发送系统情况,通过邮件发送报表信息等等,实际应用场景很多.这篇文章,就教大家通过springbo ...
- pycharm安装报错Non-zero exit co?
pycharm安装第三方库时报错Non-zero exit co? 原因:版本找不到 解决思路: 1.用pip install pandas报错,尝试用python -m pip install -- ...
- URL构成及各个协议默认端口
url的构成:一般来说,http请求都会和URL地址有关,对于url来说一般由下面5个部分构成 .协议:通常就是第一个冒号之前的内容常见协议:http,https(http+ssl),ftp,ssh, ...
- 【jmeter】NO-GUI模式运行的过程及报错解决方法(转)
1.什么都不需要设置(若非得想配置点什么的话,那请看备注) 2.将脚本抛到Linux里 3.执行 jmeter -n -t /opt/day7_buildbug.jmx -l result.jtl - ...
- 2_03_MSSQL课程_查询_分组和连接
“查” 的三种查询语句 where Group by having where 对表起作用 (原始硬盘上的表) 单纯的表 having 对结果起作用(筛选) 缓存,不在文件中 select --第 ...
- Linux和云供应商Red Hat被IBM以34亿美元的价格收购
导读 今天的主题包括IBM以340亿美元收购Red Hat,人性化是使人工智能成功的关键.两家公司于10月28日宣布,IBM正以340亿美元的价格收购Linux和云技术供应商Red Hat,以期改变云 ...
- Zookeeper集群搭建(单机多节点,伪集群,docker-compose集群)
Zookeeper介绍 原理简介 ZooKeeper是一个分布式的.开源的分布式应用程序协调服务.它公开了一组简单的原语,分布式应用程序可以在此基础上实现更高级别的同步.配置维护.组和命名服务.它的设 ...
- CMake查找第三方库路径
问题 一直都有一个问题,就是基于Windows下使用CMake构建VS工程时,CMake是如何查找到第三方库所在的路径的呢? 答案 今天重新想起这个问题,就拿构建Vtk的VS工程测试了一下, 才发现是 ...
- class中static总结-静态成员函数和静态成员变量
C++规定const静态类成员可以直接初始化,其他非const的静态类成员需要在类声明以外初始化,我们一般选择在类的实现文件中初始化,初始化的方式是书写一遍类型的定义: //A.cpp ); //使用 ...
- luogu P2765 魔术球问题
题目中没有说球的上限是多少,只告诉了柱子,那么我们就应该以柱子为界去增加球,考虑将每两个能组成完全平方数的点连边,就形成了一个DAG(有向无环图),由于是DAG,可以转换为最小覆盖问题,即最多有n条路 ...