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文件进行修改,就可以做到增加修改删除测试用例,哪怕是第一次接手项目的人,可以编写测试用例进行测试

 

posted @ 2022-09-14 17:05  测试-13  阅读(227)  评论(0)    收藏  举报