数据驱动 - ddt

数据驱动简单用法

1、为什么需要数据驱动?

数据文件中有多组数据,代码只有一份,代码数据分离,解耦合。

2、数据驱动含义

将代码与数据进行分离,单纯由数据组成文件,再由文件来驱动关键字,最终实现整个自动化的流程

3、驱动模式

数据驱动
关键字驱动
混合驱动模式(关键字驱动+数据驱动)
行为驱动

4、什么是ddt?

Data driver test(数据驱动测试)
特点:可以完美和应用于unittest框架实现数据驱动。

5、装饰器

装饰器:完成一种特定功能的函数(事务)
在python里面装饰器以@开头,并且装饰器有两种:类装饰器,函数装饰器

6、ddt模块组成

1)、一个类装饰器

  @ddt:表明该类调用ddt,必须装饰在TestCase的子类上,TestCase是Unittest框架中的一个基类

 *表示基于元组的形式进行处理,**表示字典,基于键值对的形式去获取

2)、两个方法装饰器

 @data:直接提供测试数据
 [@data([‘’,‘’],[‘’,‘’]) 以,分割]
 @ddt.data()可接受的数据格式:一组数据,每个数据为单个的值;多组数据,每组数据为一个列表或者一个字典。

 @file_data:从JSON或YAML文件加载测试数据

3)、ddt.unpack

 传递的是复杂的数据结构时使用,比如使用列表或者元组,添加unpack后,ddt会自动把元组或者列表对应到多个参数上

7、ddt的使用步骤

使用@ddt装饰你的测试类
使用@data或者@file_data装饰你需要数据驱动的测试方法

8、ddt使用

1)、ddt直接提供数据
2)、ddt使用函数提供数据

import ddt
import unittest

#2、调用函数中数据# 数据
def get_data():
    result = (['test1','test2'],['test3','test4'])
    return result

@ddt.ddt
class DdtData(unittest.TestCase):

    # 1、直接获取数据
    # @ddt.data([1,2],[2,3])
    # @ddt.unpack
    # def test_data(self,n,m):
    #     print(n+m)
    # def test1(self):
    #     print(1)



    @ddt.data(*get_data())
    @ddt.unpack
    def test01(self,test1,test2):
        # test1,test2 = result
        print(test1,test2)


if __name__ == '__main__':
    unittest.main()

数据驱动 - ddt_第1张图片
注意:

1、要在测试类上加@ddt.ddt,否则会报错:

“TypeError: test_add_department_1() missing 3 required positional arguments: ‘req_data’, ‘res_key’, and ‘res_value’”。

2、运行的时候光标的位置放在 test_2方法里面了,加了ddt后,运行时要先识别装饰的类。若将光标放在某一个方法后面的话,测试用例只会执行当前的方法,ddt识别不到类,就会报错。将光标放到外面,则运行通过,或者加main方法,再运行,也不会报错

报错信息:unittest-ddt报错AttributeError: type object ‘forTestDDT‘ has no attribute ‘test_2‘

3、调用@ddt.data()中数据时函数参数要与数据数量匹配

你可能感兴趣的:(python,python,开发语言)