自动化框架设计思想:
(1) 数据驱动测试:即英文单词Data-Driven Testing,简称DDT。
(2) 关键字驱动测试:即英文单词Keyword-Driven Testing,简称KDT。
(3) 业务流程测试:即英文单词Business Process Tesing,简称BPT。
(4) 页面对象模式:即英文单词Page Object Model,简称POM。
(5) 基于组件的测试:即英文单词Component-Based Testing,简称CBT。
本文介绍ddt数据驱动
1 DDT数据驱动
DDT(Date Driver Test),所谓数据驱动测试,简单来说就是由数据的改变从而驱动自动化测试的执行,最终引起测试结果的改变。通过使用数据驱动测试的方法,可以在需要验证多组数据测试场景中,使用外部数据源实现对输入输出与期望值的参数化,避免在测试中使用硬编码的数据,也就是测试数据和用例脚本代码分离。
DDT它其实就是一个装饰器,它会根据你传递进来的数据来决定要生成几个测试用例。
引入原因:许多数据集进行相同的测试。若一个用例一个测试集,则造成冗余,而且,每个数据集值创建不同的测试既耗时又效率低下
1.1 优点:
- 代码复用率高:一个测试逻辑只需要写一次,可以多条测试数据复用,同时提高测试脚本的编写效率。
- 异常排查效率高:根据测试数据,每条数据生成一条测试用例,用例相互分离,一条失败的情况下不会影响其他测试用例。
- 代码可维护性高:简洁明了的测试框架,利于其他同事阅读,提高代码的可维护性。
1.2 常用
@ddt
:装饰测试类@ddt
它做的事情其实就等同于这句代码:LoginTestCase = ddt(LoginTestCase)
,把具体的类名传给ddt,告诉ddt是这个测试用例类要使用数据驱动。
@data
:装饰测试用例-
@data
做的事情就是把测试数据作为一个参数传递给测试用例,一个数据对应生成一条测试用例,如果data里面有多个数据那么就对应生成多条测试用例。如果data里放的类似是元组、列表等这样的序列类型的数据,data会把他们当成是一个整体,即一个测试数据。 - 如果想一次传递多个参数给测试用例,需要自行在脚本中对数据进行分解或者使用
-
@unpack
:装饰测试用例@unpack
则是可以把序列类型的数据拆分为多个,以多个参数传给测试用例,但测试用例也需要定义同等数量的参数来接收。
1.3 @ddt
:装饰测试类步骤:
- 安装:pip install ddt
ddt导入 --安装:选择国内源 pip install -i https://mirrors.aliyun.com/pypi/simple --ddt导入时注意:项目当中不要有模块/文件命名成ddt ANS:重名到时引用的就是项目下的ddt模块,不是python的第三方包 --尽量不要重名
- 导入 import ddt
- 测试类加上:@ddt.ddt
- 需要进行数据驱动的方法上加:@ddt.data(*cases)
- 测试用例方法用参数接收:def test_login(self, case_info):
import unittest
import ddt
def add(x, y):
"""简单数字加减"""
if type(x) == int and type(y) == int:
return x + y
return None
#1 写用例,可以写到excel,此处简略用列表,要确保和excel读取一致
cases = [
{"x": 1,"y":2, "expected": 3},
{"x": 10,"y":3, "expected": 13},
{"x": -50,"y":2, "expected": -48}
]
#写测试用例方法
@ddt.ddt
class TestAdd(unittest.TestCase):
@ddt.data(*cases)
def test_add(self, case_info):
expected = case_info['expected']
actual = add(case_info['x'], case_info['y'])
self.assertEqual(expected, actual)
#TODO: 一定要在空白行运行,不然会出现no test 报错
if __name__ == '__main__':
unittest.main()