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}条用例")
相关推荐
若尘拂风2 分钟前
centos 9 编译安装 rtpengine
linux·运维·centos
1024熙1 小时前
【Linux】——进程状态&&僵尸进程&&孤儿进程
linux·运维·服务器·进程·进程状态
PLUTO t2 小时前
Linux NFS、自动挂载与系统启动管理指南
linux·运维
对 酒 当 歌 人 生 几 何2 小时前
linux更换镜像源[CentOs]
linux·运维·centos
代码代码快快显灵2 小时前
SpringSecurity——前后端分离登录状态如何保持
服务器·状态模式·springsecurity
w23617346012 小时前
网络故障排查指南:分治法与排除法结合的分层诊断手册
运维·网络·windows·故障排查·故障排除
贝锐3 小时前
打造更高效的移动远控方案,贝锐向日葵Android主控SDK更新
运维
满满呀4 小时前
pytest基础学习
学习·pytest
真正的醒悟4 小时前
IRF拆除
运维·服务器·网络
Antonio9154 小时前
【Q&A】装饰模式在Qt中有哪些运用?
服务器·数据库·qt