ddt数据驱动+unittest分离测试脚本以及测试数据
数据驱动ddt
数据驱动ddt可以实现测试数据与测试脚本的分离,通过ddt来将测试数据加载到脚本中。采用数据驱动设计模式使一组数据对应一个测试用例,用例自动加载生成。
ddt 是第三方模块,需安装:
pip install ddt
DDT包含类的装饰器ddt和方法装饰器data
通常情况下,data中的数据按照一个参数传递给测试用例,如果data中含有多个数据,以元组,列表,字典等数据,需要自行在脚本中对数据进行分解或者使用unpack分解数据。
@ddt 类装饰器,用来标记当前类使用ddt数据驱动
@data 函数装饰器,用来给函数传递数据
@unpack 函数装饰器,用来对传递的数据进行解包,解列表、元组、字典
@file_data 函数装饰器,用来直接读取yaml,json格式的文件数据 读取获取的数据是字典列表
代码示例
承接关键字驱动的例子进行改动
之前测试代码如下:
from Web_Keys.Demo_Keys import Keys #实例化Keys keys = Keys('Chrome') keys.open('https://www.baidu.com/') keys.input('id','kw','测试') keys.click('id','su') keys.sleep(5) keys.quit()
如果在此代码上重新加一个测试用例(比如说,将输入框输入的文本改成"测试2"),那么只有2中方法
1、重新将整段代码copy下到下面,当做第二个用例执行,那么代码就显得很冗余
2、直接修改输入的参数值,会很快捷,但当新手第一次接手项目时,并不知道这个参数的实际含义,很难快速入手
这时候就可以将测试数据全部存放到yaml文件,再用ddt数据驱动去读取这个yaml文件,配合着unittest单元测试,以后只需要改动yaml文件中的相关参数值,就可以很方便的增加修改删除测试用例
测试数据文件keys.yaml如下:
-test01:
url: https://www.baidu.com/
input:
name: id
value: kw
txt: '测试1'
click:
name: id
value: su
time_: 2
-test02:
url: https://www.baidu.com/
input:
name: id
value: kw
txt: '测试2'
click:
name: id
value: su
time_: 5
测试脚本代码:
import unittest import ddt from Web_Keys.Demo_Keys import Keys #ddt装饰器 @ddt.ddt() #继承unittest.TestCase类 class Test_Case(unittest.TestCase): #方法前置:每个测试用例开始前执行,这里为实例化浏览器对象 def setUp(self) -> None: self.keys = Keys('Chrome') #方法后置:每个测试用例执行完成后执行,这里为关闭浏览器对象 def tearDown(self) -> None: self.keys.quit() #file_data直接读取yaml,json格式的文件数据,返回的类型为dict @ddt.file_data('./keys.yaml') def test_01(self,**kwargs): self.keys.open(kwargs['url']) self.keys.input(**kwargs['input']) self.keys.click(**kwargs['click']) self.keys.sleep(kwargs['time_']) if __name__ == '__main__': unittest.main()
之后只需要对yaml文件进行修改,就可以做到增加修改删除测试用例,哪怕是第一次接手项目的人,可以编写测试用例进行测试