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()
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()中数据时函数参数要与数据数量匹配