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}条用例")
相关推荐
liliangcsdn4 分钟前
linux pip/conda 修改默认cache位置
linux·运维·pip
mortimer38 分钟前
记一次网站服务器无缝扩容:利用软链接实现零停机数据迁移
linux·运维
Dontla1 小时前
docker desktop入门(docker桌面版)(提示wsl版本太低解决办法)
运维·docker·容器
悟能不能悟1 小时前
文件同步神器-rsync命令讲解
服务器·网络
没有bug.的程序员2 小时前
《Spring Boot应用工程化提升:多模块、脚手架与DevTools》
java·运维·spring boot
大山运维2 小时前
免费非常好用的录屏软件,体积小
运维
huangyuchi.2 小时前
【Linux】环境变量
linux·运维·操作系统·环境变量·系统调用·命令行参数·main函数参数
Crazy________5 小时前
28Rsync免密传输与定时备份
linux·运维·服务器
阿巴~阿巴~6 小时前
信号产生机制全解析:从硬件异常到软件触发的深度探索
linux·运维·服务器
sky北城8 小时前
linux基本系统服务——DNS服务
linux·运维·服务器