python中DDT数据驱动的实现

 更新时间:2025年04月28日 09:31:22   作者:徐田垚  
DDT是一种软件测试方法,本文主要介绍了python中DDT数据驱动的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

DDT(Data-Driven Testing,数据驱动测试)是一种软件测试方法,通过外部数据源(如Excel、CSV、数据库等)驱动测试用例的执行。它的核心思想是将测试数据与测试逻辑分离,从而提高测试的灵活性和可维护性。

以下是关于DDT的详细介绍和实现方法:

1. DDT 的核心概念

  • 测试数据与逻辑分离:

    • 测试逻辑是固定的,而测试数据可以从外部文件或数据库中动态加载。

    • 数据可以是输入参数、预期结果或配置信息。

  • 数据源:

    • 常见的数据源包括:CSV文件、Excel文件、JSON文件、数据库、API等。

  • 测试用例动态生成:

    • 根据数据源中的每一行数据,动态生成一个测试用例。

2. DDT 的优点

  • 提高测试覆盖率:

    • 通过多组数据测试同一逻辑,覆盖更多场景。

  • 减少代码重复:

    • 测试逻辑只需编写一次,数据可以动态加载。

  • 易于维护:

    • 当测试数据变化时,只需修改数据源,而无需修改测试代码。

  • 支持复杂场景:

    • 可以通过大量数据组合测试边界条件和异常情况。

3. DDT 的实现方法

以下是使用 Python 实现 DDT 的几种常见方式:

方法 1: unittest 和 ddt 库

ddt 是一个 Python 库,专门用于数据驱动测试。

安装 ddt

pip install ddt

示例代码1:

import unittest
from ddt import ddt, data, unpack

@ddt
class TestMathOperations(unittest.TestCase):

    @data((1, 2, 3), (4, 5, 9), (10, -5, 5))
    @unpack
    def test_addition(self, a, b, expected_result):
        self.assertEqual(a + b, expected_result)

if __name__ == "__main__":
    unittest.main()

运行结果:

  • 每组数据会生成一个独立的测试用例。

示例代码2:

import requests
import unittest
from ddt import ddt, data
test_data = [
    {'method':'post', 'url':'http://www.jd.com'},
    {'method':'put', 'url':'http://www.jd.com'},
    {'method':'put', 'url':'http://www.jd.com'},
]
@ddt
class Test(unittest.TestCase):
    @data(*test_data)
    def test01(self, case):
        print('请求', type(case))
        res = requests.request(method=case['method'], url=case['url'])
        print(res)


if __name__ == '__main__':
    unittest.main()

运行结果:

请求 <class 'dict'>
<Response [200]>
请求 <class 'dict'>
<Response [200]>
请求 <class 'dict'>

<Response [200]>
Ran 3 tests in 0.423s

OK

方法 2:使用 pytest 和参数化

pytest 是一个功能强大的测试框架,支持数据驱动测试。

示例代码:

import pytest

# 测试数据
test_data = [
    (1, 2, 3),
    (4, 5, 9),
    (10, -5, 5)
]

@pytest.mark.parametrize("a, b, expected_result", test_data)
def test_addition(a, b, expected_result):
    assert a + b == expected_result

运行结果:

每组数据会生成一个独立的测试用例。

方法 3:从外部文件加载数据

可以从 CSV、Excel 或 JSON 文件中加载测试数据。

从 CSV 文件加载数据:

import csv
import pytest

def load_test_data_from_csv(file_path):
    test_data = []
    with open(file_path, newline='') as csvfile:
        reader = csv.reader(csvfile)
        next(reader)  # 跳过表头
        for row in reader:
            test_data.append(tuple(map(int, row)))  # 将数据转换为整数
    return test_data

test_data = load_test_data_from_csv("test_data.csv")

@pytest.mark.parametrize("a, b, expected_result", test_data)
def test_addition(a, b, expected_result):
    assert a + b == expected_result

