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/   谢谢!!*******

最新文章

  1. Centos 使用YUM安装MariaDB
  2. jQuery innerWidth outerWidth(false/true)
  3. ant学习简单例子
  4. [原创]VM虚拟机安装centos6.4详细图文教程
  5. 为C# Windows服务添加安装程序
  6. Android-Activity生命周期从onStart直接到onStop
  7. 去掉chrome记住密码后自动填充表单的黄色背景
  8. 【Android基础】listview控件的使用(4)-----自定义布局的listview的使用
  9. Angular2的模块架构浅谈
  10. [LeetCode] Friend Circles 朋友圈
  11. Struts2【OGNL、valueStack】就是这么简单
  12. [Swift]LeetCode137. 只出现一次的数字 II | Single Number II
  13. vue(2)—— vue简单语法运用,常用指令集
  14. Ocelot中文文档-Not Supported
  15. Wannafly挑战赛25 B.面积并
  16. angularjs 依赖注入原理与实现
  17. How to use the windows active directory to authenticate user via logon form 如何自定义权限系统,使用 active directory验证用户登录
  18. python虚拟环境--virtualenv和virtualenvwrapper
  19. 1.Bootstrap简介
  20. 汕头市队赛SRM 20 T1魔法弹

热门文章

  1. Java学习第一周心得体会
  2. 【快学springboot】在springboot中写单元测试
  3. shell脚本中 “set -e” 的作用
  4. INUX下抓取当前登录用户登录密码的工具:mimipenguin
  5. 深入 Laravel 资料
  6. java虚拟机之内存分配
  7. 吴裕雄--天生自然JAVA数据库编程:使用元数据分析数据库
  8. 设置zabbix (3.4.2)添加监控项,触发器,让CPU使用超过85%就报警:
  9. 并行执行 Job【转】
  10. 使用PYaudio录制音频和视频(自己)