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}条用例")
相关推荐
Murphy_lx17 分钟前
Linux系统--信号(4--信号捕捉、信号递达)陌生概念篇
linux·运维·服务器
weixin_4050233724 分钟前
使用docker 安装部署easy-mock
运维·docker·容器
Asuncion00725 分钟前
Docker核心揭秘:轻量级虚拟化的革命
服务器·开发语言·docker·云原生
ZLRRLZ25 分钟前
【Docker】Docker Image(镜像)
运维·docker·容器
焱焱枫1 小时前
Linux疑难杂症诊断利器:深入解析 fuser 命令
linux·运维·服务器
Andya_net1 小时前
Java | 基于redis实现分布式批量设置各个数据中心的服务器配置方案设计和代码实践
java·服务器·分布式
博语小屋1 小时前
Linux进程信号(壹)_产生信号
linux·运维·服务器
元亓亓亓1 小时前
考研408--计算机网络--day1-概念&组成功能&三种交换技术&分类
服务器·计算机网络·考研
养海绵宝宝的小蜗2 小时前
Linux 例行性工作任务(定时任务)知识点总结
linux·运维·服务器
乌萨奇也要立志学C++2 小时前
【Linux】基础IO(二)深入理解“一切皆文件” 与缓冲区机制:从原理到简易 libc 实现
linux·运维·服务器