pytest -- Allure报告

news2025/8/3 8:59:57

执行和生成报告:

1)在main文件中加入如下代码:

1)在main文件中加入如下代码:
if __name__ == '__main__':
    # 指定临时json文件生成位置    
    pytest.main(["./case/test_visit_url_screenshot.py",                 
                "-sv", "--alluredir", "./report/temp_jsonreport"])
    # 指定html报告生成位置,清理上次生成的报告    
    os.system("allure generate ./report/temp_jsonreport -o ./report/html --clean")

2)生成报告包含两个文件:

先生成temp_jsonreport,再生成html,用浏览器打开index.html即可

@allure.feature()、@allure.story()、@allure.title()、with allure.step 使用

使用举例1***:

1、把基础操作,写成函数放到action.py,方便重复调用

2、在测试用例里写清feature用例模块、story用例场景、title用例名称、用例步骤step,调用action里的函数即可

import allure
import logging


from utils.yaml_reader import *
from utils.path_dealer import *
from utils.url_dealer import *
from utils.action import *
from conf.conf import *


@allure.feature("模块")
class TestUrlScreenshot:
    """
    Step1、input one URL
    Step2、generate multi-language URL
    Step3、visit URL, take screenshot
    """
    @allure.story("生成指定多语言URL后访问")
    def test_take_screenshot(self, driver):
        url_list = read_yaml(data_folder, "url.yaml")
        # logging.info("urls list: %s" % url_list)
        language_dict = read_yaml(data_folder, "language.yaml")
        if not language_dict:
            language_dict = default_language_dict
        # logging.info("language dict: %s" % language_dict)

        task_name = read_yaml(data_folder, "other.yaml")["task_name"]
        logging.info("task_name: %s" % task_name)

        urls = gen_multi_language_url(language_dict=language_dict, url_list=url_list)
        folder_path = gene_folder_path(task_name_pa=task_name)

        # 设置访问URL
        for language, urls_list in urls.items():
            logging.info("language: %s", language)

            for each_url in urls_list:
                Action.visit_url(driver=driver, url=each_url)
                time.sleep(5)

                # 生成截图的文件路径
                png_path = gene_screenshot_abs_path(folder_path_pa=folder_path, language_pa=language)
                Action.save_screenshot(driver, png_path)

                # 将截图嵌入报告
                allure.attach(driver.get_screenshot_as_png(), "截图", allure.attachment_type.PNG)




跳过测试 -- @pytest.mark.skip(reason=”hhh”)

# 参数化 ,传入字典数据

json = ({"username": "alex", "password": "123456"}, {"username": "rongrong", "password": "123456"})

@pytest.mark.parametrize("json", json)
@pytest.mark.skip()
def test_para5(self, json):

    print("{json}")  # 语法:{json} 且必须加引号
    print('username: {json["username"]}, password: {json["password"]}') # 语法:{json}

执行结果:

 参数化 -- @pytest.mark.parametrize

# 单个值,运行一次

@allure.story("场景:pytest.mark.parametrize使用")
@allure.title("单个参数,单个值")
@pytest.mark.parametrize("name", ["san"])
def test_para(self, name):

    print(name)

# N个值,运行N次
@allure.title("单个参数,多个值")
@pytest.mark.parametrize("name", ["san", "si", "wu"])
def test_para(self, name):
    print(name)

# N个值,运行N次
@allure.title("多个参数,多个值")
@pytest.mark.parametrize("name, pw", [("san", "123456"), ("si", "123456"), ("wu", "123456")])
def test_para(self, name, pw):
    print("%s %s" %(name, pw))

# 多个参数的混合使用,笛卡儿积

data1 = [1, 2]
data2 = ["wu", "liu"]
data3 = ["biu", "kuang"]

@pytest.mark.parametrize("a", data1)
@pytest.mark.parametrize("b", data2)
@pytest.mark.parametrize("c", data3)
def test_para(self, a, b, c):
    print("new sentence: [{a}, {b}, {c}]")

# 参数化 ,传入字典数据

json = ({"username": "alex", "password": "123456"}, {"username": "rongrong", "password": "123456"})

