pytest测试报告Allure - 动态生成标题生成功能、添加用例失败截图

一、动态生成标题

默认 allure 报告上的测试用例标题不设置就是用例名称,其可读性不高;当结合 @pytest.mark.parametrize 参数化完成数据驱动时,如标题写死,其可读性也不高。

那如果希望标题可以动态的生成,采取的方案是:

参数化 @pytest.mark.parametrize + @allure.title()

1.1、示例一:参数化无标题

1、创建
test_allure_title_parametrize.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import pytest
import allure@pytest.fixture()
def login(request):"""登录"""param = request.paramprint(f"用户名:{param['username']},密码:{param['password']}")# 返回return {"code": 0, "msg": "登陆成功"}datas = [{"username": "name1", "password": "pwd1"},{"username": "name2", "password": "pwd2"},{"username": "name3", "password": "pwd3"}
]@allure.story('登录功能')
@pytest.mark.parametrize('login', datas, indirect=True)
def test_login(login):"""登录测试用例"""assert login['code'] == 0

2、输入命令运行:

pytest test_allure_title_parametrize.py --alluredir=./allure
allure serve allure

如图所示:用例标题就是函数名+参数化的数据

1.2、示例二:参数化有标题

1、创建
test_allure_title_parametrize2.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import pytest
import allure@pytest.fixture()
def login(request):"""登录"""param = request.paramprint(f"用户名:{param['username']},密码:{param['password']}")# 返回return {"code": 0, "msg": "登陆成功"}datas = [{"username": "name1", "password": "pwd1"},{"username": "name2", "password": "pwd2"},{"username": "name3", "password": "pwd3"}
]@allure.story('登录功能')
@allure.title('登录测试用例')
@pytest.mark.parametrize('login', datas, indirect=True)
def test_login(login):"""登录测试用例"""assert login['code'] == 0

 2、输入命令运行:

pytest test_allure_title_parametrize2.py --alluredir=./allure
allure serve allure

 

 

1.3、示例三:参数化使用ids

1、创建
test_allure_title_parametrize3.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import pytest
import allure@pytest.fixture()
def login(request):"""登录"""param = request.paramprint(f"用户名:{param['username']},密码:{param['password']}")# 返回return {"code": 0, "msg": "登陆成功"}datas = [{"username": "name1", "password": "pwd1"},{"username": "name2", "password": "pwd2"},{"username": "name3", "password": "pwd3"}
]ids = ["name1,pwd1","name2,pwd2","name3,pwd3"
]@allure.story('登录功能')
@pytest.mark.parametrize('login', datas, ids=ids, indirect=True)
def test_login(login):"""登录测试用例"""assert login['code'] == 0

2、输入命令运行:

pytest test_allure_title_parametrize3.py --alluredir=./allure
allure serve allure

 如图所示:用例标题就是函数名+ids

 

1.4、示例四:参数化动态生成标题

1、创建
test_allure_title_parametrize4.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import pytest
import allure@pytest.fixture()
def login(request):"""登录"""param = request.paramprint(f"用户名:{param['username']},密码:{param['password']}")# 返回return {"code": 0, "msg": "登陆成功"}data1 = [{"username": "name1", "password": "pwd1"},{"username": "name2", "password": "pwd2"},{"username": "name3", "password": "pwd3"}
]data2 = [("admin1", "123456"),("admin2", "123456"),("admin3", "123456")
]@allure.story('字典参数化')
@allure.title('登录测试用例1-{dict}')
@pytest.mark.parametrize('dict', data1)
def test_login1(dict):"""登录测试用例1"""print(dict['username'], dict['password'])@allure.story('传值进fixture')
@allure.title('登录测试用例2{login}')
@pytest.mark.parametrize('login', data1, indirect=True)
def test_login2(login):"""登录测试用例2"""assert login['code'] == 0@allure.story('分别传值')
@allure.title('登录测试用例3-用户名:{username}-密码:{password}')
@pytest.mark.parametrize('username, password', data2)
def test_login3(username, password):"""登录测试用例3"""print(username, password)

2、输入命令运行:

