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代码的更多相关文章

  1. python:unittest之discover()方法批量执行用例

    自动化测试过程中,自动化覆盖的功能点和对应测试用例之间的关系基本都是1 VS N,如果每次将测试用例一个个单独执行,不仅效率很低, 无法快速反馈测试结果,而且维护起来很麻烦.在python的单元测试框 ...

  2. PHP mysqli 增强 批量执行sql 语句的实现代码

    本篇文章介绍了,在PHP中 mysqli 增强 批量执行sql 语句的实现代码.需要的朋友参考下. mysqli 增强-批量执行sql 语句 <?php //mysqli 增强-批量执行sql ...

  3. python接口自动化(二十六)--批量执行用例 discover(详解)

    简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...

  4. python自动化-unittest批量执行用例(discover)

    前言 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到unittet里面的discover方法来加载用例了. 加载用例后,用unittest里面的Text ...

  5. python中 try、except、finally 的执行顺序

        def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return ...

  6. unittest中diascover批量执行用例

    # case_dir='./'#当前脚本的路径 # discover=unittest.defaultTestLoader.discover(case_dir,pattern='unittest_fr ...

  7. python中 try、except、finally 的执行顺序(转)

    def test1(): try: print('to do stuff') raise Exception('hehe') print('to return in try') return 'try ...

  8. 批量执行用例,且结果显示在html中,python控制台也会显示运行过程

    下载HTMLTestRunner.py放到python安装目录的Lib下: 如下以登录为例,创建不同的.py文件, ========================================== ...

  9. python 中 try,except,finally 的执行顺序

    写代码的时候发现了好玩的事情,常常作为终止的 return 语句并不总是能够立刻跳出函数 def A(): try: for i in range(10): if i == 5: return pri ...

随机推荐

  1. 图论初步<蒟蒻专属文章>

    前言:    图论乃noip之重要知识点,但有点难理解 本人因此吃过不少亏 因为本人实在太弱,所以此篇乃正宗<蒟蒻专属文章> 正文:(本文仅介绍图论中的重点.难点,其余部分略将或不讲) 图 ...

  2. ubuntu14 安装Express及简单应用

    参考资料 [1] 基于Express的Hello World实例 Express 是一个基于 Node.js 平台的极简.灵活的 web 应用开发框架. 1. 环境 工具名 版本 nodejs v11 ...

  3. request-html

    目录 基本使用 获取链接( links 与 absolute_links ) CSS 选择器与 XPATH 支持 JavaScript 自定义 User-Agent 模拟表单提交(POST) asyn ...

  4. css 图形样式

    参考:https://css-tricks.com/examples/ShapesOfCSS/

  5. English-Phonics

    English-Phonics 1. 音节 1.1 字组 1.2 音节概述及分类 1.3 音节的划分 2. 元音字组的自然发音 2.1 元音字母 2.2 元音字母的长音 2.3 元音字母+r 2.4 ...

  6. Android反编译与防止反编译

    1.Android反编译      1)下载两个工具  dex2jar,jar2java,相关阅读下载见:http://www.linuxidc.com/Linux/2011-02/32775.htm ...

  7. java有参

    一.带参数的方法 语法: 访问修饰符  方法返回值类型   方法名称 (参数列表){ // 方法体 注意:每个参数之间用","分割 二.形参和实参 形参:在方法定义时指定的参数 实 ...

  8. 标准查询运算符---LINQ

    Where 根据给定的谓词对序列进行过滤 Select 指定要包含一个对象或对象的一部分 SelectMany 一种查询类型,返回集合的集合.该方法将这些结果合并为一个单独的集合 Take 接受一个输 ...

  9. python 中常见的异常类型汇总

    异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 KeyboardInterrupt 用户中断执行(通常是输入^C) Exception 常规错误的基类 ...

  10. 使用FFmpeg处理视频文件:视频转码、剪切、合并、播放速调整

    安装 略. 转码 最简单命令如下: ffmpeg -i out.ogv -vcodec h264 out.mp4ffmpeg -i out.ogv -vcodec mpeg4 out.mp4ffmpe ...