@pytest.mark.parametrize("json", json)
def test_para(self, json):

    print("{json}")  # 语法:{json} 且必须加引号
    print('username: {json["username"]}, password: {json["password"]}') # 语法:{json}

失败case重复执行 -- pytest-rerunfailures

& @pytest.mark.flaky(reruns=2, reruns_delay=5)

背景:服务器不稳定,偶尔出现波动、本地网络偶尔出现不稳定等情况,导致用例执行失败,这种情况大家都觉得用例标记失败不太合理,想要在用例执行失败后延时一些时间再次进行执行,如果超过3次仍然失败,则表明用例执行失败;所以就需要失败重跑功能。

前提条件: pytest (>=5.3) 和python >=3.6

安装:pip install pytest-rerunfailures

查看安装版本:pip show pytest-rerunfailures

方式一:加装饰器:

# 参数化 ,传入字典数据

json = ({"username": "alex", "password": "123456"}, {"username": "rongrong", "password": "123456"})

@pytest.mark.parametrize("json", json)
@pytest.mark.flaky(reruns=2, reruns_delay=5)
def test_para5(self, json):

    print("{json}")  # 语法:{json} 且必须加引号
    print('username: {json["username"]}, password: {json["password"]}') # 语法:{json}
    assert 1 == 2
注:失败用例重试2次,每次延时5
方式二:命令行执行
在命令行输入: pytest -v --reruns 3 --reruns-delay 5 test_rerun.py失败用例重试3次,每次延时5秒,

命令行会覆盖用例的装饰器

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好用的电容笔有哪些?2022年电容笔十大品牌排行榜

每一件产品都有其独特的含义、存在和作用。现在ipad的热度和ipad的影响力都在逐渐提升,使得ipad的用户也在不断增长,那么想要提升ipad的性能,就必须要有一款适合ipad的电容笔。所以,应该选用什么牌子的电容笔?我会给大…

完美支持--WIN11--Crack--LightningChart-10.3.2.2

实例探究--LightningChart,Crack完美支持Windows11 破解版了解LightningChart的客户如何在他们的应用程序中实施 LightningChart ,成为现实生活中的成功案例。---内容摘自官网!!!!!! Lightnin…

一文让你了解数据采集

随着云计算、大数据、人工智能的发展,数据采集作为数据的重要手段,成为广大企业的迫切需求。 所谓“得数据者,得人工智能”,如今人工智能早已在我们的生活中屡见不鲜。如“人脸识别”、“语音唤醒音响”等都属于人工智能的范畴。…

网站劫持常见方法

前言 本文主要是对常见的网站劫持方法进行总结学习,通过提前学习了解,不至于在遇到实际项目时手足无措。 网站劫持是黑帽SEO中的一种方式,可以通过入侵服务器获得权限后,对前端JS、后端脚本文件以及中间件进行设置,从…

【微信小程序系列:五】小程序适老化自动适配工具miniprogram-elder-transform---微信老年关怀模式下小程序字体适配微信字体

1.先言 这个工具我网上基本找不到任何一篇文章说这个miniprogram-elder-transform的使用的,,既然没有,那咱就自己写第一篇~ Android字体大小标准默认16px,iOS字体大小标准默认17px。 个人觉得,微信用户设置字体大小超…

新手必看 电商商家一般不会分享的TikTok涨粉秘笈

想要实现TikTok营销变现增长,除了TikTok选品,还要学会TikTok营销。而对于刚刚起步的TikTok电商商家来说,涨粉就是第一烦恼了,今天就来说说关于TikTok涨粉这些事!1、确定目标市场 首先,调研并确定所在行业与…

电脑c盘满了怎么清理,快速清理,用这5招

​新买的电脑没用多久,突然发现系统提示磁盘空间不足。点击一看,电脑c盘空间已经爆满变红。当出现这种情况时,很多电脑的运行速度会大大降低,甚至导致部分应用无法正常运行。那么电脑c盘满了怎么清理?如何释放电脑c盘空…

OpenGL 阴影

