python自动化-数据驱动,ddt模块

前言

数据驱动,顾名思义就是用数据驱动测试用例的执行,那为什么要用数据驱动的模式呢?它的优势有哪些呢?

  • 减少代码冗余,同一个测试场景只需要编写一次,不需要针对每一组测试数据来写一个测试方法。
  • 代码复用率高,不同的数据可以用同一个测试方法执行。
  • 代码的可维护性高,清晰的测试框架,数据和代码分离,实现解耦合,增加了代码的可维护性。

正文

前面有讲到使用excel来存放测试数据openpyxl操作excel,实现测试数据参数化,拿到数据后可以通过循环读取每一行的测试数据,也能顺利通过数据执行测试,但是这样处理存在两个问题:

  • 读取excel数据通过for循环取数据进行参数化,如果中间有断言异常,就会跳出for循环,导致无法继续执行下面的用例。
  • unittest框架是根据test开头的方法数来计算用例总数的,如果一个test方法对应多组测试数据,那么在循环多次后实际上方法只进入了一次,导致用例数统计不准确。
DDT模块

为了解决上面提到的这两个问题,就需要使用DDT模块了,DDT会根据data装饰器中位置参数的个数自动创建多个实例方法。

DDT组成
  1. DDT由一个类装饰器(ddt)和两个方法装饰器(data,file_data)组成:

    • ddt.ddt:用于继承unittest模块中TestCase类的子类(也就是你的测试类)

    • ddt.data:装饰器用于需要引入数据的测试方法,往往data中的参数个数和测试方法所需的数据一样多,如果是多组数据,比如读取excel的数据是一个嵌套字典的字典,会被识别为一条数据,如果是一行一行的传到测试方法中,就需要将其进行拆包。

    • file_data装饰器可以从json或yaml文件中获取测试数据。

      注意,如果文件是以“.yml”或者".yaml"结尾,ddt会作为yaml类型处理,其他文件都会作为json文件处理。

      如果文件是列表,列表的值会作为测试用例参数,同时,会作为测试用例方法名后缀显示。

      如果文件是字典,字典的key会作为测试用例方法的后缀显示,字典的value会作为测试用例参数

    • ddt.unpack 的作用是把参数中 元祖 或者 列表 的元素对应到多个参数上,没有加 ddt.unpack 表示把元组 或者 列表本身当成一个参数传入。

  2. 测试用例方法名生成规则

    使用ddt后,会产生一个新的测试用例方法名,即定义的测试用例方法名,比如:def test_one(),这里就是test_one。

    data:如果传递过来的数据存在__ name__ 属性,则这里就是该数据的__ name__ 值。如果未定义__ name__ 属性,ddt会尽量将传递过来的值转化为python标识符,作为data显示。比如:(1,3)就转为1_3。需要注意的是,如果数据是字典,则这里就是字典的key。

DDT安装

pip为pyton的第三方库,可以直接用pip安装

pip install ddt
DDT应用
  1. 测试用例需要一条数据

    from ddt import ddt, data, unpack
    import unittest
    
    
    @ddt
    class TestCase(unittest.TestCase):
        
        @data(一条数据)
        def test_1(self, a):
            print(a)
    

    运行结果:

    一条数据
    test_1_1_一条数据 (__main__.TestCase) ... ok
    
  2. 测试用例需要多组一条数据

    from ddt import ddt, data, unpack
    import unittest
    
    
    @ddt
    class TestCase(unittest.TestCase):
    
        @data(1, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值