zoukankan      html  css  js  c++  java
  • 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/   谢谢!!******* 

  • 相关阅读:
    2020-06-20 助教一周小结(第十七周)
    2020-06-14 助教一周小结(第十六周)
    2020-06-7助教一周小结(第14周)
    2020本科校招-从小白到拿到30k offer的学习经历
    2020-05-24助教一周小结(第13周)
    2020-05-17 助教一周小结(第十二周)
    2020-05-10 助教一周小结(第十一周)
    2020-05-04 助教一周小结(第十周)
    2020-04-26 助教一周小结(第九周)
    Ngnix搭建静态网页和安装wordpress
  • 原文地址:https://www.cnblogs.com/shouhu/p/12157840.html
Copyright © 2011-2022 走看看