Pytest的测试报告——Allure

 一、html-report测试报告

html-report测试报告。是pytest下基本的测试报告。要使用pytest-html测试报告,就要确保python版本在3.6及以上即可。本身pytest所提供的测试结果汇总,是基于控制台的文本输出形式。

pytest-html是基于HTML格式实现的测试报告的结果记录。属于pytest下的插件。所以要调用的话,需要提前安装这个插件。

安装指令:

  • pip install pytest-html pip源自行添加

在实际的pytest运行过程中,如果需需要生成测试报告,则需要添加指令 --html=测试报告名称.html。

import pytest@pytest.fixture
def first():return 'a'
def test_function(first):print(first+'hcc')

直接运行也能得到日志报告,但是不够直观 ,可以运行:

pytest -s -v test_html_report.py --html=./report.html

得到html文件: 

注意:
默认生成html测试报告的指令 --html=测试报告.html,不会捕获页面所显示的日志信息。如果要捕获日志信息,则需要添加指令 --capture=sys

如果要将测试报告进行邮件或者其他途径的分享,需要添加指令--self-contained-html将测试报告的css样式直接加载到html文件之中,不再额外生成css样式文件夹。 


 二、Allure测试报告

Allure测试报告是自动化测试领域下的测试报告天花板。本身是适配到Python自动化、Java自动化都可以满足的一种测试报告。属于独立化的一个测试报告插件。

环境部署:

  • Allure安装:

    • 下载安装包,解压到指定路径,进入到allure的bin路径下,复制bin的完整路径,添加到系统环境变量的path之中

    • 启动cmd,运行allure --version指令,如果在控制台显示有allure版本信息则表示安装成功

  • allure-pytest安装:

    • pip install allure-pytest进行安装

2.1 mac下allure安装

方法一:使用终端
1、打开终端
                brew install allure
2、安装完成后验证是否成功
                allure --version

方法二:安装包+终端
1、下载allure安装包,tzg或者zip
                  https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
2、解压安装包,放到合适的位置
3、打开终端

                vi ~/.bash_profile
4、回车按E,进入编辑页面,按“i”进入编辑状态
5、添加以下两行

                export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
                export PATH=${PATH}:自己本地allure的bin目录的路径
6、按esc退出编辑状态,输入:wq退出编辑页
7、刷新配置文件

                source ~/.bash_profile
8、验证allure是否配置成功
               allure --version

2.2 allure的使用

Allure测试报告的生成:1. 安装allure测试报告2. pytest --alluredir 指令用于将测试结果的数据保存在allure结果之中3. allure serve ./allure_report这个指令是生成临时allure测试报告。并提供web服务以供访问生成的测试报告保存在用户的缓存临时文件夹下,路径无法修改4. allure generate ./allure_report -o ./report_allure这个指令是将allure采集的测试数据生成为完整的allure测试报告,保存在指定路径下。
import pytest@pytest.fixture
def first():return 'a'
def test_function(first):print(first+'hcc')

 运行指令:  pytest --alluredir ./allure_report 

将测试结果的数据保存在allure结果之中,同时生成一个测试报告文件。

 allure serve ./allure_report 这个指令是生成临时allure测试报告。并提供web服务以供访问。生成一个完整的测试报告。

因为pytest下的allure测试报告生成,需要调用allure指令,这个指令和pytest没有关系,所以想要一步实现数据的记录以及报告的生成,记得添加os.system()方法来调用allure指令。但是,可能allure指令调用会失败。

如果是通过指令运行,集成到pytest之中,生成allure测试报告的话,这个测试报告想要分享,可以在Jenkins中进行集成的方式来做分享(也就是通过链接进行分享的模式)。

如果想要关联持续集成,做到更加完整的自动化测试效果,可以通过allure来实现测试报告的生成。


三、Allure装饰器使用

在Allure测试报告之中,进行了非常详细的数据的展示,包括各种分类、图形化界面等。同时,对于自动化测试用例的执行,在Allure中也可以做到一定量的管理,让整个测试报告变得更加完整。