pytest test_allure_title_parametrize4.py --alluredir=./allure
allure serve allure

 如图所示:三种方式传入参数

 1.5、示例五:参数化动态生成标题优化

1、创建
test_allure_title_parametrize5.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import pytest
import alluredata = [("admin1", "123456", "admin1 登录成功"),("admin2", "123456", "admin2 登录失败"),("admin3", "123456", "admin3 登录成功")
]@allure.story('分别传值')
@allure.title('登录测试用例-{title}')
@pytest.mark.parametrize('username, password, title', data)
def test_login(username, password, title):"""登录测试用例"""print(username, password)

2、输入命令运行:

如图所示:测试用例标题可读性比较好,易于维护

 

二、动态生成功能

@allure.title() 和 @allure.description() 都是装饰器,给测试用例提供标题和描述的,其实 allure 提供了在测试用例执行过程中动态指定标题和描述等标签的方法。如:allure.dynamic.title()、
allure.dynamic.description()

allure.dynamic 提供的方法:

 2.1、示例一:allure.dynamic.title()

用例标题

1、创建test_allure_dynamic.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import allure@allure.title("装饰器标题")
def test_case():print("AllTests软件测试")allure.dynamic.title("动态标题")

2、输入命令运行:

pytest test_allure_dynamic.py --alluredir=./allure
allure serve allure

 

 

2.2、示例二:
allure.dynamic.description()

用例描述

1、创建test_allure_dynamic2.py文件

脚本代码:2、输入命令运行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import allure@allure.title("装饰器标题")
def test_case():"""动态设置描述"""print("AllTests软件测试")allure.dynamic.description("动态描述")allure.dynamic.title("动态标题")

2、输入命令运行:

pytest test_allure_dynamic2.py --alluredir=./allure
allure serve allure

 如图所示:

 

2.3、示例三:结合@pytest.mark.parametrize()

1、创建test_allure_dynamic3.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import pytest
import alluredata = [("admin1", "123456", "admin1 登录成功"),("admin2", "123456", "admin2 登录失败"),("admin3", "123456", "admin3 登录成功")
]@pytest.mark.parametrize('username, password, title', data)
def test_case(username, password, title):"""测试用例"""print(username, password)allure.dynamic.title(title)

2、输入命令运行:

pytest test_allure_dynamic3.py --alluredir=./allure
allure serve allure

 如图所示:

 

2.4、示例四:全部方法示例

1、创建test_allure_dynamic4.py文件

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""import alluredef test_case1():"""测试用例1"""allure.dynamic.title("动态title")allure.dynamic.description_html("动态description_html")allure.dynamic.severity("blocker")allure.dynamic.feature("动态feature")allure.dynamic.story("动态story")allure.dynamic.tag("动态tag")allure.dynamic.link("https://www.baidu.com/?wd=1", "动态link")allure.dynamic.issue("https://www.baidu.com/?wd=2", "动态issue")allure.dynamic.testcase("https://www.baidu.com/?wd=3", "动态testcase")def test_case2():"""测试用例2"""allure.dynamic.description("动态description")

如图所示:

 

测试用例1

 测试用例2

 

三、报告添加用例失败截图

在进行 UI 自动化的时候,执行测试用例失败时,想把用例失败的截图展现在 allure 报告里面。

可以使用 pytest 的钩子函数 pytest_runtest_makereport,用来获取用例的执行结果,当用例失败则进行截图操作。之后添加截图到allure报告里,可以使用 allure.attach 方法。

1、创建conftest.py文件

使用钩子函数pytest_runtest_makereport,并判断用例失败时截图操作。

