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  

关键点解释

  1. YAML 数据解析:使用 PyYAML 读取 YAML 文件,返回字典或列表。safe_load 防止解析恶意代码。
  2. DDT 装饰器:@data(*load_test_data(...)) 将 YAML 数据列表展开为多个测试参数。@unpack 将字典解包为关键字参数(如 name, username 等)。
  3. 测试用例命名:DDT 自动生成用例名称(如 test_login_0_登录成功),便于调试。
  4. 扩展性:只需修改 YAML 文件即可添加新测试场景,无需修改测试代码。

进阶优化

  • 参数化异常场景:
  • 多层级 YAML 结构:
  • 结合 pytest:使用 pytest.mark.parametrize 替代 ddt,更灵活:

通过 YAML + DDT,可以实现 测试数据与代码分离,提升测试可维护性和可读性。

进阶高级测试工程师 文章被收录于专栏

《高级软件测试工程师》专栏旨在为测试领域的从业者提供深入的知识和实践指导,帮助大家从基础的测试技能迈向高级测试专家的行列。 在本专栏中,主要涵盖的内容: 1. 如何设计和实施高效的测试策略; 2. 掌握自动化测试、性能测试和安全测试的核心技术; 3. 深入理解测试驱动开发(TDD)和行为驱动开发(BDD)的实践方法; 4. 测试团队的管理和协作能力。 ——For.Heart

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务