您的位置:

DDT数据驱动Python

一、DDT数据驱动Python

DDT全称Data-Driven Tests,是基于Python语言写的数据驱动测试框架,可以通过参数化来进行测试数据的准备和自动化测试这两个流程. 它可以让测试人员仅通过不同的数据配置来测试同一个用例的不同情况,从而减少代码的重复量,增加测试用例的覆盖率和灵活性。

二、Python DDT数据驱动详解

DDT的核心思想是将测试数据和测试用例分离,测试数据可以由一些矩阵(Vector)和列表(List)组成,测试用例实现单元测试用例。在DDT中,测试数据是通过一个装饰器 @data 和一个参数装饰器 @unpack 来处理的。装饰器是Python语言中使函数拥有特殊功能的语法糖,使函数有了更多的功能。通过@data@unpack 装饰器就可以快速的为`test_xxxxxx` (`xxxxxx`表示你自己写的测试用例函数名)指定测试数据来进行自动化测试。下面是示例代码:


import unittest
from ddt import ddt, data, unpack

@ddt
class Test_Demo(unittest.TestCase):
    @data([1, 2], [3, 4], [5, 6])
    @unpack
    def test_add(self, a, b):
        result = a + b
        self.assertEqual(result, a + b)

三、Python数据驱动框架DDT

DDT是一个数据驱动框架,可以将测试数据集中在一个文件中,可以在单独的文件中创建以要测试函数名称命名的CSV、JSON、EXCEL等文件,在这些文件中存储要测试的数据。这样可以让代码结构更清晰,也更适合重复测试,因为我们可以只使用一部分数据对代码进行多次测试。这里给出一个CSV的示例代码:


1,2
3,4
5,6

Python代码中读取CSV数据:


import csv
temp = []
with open('data.csv', 'r', encoding='utf-8') as myfile:
    lines = csv.reader(myfile)
    for line in lines:
        temp.append(line)

四、Pytest DDT数据驱动

DDT对于Pytest来说也同样很重要,它可以使用 @pytest.mark.parametrize 装饰器来为测试用例指定测试数据,功能与@data,@unpack相同,下面是示例代码:


import pytest
@pytest.mark.parametrize("input1, input2, expect_output", [
    (3, 5, 8),
    (-2, 5, 3),
    (6, -3, 3),
])
def test_add(input1, input2, expect_output):
    result = input1 + input2
    assert result == expect_output

五、Python中DDT驱动

在使用python的时候,需要预先安装ddt模块。ddt是Python的单元测试框架,它可以针对不同的数据场景使同一个测试用例重复执行多次,并根据数据进行断言判断。下面是使用ddt的示例代码:


import unittest
from ddt import ddt, data, unpack

@ddt
class Test_Demo(unittest.TestCase):
    @data([1, 2], [3, 4], [5, 6])
    @unpack
    def test_add(self, a, b):
        result = a + b
        self.assertEqual(result, a + b)

六、DDT数据驱动的作用

DDT可以有效地减少代码的重复量,增加测试用例的覆盖率和灵活性。在实际的测试工作中,我们通常需要重复测试某个用例的多个不同测试数据,有时我们需要测试用例的所有参数都是变量,如果每个变量都重新写一个测试用例,会使代码变得非常冗长,很难维护。而使用数据驱动模块,我们可以使用一个测试用例和很多数据来测试不同的情况。

七、DDT数据驱动原理

DDT是如何实现数据驱动的呢?当我们使用 @data 装饰器时,我们可以在这个装饰器中设置(多)个测试用例数据,每组测试用例数据都会被传递给测试方法。测试系统会对测试方法及所传递的参数实例化,并进行调用。举个例子,我们传递了两组测试用例数据给测试方法test_add(a, b),那么test_add(a, b)就会被实例化两次,每次会传递一个测试用例数据,从而实现自动化测试多组数据变量化传参的目的。

八、DDT数据驱动模式

DDT有多种数据驱动模式:列表(List)、元组(Tuple)、字典(Dict)、嵌套列表和自定义类型。我们可以根据实际测试用例的需求来选择相应的数据驱动模式。下面给出一个元组和嵌套列表的实例:


@ddt
class Test_Demo(unittest.TestCase):
    @data((1,2), (3,4), (5,6))
    def test_add_tuple(self, value):
        result = sum(value)
        self.assertEqual(result, value[0]+value[1])
   
    @data([1,2], [3,4], [5,6])
    @unpack
    def test_add_list(self, a, b):
        result = a + b
        self.assertEqual(result, a + b)

九、DDT数据驱动YAML文件选取

除了CSV、JSON、EXCEL文件,DDT还支持从YAML文件中读取测试数据。YAML文件是一种数据格式,比CSV、JSON文件更为人类可读。下面给出一个YAML的测试数据文件:


- a: 1
  b: 2
- a: 3
  b: 4
- a: 5
  b: 6

Python代码中读取YAML数据:


import yaml
temp = []
with open('data.yaml', 'r', encoding='utf-8') as f:
    data = yaml.load(f)
    for item in data:
        temp.append((item.get('a'), item.get('b')))

以上就是DDT数据驱动Python的详细阐述,希望对你有所帮助。