Allure如何更加美观地展示所有的测试内容呢?可以通过各类不同的装饰器来丰富测试报告相关信息。让整个报告看起来更加完整,易读,易理解。

  1. epic装饰器:用于定义整个测试的描述信息,可以理解为总的测试说明,如果输入的参数是相同的 例如: 当前执行了某一个系统的一个完整业务流程,通过不同的epic装饰器实现对不同的业务流程的总描述
  2. feature装饰器:用于定义到当前用例执行的功能模块的说明

  3. tory装饰器:对流程分支进行的定义与描述

  4. title装饰器:实现当前用例名称的定义

  5. escription装饰器:主要实现对用例的内容进行自定义的描述,也可以通过三引号的注释操作来实现同样的效果。需要注意为了代码的规范性,建议统一用一种方法

  6. step装饰器:用于显示测试的操作步骤。 装饰器形态的step可以对当前用例进行步骤的统一描述,无法实现对用例的所有步骤进行细化的处理                                             with allure.step('步骤描述')的方式可以实现对用例之中所有的不同操作步骤,进行细化的步骤描述,当出现问题的时候可以更加快速准确定位到出问题的点

3.1 epic装饰器

epic装饰器:用于定义整个测试的描述信息,可以理解为总的测试说明,如果输入的参数是相同的 例如: 当前执行了某一个系统的一个完整业务流程,通过不同的epic装饰器实现对不同的业务流程的总描述。

import pytest
import os
import allure@allure.epic("这是测试总说明")
def test_function01():print('这是1号测试用例')
@allure.epic("这是测试总说明")
def test_function02():print('这是2号测试用例')
@allure.epic("这是测试总说明")
def test_function03():print('这是3号测试用例')
@allure.epic("这是测试总说明1")
def test_function04():print('这是4号测试用例')
@allure.epic("这是测试总说明1")
def test_function05():print('这是5号测试用例')if __name__ == '__main__':pytest.main(['-s', '-v', '--alluredir=./allure_report'])os.system(r'allure generate ./allure_report -o ./report_allure --clean')

 查看测试报告:


3.2 feature装饰器

feature装饰器:用于定义到当前用例执行的功能模块的说明

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
def test_function01():print('这是1号测试用例')@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
def test_function02():print('这是2号测试用例')@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
def test_function03():print('这是3号测试用例')@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
def test_function04():print('这是4号测试用例')@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
def test_function05():print('这是5号测试用例')

查看测试报告:


3.3 story装饰器

story装饰器:对流程分支进行的定义与描述 

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
def test_function01():print('这是1号测试用例')@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
def test_function02():print('这是2号测试用例')@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
@allure.story('实现购物车添加操作行为')
def test_function03():print('这是3号测试用例')@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
@allure.story('实现商品属性的获取')
def test_function04():print('这是4号测试用例')@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
@allure.story('实现支付的操作行为')
def test_function05():print('这是5号测试用例')

 查看测试报告:


 3.4 title装饰器

 title装饰器:实现当前用例名称的定义

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('登录操作')
def test_function01():print('这是1号测试用例')@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('验证账号')
def test_function02():print('这是2号测试用例')@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
@allure.story('实现购物车添加操作行为')
@allure.title('添加购物车')
def test_function03():print('这是3号测试用例')@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
@allure.story('实现商品属性的获取')
@allure.title('选择商品属性')
def test_function04():print('这是4号测试用例')@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
@allure.story('实现支付的操作行为')
@allure.title('进行支付')
def test_function05():print('这是5号测试用例')

查看测试报告:


3.5 escription装饰器

escription装饰器:主要实现对用例的内容进行自定义的描述,也可以通过三引号的注释操作来实现同样的效果。

import pytest
import os
import allure@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('登录操作')
@allure.description('实现用户的登录操作行为')
def test_function01():print('这是1号测试用例')@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('验证账号')
@allure.description('对已登录登录进行账号的正确性验证行为')
def test_function02():print('这是2号测试用例')@allure.epic("这是测试总说明")
@allure.feature('添加购物车功能模块')
@allure.story('实现购物车添加操作行为')
@allure.title('添加购物车')
@allure.description('实现添加购物车操作行为')
def test_function03():print('这是3号测试用例')@allure.epic("这是测试总说明")
@allure.feature('商品详情功能模块')
@allure.story('实现商品属性的获取')
@allure.title('选择商品属性')
@allure.description('对测试商品的属性进行选择')
def test_function04():print('这是4号测试用例')@allure.epic("这是测试总说明")
@allure.feature('支付功能模块')
@allure.story('实现支付的操作行为')
@allure.title('进行支付')
@allure.description('实现对已选择的商品进行最终的支付处理')
def test_function05():print('这是5号测试用例')

查看测试报告:


3.6 step装饰器

 step装饰器:用于显示测试的操作步骤。 装饰器形态的step可以对当前用例进行步骤的统一描述,无法实现对用例的所有步骤进行细化的处理。

