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 自动化测试:登录、注册等功能模块,用不同账号、密码、角色组合来回归测试。
性能测试:模拟不同的用户数据输入场景。