YAML 文件实现 DDT(数据驱动测试)
以下是使用 YAML 文件实现 DDT(数据驱动测试) 的详细步骤和示例,基于 Python 的 ddt 库和 PyYAML 解析器。
1. 安装依赖库
pip install ddt PyYAML
2. 创建 YAML 测试数据文件
创建 test_data.yaml,定义测试数据:
test_cases:
- name: "登录成功"
username: "user1"
password: "pass123"
expected: "success"
- name: "密码错误"
username: "user2"
password: "wrong_pass"
expected: "fail"
- name: "空用户名"
username: ""
password: "pass123"
expected: "error"
3. 编写测试脚本
创建测试文件 test_login.py,读取 YAML 数据并驱动测试:
import unittest
import yaml
from ddt import ddt, data, unpack
# 读取 YAML 文件
def load_test_data(file_path):
with open(file_path, 'r') as f:
data = yaml.safe_load(f)
return data['test_cases']
@ddt
class TestLogin(unittest.TestCase):
@data(*load_test_data('test_data.yaml')) # 加载 YAML 数据
@unpack # 解包字典为关键字参数
def test_login(self, name, username, password, expected):
print(f"Running test case: {name}")
# 调用实际登录逻辑(示例用伪代码)
result = self.login(username, password)
self.assertEqual(result, expected)
def login(self, username, password):
# 实际登录逻辑(示例仅模拟)
if username == "user1" and password == "pass123":
return "success"
elif not username:
return "error"
else:
return "fail"
if __name__ == '__main__':
unittest.main()
4. 执行测试
运行测试脚本,自动生成多个测试用例:
python -m unittest test_login.py -v
输出结果示例:
test_login_0_登录成功 (test_login.TestLogin) ... ok test_login_1_密码错误 (test_login.TestLogin) ... ok test_login_2_空用户名 (test_login.TestLogin) ... ok
关键点解释
- YAML 数据解析:使用 PyYAML 读取 YAML 文件,返回字典或列表。safe_load 防止解析恶意代码。
- DDT 装饰器:@data(*load_test_data(...)) 将 YAML 数据列表展开为多个测试参数。@unpack 将字典解包为关键字参数(如 name, username 等)。
- 测试用例命名:DDT 自动生成用例名称(如 test_login_0_登录成功),便于调试。
- 扩展性:只需修改 YAML 文件即可添加新测试场景,无需修改测试代码。
进阶优化
- 参数化异常场景:
- 多层级 YAML 结构:
- 结合 pytest:使用 pytest.mark.parametrize 替代 ddt,更灵活:
通过 YAML + DDT,可以实现 测试数据与代码分离,提升测试可维护性和可读性。
进阶高级测试工程师 文章被收录于专栏
《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart
查看10道真题和解析