目录 一.OpenGL 阴影 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 阴影 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >&…

Vuex 笔记

文章目录1 Vuex 简介2 Vuex 用法2.1 安装 vuex2.2 修改 main.js,2.3 使用 mutation 改变 Store:2.4 带参数的 mutations:2.5 使用 getters 读取 store 数据2.6 使用 actions 执行异步代码2.7 总结2.8 使用 mapper 简化代码2.9 使用模块组织 store2.10 模块名字空间2…

MCE | 衰老“走过”的信号途径

近年来,与抗衰老相关的各类“神药”甚嚣尘上,如李嘉诚投资的烟酰胺核糖 (Nicotinamide Riboside; NR)。NR 是烟酰胺腺嘌呤二核苷酸 (NAD) 前体之一,可以提高人体内 NAD 水平。众所周知,NAD 在衰老过程中会下降,这是为什…

项目管理工具DHTMLX Gantt灯箱元素配置教程:文本区域控件设置

本文给大家讲解DHTMLX Gantt如何对文本区域控件进行设置。 多行文本字段如下图所示: 1、初始化 默认情况下,一个textarea控件会添加到灯箱中。要添加另一个,请按照以下步骤操作: 1)在灯箱配置中添加一个部分&#x…

kafka介绍(一)

0.0 什么是MQ 这个部分,需要简单的解答一下,其实MQ就是消息队列,那么本质上,就是一个 FIFO的队列数据结构。 因此,早期的使用方法,都是启动一个线程发送消息,写入消息队列,作为消息…

在牛逼的Android 高工,也要深入了解性能优化~

不管你是在大厂还是小厂,不管你开发能力有多么牛逼,不管你参与开发过什么出名APP,性能优化这一关你必定是要过的,而在性能优化之中最重要的一环还得是启动优化。 因为启动速度直接决定了用户使用该 App的留存率和转化率&#xf…

web前端设计与开发期末作品 旅游咨询网站 HTML5期末大作业 HTML+CSS旅游社网站5个页面 关于制作网页主题论述

👨‍🎓静态网站的编写主要是用 HTML DⅣV CSSJS等来完成页面的排版设计👩‍🎓,一般的网页作业需要融入以下知识点:div布局、浮动定位、高级css、表格、表单及验证、js轮播图、音频视频Fash的应用、uli、下拉…

[附源码]java毕业设计亿上汽车在线销售管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

jersey跨域文件上传

1.1、添加upload文件夹 在webapps\Root文件夹下创建用于接收上传文件的upload文件夹 创建upload文件夹 1.2、修改conf\web.xml设置允许上传文件 <init-param> <param-name>readonly</param-name> <param-value>false</par…

PyTorch深度学习中卷积神经网络(CNN)的讲解及图像处理实战(超详细 附源码)

需要源码和图片集请点赞关注收藏后评论区留言私信~~~ 一、卷积神经网络简介 卷积神经网络是深度学习中最常用的一种网络结构&#xff0c;它作为一种深度神经网络结构&#xff0c;擅长处理图像相关的问题&#xff0c;能够将目标图像降维并提取特征&#xff0c;以进行分类识别等…

数据结构与算法基础(王卓)(1)

标准答案&#xff1a;&#xff08;来源自数据结构与算法基础&#xff08;青岛大学——王卓&#xff09; note_Tarench的博客-CSDN博客&#xff09; #include <iostream> using namespace std;typedef struct {float realpart; //实部float imagpart; //虚部 }Complex;…

idea快速搭建struts2框架

一.用maven创建一个javaweb项目&#xff1a; pom.xml内容&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <!--Licensed to the Apache Software Foundation (ASF) under oneor more contributor license agreements. See the NOTICE fi…

SpringCloud之入门

目录 一、简介 微服务架构介绍 微服务架构的常见问题 二、微服务架构拆分代码实现 微服务环境搭建 案列准备 微服务调用 实现步骤 创建一个父工程 创建成功spcloud-shop的pom依赖 创建基础模块 基础模块 shop-common pom依赖 创建用户微服务 shop-user 源码 shop-use…