@allure.epic("这是测试总说明")
@allure.feature('登录功能模块')
@allure.story('实现登录的操作行为')
@allure.title('登录操作')
@allure.description('实现用户的登录操作行为')
@allure.step('进行用户的账号与密码输入')
def test_function01():print('这是1号测试用例')

 查看测试结果:

  with allure.step('步骤描述')的方式可以实现对用例之中所有的不同操作步骤,进行细化的步骤描述,当出现问题的时候可以更加快速准确定位到出问题的点

def test_function01():with allure.step('1.进行登录页的访问'):print('这是1号测试用例1')with allure.step('2.进行用户名称的输入‘):print('这是1号测试用例2')with allure.step('3.进行密码的输入'):print('这是1号测试用例3')with allure.step('4.进行登录按钮的点击'):print('这是1号测试用例4')

查看测试结果: 

         装饰器形态的step可以对当前用例进行步骤的统一描述,无法实现对用例的所有步骤进行细化的处理 。

        with allure.step('步骤描述')的方式可以实现对用例之中所有的不同操作步骤,进行细化的步骤描述,当出现问题的时候可以更加快速准确定位到出问题的点 。

        Allure测试用例等级管理(参考缺陷等级定义),所有的用例默认为normal级别。用例可以分为以下几个 等级:               

  • 1. blocker 阻塞缺陷(功能未实现,无法继续下一步操作)
  • 2. critical 严重缺陷
  • 3. normal 一般缺陷
  • 4. minor 次要缺陷
  • 5. trivial 轻微缺陷
  • 写法示例: 完整写法@allure.severity(allure.severity_level.BLOCKER)                                               简易写法 @allure.severity('critical')
  • 严重级别可以通过类来直接进行定义,定义的效果就是将整个类的所有测试用例定义为当前的级别,normal以下无法定义为类级别


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

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

相关文章

无心剑汉英双语诗《一亩三分地》

一亩三分地 My Small World 二十四年世事变幻 拨号上网曾争分夺秒 如今不限流量肆意冲浪 大数据,云计算,人工智能 洗刷着世间各行各业 周围人,生活不断升级 房子,车子,妻子…… 换了一茬又一茬 洋溢着自豪的表情 而我…

[NOIP2014 提高组] 生活大爆炸版石头剪刀布#洛谷

题目背景 NOIP2014 提高组 D1T1 题目描述 石头剪刀布是常见的猜拳游戏:石头胜剪刀,剪刀胜布,布胜石头。如果两个人出拳一样,则不分胜负。在《生活大爆炸》第二季第 8 集中出现了一种石头剪刀布的升级版游戏。 升级版游戏在传统…

【Python_PyQtGraph 学习笔记(目录)】

【Python_PyQtGraph 学习笔记(目录)】 本专栏介绍如何使用 PyQtGraph 进行绘图操作,PyQtGraph 是基于 Qt 的纯 Python 库,如果使用 pyqt 进行图形界面开发,PyQtGraph 是很好的选择。 下面是专栏的目录汇总:…

无心剑七绝《未晚斋》

七绝未晚斋 倏忽半世莫伤怀 醉爱夕阳未晚斋 汉韵唐风情不尽 东华曼舞咏云台 2024年1月6日 新韵四开平韵 《未晚斋》这首诗,作者无心剑以其独特的笔触,描绘出了一幅宁静、淡雅的画面。诗中表达了对生活的热爱和对美好时光的珍惜。 首句“倏忽半世莫伤…

浏览器渲染原理(面试重点)

一、浏览器是如何渲染页面的 常见的简洁答案: 浏览器内核拿到内容后,渲染流程大致如下:解析HTML,构建Dom树;解析CSS,构建Render树;(将CSS代码解析成树形的数据结构,与D…

使用nsight system 分析python进程

有时候我们的推理引擎是通过python脚本调用的,比如: python脚本调用TensorRT engine进行推理。 如果我们想用nsight system 分析性能,该怎么搞呢? 方法如下: 首先直接nsys profile 后面跟要执行的python命令就行 $…

一个vue3的tree组件

https://download.csdn.net/download/weixin_41012767/88709466

lldb in android studio

命令 n 单步s 进入函数, step intofini 函数返回, step outc 继续执行bt 显示调用栈, 标记*的行, 为当前帧(函数)frame info 显示栈当前所在的当前帧frame select [数字] 在当前栈中选择某个帧var 显示所有局部变量dis 显示汇编, 箭头位置为执行位置ni 汇编单步si 汇编进入函数…

c# vb.net检测字符串是否匹配一组相似度数组input Like

VB.NET 检测字符串是否符合一个数组中的多个like条件,有没有最简单的函数? 在VB.NET中,可以使用Enumerable.Any方法结合String.Like方法来检测一个字符串是否符合一个数组中的多个LIKE条件。Enumerable.Any方法用于确定序列中的任何元素是否…

java SSM社区文化服务管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM社区文化服务管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,springspringMVCmybatis),对理解JSP java编程开发语言有帮助,系统具有完整的 源代码和数据库,系统主…

Mac环境下Parallels Desktop 19的安装和使用

为了后续构建漏洞靶场和渗透测试环境,我们需要提前准备好几套与宿主机隔离的工作环境(Windows、Linux等),在Mac上最常用的就是Paralles Desktop(PD)工具了,当前最新版本为19。接下来介绍如何安装…

Http与Tcp协议的原理以及应用

OSI七层模型和相关协议 七层模型从上到下如下所示: 应用层:负责应用之间的通信,处理请求和响应的具体格式表示层:对于数据格式进行处理会话层:负责建立和断开通信连接,传输层:负责建立端口之间…

python开发案例教程-清华大学出版社(张基温)答案(4.3)

练习 4.1 1. 判断题 判断下列描述的对错。 (1)子类是父类的子集。 ( ) (2)父类中非私密的方法能够被子类覆盖。 ( ) (3)子类能够…

java distinct 无法为泛型去重

针对distinct无法为List<User>之类的去重。 所以这里简单说一下方案。 本质上是重写对象的equals方法。 但是这里有一个偷懒的方式。 就是直接使用Data (来自Lombok的注解) 因为Data 一样会重写equals 和 hashcode方法。 所以&#xff0c;直接使用Data来代替get;se…

8086控制电机旋转,设了三个指示灯不亮咋回事,是电压不够?还是保护电阻太大了?

8086控制电机旋转&#xff0c;设了三个指示灯不亮咋回事&#xff0c;是电压不够&#xff1f;还是保护电阻太大了&#xff1f; 在控制电机旋转时&#xff0c;如果设定了三个指示灯但它们不亮&#xff0c;可能有几个原因导致&#xff1a; 1. 电压不够&#xff1a;确保电机和指示灯…

Rust 字符串 初步了解

rust 的字符串 。字符串不是复合类型&#xff0c; String 和 &str &#xff1a; String 具有所有权&#xff0c;是存储在堆上的。&str 没有所有权&#xff0c;是对 String 的引用。字符串字面量也是 &str 类型&#xff0c;存储在栈上。 切片&#xff08;slice&a…

java基于ssm的房源管理系统+vue论文

目 录 目 录 I 摘 要 III ABSTRACT IV 1 绪论 1 1.1 课题背景 1 1.2 研究现状 1 1.3 研究内容 2 2 系统开发环境 3 2.1 vue技术 3 2.2 JAVA技术 3 2.3 MYSQL数据库 3 2.4 B/S结构 4 2.5 SSM框架技术 4 3 系统分析 5 3.1 可行性分析 5 3.1.1 技术可行性 5 3.1.2 操作可行性 5 3…

【python爬虫开发实战 情感分析】利用爬虫爬取城市评论并对其进行情感分析

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a; python网络爬虫从基础到实战 带你学习爬虫从基础到实战 深度学习带你感受AI的魅力 &#x1f4a1;往期推荐&#xff1a; ⭐️前面比较重要的基础内容&#xff1a; 【Py…

Linux vi/vim 教程

文章目录 【 1. vi/vim 的三种模式 】1.1 命令模式1.2 输入模式1.3 底线命令模式 【 2. 实例 】【 3. vim 的其他命令 】 所有的 Unix Like 系统都会内建 vi 文本编辑器&#xff0c;其他的文本编辑器则不一定会存在。目前我们使用比较多的是 vim 编辑器。vim 从 vi 发展出来&am…

STM32G030C8T6:USART串口通信(中断)

本专栏记录STM32开发各个功能的详细过程&#xff0c;方便自己后续查看&#xff0c;当然也供正在入门STM32单片机的兄弟们参考&#xff1b; 本小节的目标是&#xff0c;系统主频64 MHZ,采用高速外部晶振&#xff0c;通过芯片PB6,PB7 的USART1 口&#xff0c;实现串口通信。 原理…