Pytest的数据驱动DDT

1、ddt的语法:

@pytest.mark.parametrize("case", case_all) 是个装饰器,里面两个数据:

case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变

量;

cace注意要加引号,虽然是个变量 但是要加引号

后面的用例方法里的参数case都是必须要要跟这个装饰器

里的case名字一致。

运行结果:

几条用例数据就运行几条测试用例

就算前面的断言失败了,也依然会执行后续的用例。

python 复制代码
"""
1、ddt数据驱动的语法:
- @pytest.mark.parametrize("case", case_all) 是个装饰器,里面两个数据: case 和cases_all意思就是: 将cases_all里每个成员依次传递给case这个变量;
- cace注意要加引号,虽然是个变量 但是要加引号
- 后面的用例方法/函数里的参数case都是必须要要跟这个装饰器里的case名字一致。

运行结果:
几条用例数据就运行几条测试用例
就算前面的断言失败了,也依然会执行后续的用例。

2、ddt的2种实现形式:
第一种写法:函数形式用例 的数据驱动:
  - 写在函数上面,针对当前函数实现数据驱动。

第二种: 类形式测试用例的数据驱动:
  -写在方法上面,只针对当前方法实现数据驱动。
  -写在类上面也可以,会给类下面每个方法都进行数据驱动。
"""
# 登录的流程函数-开发代码
import pytest


def login(username, passwd):
    """登录的函数"""
    if username != "xxxn":
        return "用户名错误"
    if passwd != "xxx":
        return "密码错误"
    return "登录成功"


#功能模块的测试用例数据
case_all = [{"case_id": 1, "name": "lemon", "pwd": "1234567", "expect": "登录成功"},
            {"case_id": 2, "name": "lemon1", "pwd": "123456", "expect": "用户名错误"},
            {"case_id": 3, "name": "lemon", "pwd": "1234", "expect": "密码错误"}]

def test_login0():
    for case in case_all:
        case_id = case["case_id"]
        username = case["name"]
        password = case["pwd"]
        expect_result = case["expect"]
        actual_result = login(username, password)
        assert actual_result == expect_result
        print(f"执行了第{case_id}条用例")
# # pytest数据驱动,执行多条用例,输出不同结果
# # 第一种写法:函数形式用例 的数据驱动: - 写在函数上面,针对当前函数实现数据驱动。
@pytest.mark.parametrize("case", case_all)  # 将cases_all里每个成员依次传递给case这个变量;
def test_login(case):  # 再把这个case变量值传递给pytest用例函数,名字跟"case"一致。
    case_id = case["case_id"]
    username = case["name"]
    password = case["pwd"]
    expect_result = case["expect"]
    actual_result = login(username, password)
    assert actual_result == expect_result
    print(f"执行了第{case_id}条用例")


# 第二种: 类形式测试用例的数据驱动:
# @pytest.mark.parametrize("case", case_all)
# class TestLogin:
#     @pytest.mark.parametrize("case", case_all)
#     def test_login01(self, case):
#         case_id = case["case_id"]
#         username = case["name"]
#         password = case["pwd"]
#         expect_result = case["expect"]
#         actual_result = login(username, password)
#         assert actual_result == expect_result
#         print(f"执行了第{case_id}条用例")
#
#     @pytest.mark.parametrize("case", case_all)
#     def test_login02(self, case):
#         case_id = case["case_id"]
#         username = case["name"]
#         password = case["pwd"]
#         expect_result = case["expect"]
#         actual_result = login(username, password)
#         assert actual_result == expect_result
#         print(f"执行了第{case_id}条用例")
相关推荐
Harvy_没救了30 分钟前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
春风有信40 分钟前
【2026.05.01】Windows10安装Docker Desktop 4.71.0.0步骤及问题解决
运维·docker·容器
lzhdim1 小时前
SQL 入门 12:SQL 视图:创建、修改与可更新视图
java·大数据·服务器·数据库·sql
2401_873479402 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
守城小轩2 小时前
基于Chrome140的Yahoo自动化(关键词浏览)——需求分析&环境搭建(一)
运维·自动化·chrome devtools·浏览器自动化·指纹浏览器·浏览器开发
handler012 小时前
Linux 内核剖析:进程优先级、上下文切换与 O(1) 调度算法
linux·运维·c语言·开发语言·c++·笔记·算法
草履虫君4 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
日取其半万世不竭4 小时前
LVM 逻辑卷管理:不停机扩容磁盘的正确方式
运维·服务器
优化Henry4 小时前
TDD-LTE站点Rilink=3链路故障处理案例---BBU侧C口“有发光、无收光”的排查与恢复
运维·网络·信息与通信·tdd
浪客灿心4 小时前
Linux网络传输层协议
linux·运维·网络