IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Pytest学习笔记(20)-参数化parametrize结合allure.title()动态生成用例标题 -> 正文阅读

[Python知识库]Pytest学习笔记(20)-参数化parametrize结合allure.title()动态生成用例标题

前言

  • 使用参数化,allure报告默认的用例标题为用例名称,这样可读性较差
  • 参数化使用ids,也并不能完全解决问题(还是会保留用例名称)
  • 使用allure.title()装饰器写死标题的方式,用例维护成本较高
  • 所以希望能把parametrize参数化数据驱动结合title使用,下面会以登录用例为例来详细介绍

参数化默认的标题

代码
data_login = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]


@pytest.fixture()
def login(request):
    """登录fixture"""
    param = request.param
    print(f"账号是:{param['username']},密码是:{param['pwd']}")
    # 返回
    return {"code": 0, "msg": "success!"}


# 参数化默认的标题
@pytest.mark.parametrize("login", data_login, indirect=True)
def test_parametrize_without_title(login):
    assert login['code'] == 0
测试报告在这里插入图片描述

用例标题为方法名+参数化数据,可读性较差

参数化使用id

代码
data_login = [
    pytest.param({"username": "name1", "pwd": "pwd1"}, id="name1登录成功"),
    pytest.param({"username": "name2", "pwd": "pwd2"}, id="name2登录失败"),
    pytest.param({"username": "name3", "pwd": "pwd3"}, id="name3用户名不存在")
]


@pytest.fixture()
def login(request):
    """登录fixture"""
    param = request.param
    print(f"账号是:{param['username']},密码是:{param['pwd']}")
    # 返回
    return {"code": 0, "msg": "success!"}


# 参数化使用id
@pytest.mark.parametrize("login", data_login, indirect=True)
def test_parametrize_without_id(login):
    assert login['code'] == 0
测试报告在这里插入图片描述

使用pytest.param(id=xxx) 的方法只是将参数化的id自定义化,并未达到修改用例标题的效果

参数化+allure.title()写死标题

代码
data_login = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]

# 参数化+allure.title()写死标题
@allure.title("登录测试用例:name1成功,name2失败,name3用户名不存在")
@pytest.mark.parametrize("login", data_login, indirect=True)
def test_parametrize_without_id(login):
    assert login['code'] == 0
测试报告在这里插入图片描述
  • 达到了标题的效果
  • 但是三条用例的标题都相同,可见并不适合结合参数化使用
  • 且用例的标题都是写死到用例文件内,未实现数据和用例的解耦,可维护性较差

参数化使用ids

代码
# 数据驱动
data_login = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]
login_ids = ["name1登录成功", "name2登录失败", "name3用户名不存在"]


# 参数化使用ids
@pytest.mark.parametrize("login", data_login, ids=login_ids, indirect=True)
def test_parametrize_without_id(login):
    assert login['code'] == 0
测试报告在这里插入图片描述

效果和使用pytest.param(id=xxx) 的方法,完全一致,未达到预期效果

参数化+allure.title()动态生成标题

代码
data_login_with_fixture = [
    {"username": "name1", "pwd": "pwd1"},
    {"username": "name2", "pwd": "pwd2"},
    {"username": "name3", "pwd": "pwd3"}
]


# 参数化+allure.title()动态生成标题,结合fixture
@allure.title("登录用例-{login}")
@pytest.mark.parametrize("login", data_login_with_fixture, indirect=True)
def test_parametrize_without_id(login):
    assert login['code'] == 0


data_login_without_fixture = [
    ("name1", "123456", "name1 登录成功"),
    ("name2", "123456", "name2 登录失败"),
    ("name3", "123456", "name3 账号不存在")
]


# 参数化+allure.title()动态生成标题,不结合fixture
@allure.title("登录-{title}")
@pytest.mark.parametrize("username,pwd,title", data_login_without_fixture)
def test_parametrize_without_id(username, pwd, title):
    pass
测试报告在这里插入图片描述
小结
  • 如果有入参传入fixture,尽量不要使用title动态生成
  • 无上述条件,使用参数化+allure.title()可动态生成用例标题,更加灵活
  • 用例标题可以直接放到数据驱动内去维护,可维护性较高
  • 不会影响测试报告的可读性,可以看到和写死的title效果一致
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-02-26 11:26:58  更:2022-02-26 11:30:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 23:40:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码