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}条用例")
相关推荐
Brilliantwxx8 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
不怕犯错,就怕不做8 小时前
git prune 自动删除本地记录中那些远程已经不存在的分支引用
linux·服务器·git
richdata8 小时前
商品数字化不是先做大数据,而是先把数据变成可用决策
大数据·运维·数据治理·商品数字化·智能补货·ai商品决策
weixin_416667969 小时前
【无标题】
运维·服务器·网络
一池秋_10 小时前
arm低配linux设备,桌面应用冷启动提速方法
linux·运维·arm开发
上海云盾-小余11 小时前
流量攻击复盘:为什么 WAF 完好,业务依旧瘫痪
运维·服务器·网络
IT大白鼠11 小时前
Docker 私有仓库管理:Harbor 企业级仓库搭建与镜像全生命周期管理
运维·docker·容器
戴西软件12 小时前
戴西iDWS.3DViz Suite数据轻量化可视化软件,从传统桌面软件向云端协同的重大突破
大数据·运维·网络·人工智能·机器学习·3d
我命由我1234513 小时前
Linux - Linux/POSIX 路径斜杠折叠规则
linux·运维·服务器·android studio·android jetpack·android-studio·android runtime
姚不倒13 小时前
Nginx 反向代理:5 种负载均衡策略与实战
运维·nginx·负载均衡