脚本代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""from selenium import webdriver
import pytest
import allure
import osmy_driver = None@pytest.hookimpl(tryfirst=True, hookwrapper=True)
def pytest_runtest_makereport(item, call):"""钩子函数:获取每个用例的状态"""# 获取钩子方法的调用结果my_results = yieldrep = my_results.get_result()# 获取用例call,执行结果是失败的,不包含 setup/teardownif rep.when == "call" and rep.failed:mode = "a" if os.path.exists("failures") else "w"with open("failures", mode) as f:# let's also access a fixture for the fun of itif "tmpdir" in item.fixturenames:extra = " (%s)" % item.funcargs["tmpdir"]else:extra = ""f.write(rep.nodeid + extra + "\n")# 添加allure报告截图if hasattr(my_driver, "get_screenshot_as_png"):with allure.step("添加失败截图"):allure.attach(my_driver.get_screenshot_as_png(), "失败截图", allure.attachment_type.PNG)@pytest.fixture(scope='session')
def browser():global my_driverif my_driver is None:my_driver = webdriver.Chrome()yield my_driverprint("退出登陆")my_driver.quit()

2、创建test_allure_screenshot.py文件,为测试用例。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
"""from selenium import webdriver
import pytest
import alluredef test_case(browser):with allure.step("打开首页"):browser.get("https://www.cnblogs.com/alltests/")# 断言-标题assert browser.title == "AllTests软件测试"

3、输入命令运行:

pytest test_allure_screenshot.py --alluredir=./allure
allure serve allure

如图所示:

用例失败时截图,并将截图展现在allure报告里。

截图文件在报告目录里。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65124.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

❀YOLOv5学习❀图像标注工具LabelImg的下载,配置和使用。

LabelImg是图形图像注释工具。它是用Python编写的,并将Qt用于其图形界面。批注以PASCAL VOC格式(ImageNet使用的格式)另存为XML文件。此外,它还支持YOLO格式。下载这个,主要是为了YOLOv5中,做自己的数据集&…

brat事件标注平台使用教程

事件图谱首先涉及到的是事件标注,我采用的是brat事件标注平台,该平台使用的是Linux系统,因为我的电脑是windows系统, 将brat安装在了linux虚拟机(Ubuntu)上。 一.下载与安装 1.下载brat 进入brat官网brat…

OpenAI 成近期顶流团队?如何使用 OpenAI 和 Node.js 构建 AI 图像生成器?

摘要: 12月7号,知名人工智能研究机构 Open AI 在Youtub上发布视频介绍使用OpenAI 和 DALL-E 模型创建一个网络应用程序,该应用程序将根据输入的文本从头开始生成图像。https://www.youtube.com/watch?vfU4o_BKaUZE 前言💖 大家好&#xff0…

AI 自动写代码插件 Copilot(副驾驶员)

AI 自动写代码插件 Copilot 提示:Copilot单词直译过来就是副驾驶员的意思。 介绍:本质上就是基于GitHub开源的亿级别的代码,训练AI模型,自动生成代码。 就是数据量(GitHub的数据量就很大!)能够决定你AI模型精度的上…

软件测试中的AI——运用AI编写测试用例

文章目录 一、现状二、测试技术可结合AI的几个方向三、尝试使用AI编写测试用例(实验过程)1、AI联系上下文的能力弱2、回答的内容类似于能在网上搜索到的内容3、需要有一个明确的指令4、输出内容有限5、无法想象到需求描述之外的内容 四、总结&#xff1a…

AI热度降温?揭秘加德纳技术成熟度曲线与AI发展阶段

一文解决你所有对 AI 的焦虑 近期,我们发现ChatGPT的热度似乎不如前几个月。许多人尝试了这个技术,觉得它非常强大,但似乎与自己的日常生活和工作关系不大,因此逐渐失去了兴趣。 然而,这实际上是技术发展的正常周期&…

王炸赚钱组合!!ChatGPT + AI大模型

“ 你近期有体验过哪些大模型产品呢? 你有使用大模型API做过一些实际开发吗? 在你日常开发中,可以与大模型相关应用结合来完成工作吗? ” 从去年底开始,大模型的发展趋势就非常迅猛,这也代表着人工智能进入…

ChatGPT + AI大模型 = 王炸!!!

“ 你近期有体验过哪些大模型产品呢? 你有使用大模型API做过一些实际开发吗? 在你日常开发中,可以与大模型相关应用结合来完成工作吗? ” 从去年底开始,大模型的发展趋势就非常迅猛,这也代表着人工智能进入…

ChatGPT+低代码,好用到飞起?

ChatGPT 凭借短短 2 个月,月活用户突破 1 亿,成为史上用户增长速度最快的消费级应用程序。ChatGPT 的爆火,在全球范围内掀起了一场关于 AI 技术革命的狂潮,AIGC 也迅速成为科技圈最火赛道。 更有国际咨询机构预测,203…

信用卡兴趣人群洞察报告.pdf

男性用户对信用卡的关注度显著高于女性 信用卡兴趣人群年龄集中在24-40岁,与主流消费人群相吻合。41岁以上人群信用卡关注度明显滑落 深广信用卡关注度最高,占据前四名知州、西安等中西部城市占据前十名中半数名额 信用卡兴趣人群高度集中于iPhone手机,其次分别为三星、魅族…

关于程序员的调查报告

最近Stack Overflow发布一份开发者调查报告,内容涵盖了开发人员最喜欢的技术到工作偏好等等各种问题。下面小编就带大家一起来看一看。 NO.1 最常用的的编程语言: 我们发现Python的使用度今年超过了Java,Python的势头有点猛啊!&am…

c语言进行数据统计分析的研究报告,统计分析报告范文

统计分析报告范文 大家都知道,统计分析的写作是为了制作统计分析文章。在统计部门,统计分析文章则称为统计分析报告。下面是一篇统计分析报告范文,欢迎阅读! 统计分析报告范文 【目录】 一.引言 二.研究目的 三.数据分析 I.对能源生产及构成的…

论文阅读报告

0 2022/6/23-2022/6/25 1. FLAME: Taming Backdoors in Federated Learning 1.1 本文的贡献 我们提出了FLAME,这是一种针对FL中后门攻击的防御框架,能够消除后门而不影响聚合模型的良性性能。与早期的后门防御相反,FLAME适用于一般对手模型…

「市场调研」简说

1. 外部因素评价矩阵EFE EFE矩阵可以帮助战略制定者归纳和评价经济、社会、文化、人口、环境、政治、政府、法律、技术以及竞争等方面的信息。 建立EFE矩阵的五个步骤如下:  1) 列出在外部分析过程中所确认的外部因素,包括影响企业和其所…

《用图表说话》读后感

《用图表说话:麦肯锡商务沟通完全工具箱(珍藏版)》在我的必读清单里,推荐过很多次,也是之前送书活动中的书目,今天就来总结一下这本书到底讲了个啥。(知识图谱在文末,想要高清图片可…

微信读书产品调研报告

在信息爆炸时代,还是有一些人通过阅读书籍的方式静下心思考,静心提升自己的。而电子阅读产品也是互联网时代下的特色与产物,在竞争激励的电子阅读产品市场中,微信读书也正凭借着高质量的产品设计赢取用户的称赞与信赖。 微信读书产品调研报告 产品名称:微信读书 产品版…

哪里下载全部股票历史数据?下载全部股票历史数据怎么下?

4000只个股所有股票的历史数据,500个指数的全部历史数据,已经打包好了,而且可以随时下载最近一个交易日的全部股票历史数据,一个在线下载的工具 只要两步就能下载: 填股市代码、邮箱5分钟后收到股市历史数据Excel 放…

如何下载股票历史数据?

如何下载股票历史数据?发现一个可以在线批量下载股票历史数据的的工具,相比那些套路收费的,起码批量在线下载历史数据的Excel是真的,免费很关键… 只要两步就能下载: 填股市代码、邮箱5分钟后收到股市历史数据Excel 放在公主号…

股票历史走势的比较及显示

本文总结一下以前参加的一个股票分析软件的子项目(仅放了部分代码),项目用QT实现的,股票历史数据存储在excel文件中。 子项目的目标是根据提供的股票历史数据查找与近期股票数据相似的时间段,并根据历史数据对走势进行…

股票数据下载-如何下载股票历史行情数据?

股票数据是研究和分析行情的基础,不管是量化分析还是数据对比,股票数据都是最基础的部分。之前各个炒股软件基本都有下载股票数据的功能,但是后来就取消或者加了限制了。 只要两步就能下载: 填股票代码、邮箱收到股票历史数据…