1.什么是数据驱动

数据驱动(Data-Driven Testing, DDT) 是一种软件测试思想和方法。
核心理念是:把测试逻辑和测试数据分离,让同一段测试代码可以在不同的数据输入下重复执行。

在传统的测试中,测试数据往往是直接写死在用例里的,比如:

def test_login():
    username = "admin"
    password = "123456"
    assert login(username, password) == "success"

这样写,代码和数据耦合,想要多测几组数据就要写多个类似用例。

而在数据驱动的模式下,测试数据独立存储,可能在 Excel、CSV、JSON、数据库或配置文件里,测试逻辑只负责读取这些数据并运行。例如:

import pytest

@pytest.mark.parametrize("username,password,expected", [
    ("admin", "123456", "success"),
    ("admin", "wrongpass", "fail"),
    ("guest", "123456", "fail")
])
def test_login(username, password, expected):
    assert login(username, password) == expected

这样,测试逻辑只写一遍,输入数据可以无限扩展,达到 数据驱动测试 的效果。

2.数据驱动的好处

  • 复用性高:一份测试代码可以覆盖多组测试数据。

  • 易维护:修改测试场景时,只需要改测试数据文件,不必改动逻辑。

  • 覆盖面广:通过组合不同的数据,快速扩展测试覆盖。

  • 与自动化结合紧密:适合 Web UI、接口测试等自动化脚本开发。

3.数据驱动常用的方式

  • 代码参数化(pytest.mark.parametrize)
    直接在测试框架里用参数化方法。

  • 外部数据文件

    • Excel / CSV:业务人员也能维护数据,常见于企业项目。

    • JSON / YAML:常用于接口测试,结构清晰。

    • 数据库:适合大量测试数据或动态数据。

  • 结合 PO 模式
    Page Object(页面对象)模式 里,页面操作封装在 PO 类中,数据通过数据驱动提供,这样既分离了页面逻辑,也分离了数据,使框架更清晰。

4.应用场景

  • 接口测试:同一个 API 用不同的请求参数、请求体去验证响应。

  • Web UI 自动化测试:登录、注册等功能模块,用不同账号、密码、角色组合来回归测试。

  • 性能测试:模拟不同的用户数据输入场景。