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