CSV 文件示例 (test_data.csv):

a,b,expected_result
1,2,3
4,5,9
10,-5,5

从 JSON 文件加载数据:

import json
import pytest

def load_test_data_from_json(file_path):
    with open(file_path) as f:
        return json.load(f)

test_data = load_test_data_from_json("test_data.json")

@pytest.mark.parametrize("data", test_data)
def test_addition(data):
    assert data["a"] + data["b"] == data["expected_result"]

JSON 文件示例 (test_data.json):

[
    {"a": 1, "b": 2, "expected_result": 3},
    {"a": 4, "b": 5, "expected_result": 9},
    {"a": 10, "b": -5, "expected_result": 5}
]

4. DDT 的最佳实践

  • 数据源管理:

    • 将测试数据存储在外部文件中,便于维护和共享。

  • 数据格式标准化:

    • 使用统一的格式(如 CSV、JSON)存储测试数据。

  • 边界测试:

    • 在数据中包含边界值和异常值,确保测试覆盖全面。

  • 数据清理:

    • 在测试前后清理测试环境,避免数据污染。

  • 测试报告:

    • 生成详细的测试报告,记录每组数据的测试结果。

5. DDT 的应用场景

  • API 测试:

    • 使用多组输入参数测试 API 的响应。

  • UI 测试:

    • 使用多组数据测试表单提交、登录等功能。

  • 数据库测试:

    • 使用多组数据测试数据库查询和写入操作。

  • 性能测试:

    • 使用多组数据模拟不同负载场景。

到此这篇关于python中DDT数据驱动的实现的文章就介绍到这了,更多相关python DDT数据驱动内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Django的models模型的具体使用

    Django的models模型的具体使用

    这篇文章主要介绍了Django的models模型的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Flask框架路由和视图用法实例分析

    Flask框架路由和视图用法实例分析

    这篇文章主要介绍了Flask框架路由和视图用法,结合实例形式分析了Flask路由和视图相关原理、定义与使用方法,需要的朋友可以参考下
    2019-11-11
  • PowerShell的基本使用方法

    PowerShell的基本使用方法

    本文主要介绍了PowerShell的基本使用方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • pycharm中使用pyplot时报错MatplotlibDeprecationWarning

    pycharm中使用pyplot时报错MatplotlibDeprecationWarning

    最近在使用Pycharm中matplotlib作图处理时报错,所以这篇文章主要给大家介绍了关于pycharm中使用pyplot时报错MatplotlibDeprecationWarning的相关资料,需要的朋友可以参考下
    2023-12-12
  • 在python shell中运行python文件的实现

    在python shell中运行python文件的实现

    今天小编就为大家分享一篇在python shell中运行python文件的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-12-12
  • Python 定义只读属性的实现方式

    Python 定义只读属性的实现方式

    这篇文章主要介绍了Python 定义只读属性的实现方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • python 字符串常用方法超详细梳理总结

    python 字符串常用方法超详细梳理总结

    字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。本文为大家总结了Python中必备的31个字符串方法,需要的可以参考一下
    2022-03-03
  • 一文彻底讲透Python Pygame教程(非常详细)

    一文彻底讲透Python Pygame教程(非常详细)

    Python Pygame是一款专门为开发和设计2D电子游戏而生的软件包,是入门级游戏开发库,这篇文章主要介绍了Python Pygame教程的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-11-11
  • 如何实现Python编写的图形界面可以自由拖动

    如何实现Python编写的图形界面可以自由拖动

    我们使用python中的tkinter进行编程时,往往需要一种功能就是我们可以随意拖动这个界面,放置在任何位置,下面我们就来看看Python如何实现这一效果吧
    2024-11-11
  • 使用numba对Python运算加速的方法

    使用numba对Python运算加速的方法

    今天小编就为大家分享一篇使用numba对Python运算加速的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10

最新评论