Pytest 结合 Allure 生成测试报告

测试报告在项目中是至关重要的角色,一个好的测试报告:

可以体现测试人员的工作量;
开发人员可以从测试报告中了解缺陷的情况;
测试经理可以从测试报告中看到测试人员的执行情况及测试用例的覆盖率;
项目负责人可以通过测试报告查看整个项目还余留多少问题,此次版本是否测试通过;
所以打造一个美观、一目了然的测试报告,清晰的反应质量问题,并提供给相关人员了解项目的整体状态,是非常必要的。

Pytest 结合 Allure 生成测试报告

Allure 框架是一种灵活的、轻量级、支持多语言测试报告工具,它不仅能够以简洁的 Web 报告形式显示已测试的内容,而且允许参与开发过程的每个人从测试的日常执行中提取最大限度的有用信息。同时支持多种语言包括 Java、Python、JavaScript、Ruby、Groovy、PHP、.Net、 Scala。

安装
Mac 可以使用 brew 安装 allure,安装命令如下:

brew install allure 
  • 1

其他操作系统请参考:

https://docs.qameta.io/allure/#_installing_a_commandline
  • 1

与 pytest 结合需要安装 allure-pytest 插件:

pip install allure-pytest
  • 1

查看 Allure 版本:

allure --version
  • 1

运行
第一步:在 pytest 执行测试的时候,指定参数 --alluredir 选项及结果数据保存的目录,代码如下:

pytest --alluredir=tmp/my_allure_results
  • 1

tmp/my_allure_results 中保存了本次测试的结果数据。

第二步:打开报告,需要启动 allure 服务,在 terminal 中输入 allure serve [path/to/allure_results],代码如下:

allure serve path/to/allure_results
  • 1

也可以使用 allure generate 生成 HTML 格式的测试结果报告,并使用 allure open 来打开报告。

allure generate ./result/ -o ./report/ --clean
  • 1

上面的命令将 ./result/ 目录下的测试数据生成HTML测试报告到 ./report 路径下,-–clean 选项目的是先清空测试报告目录,再生成新的测试报告,然后使用下面的命令打开报告。

allure open -h 127.0.0.1 -p 8883 ./report/ 
  • 1

上面这个命令则会启动一个 Web 服务将已经生成的测试报告打开。打开生成的测试报告,在默认的浏览器打开测试报告,报告如下:
在这里插入图片描述
在这里插入图片描述
上面的测试报告首页中展示了此次测试的测试用例数量以及成功用例、失败用例、跳过用例的比例、测试环境、SUITES、FEATURES BY STORIES 等基本信息。当与 Jenkins 做了持续置成后,TREND 区域还将显示,历次测试的通过情况。

首页的左边栏,还从不同的维度展示测试报告的其他信息。重点页面介绍:

Behaviors 页面,按照 FEATURES 和 STORIES 展示测试用例的执行结果;
Suites 页面,Allure 测试报告将每一个测试脚本,作为一个 Suite。在首页里点击 Suites 区域内的任何一条 Suite,都会进入 Suites 页面;
Graphs 页面,展示了此次测试结果的统计信息,比如测试用例执行结果状态、测试用例重要等级分布、测试用例执行时间分布等;
测试用例详情页面,在 Suites 页面上点击任何一条测试用例,Suites 页面的右侧将展示这条用例的详细执行情况。在这个页面可以看到测试用例的每个步骤,以及每个步骤的执行结果,包括步骤里面添加的链接、图片、网页片段或者视频作为重要信息的补充。在这里可以一目了在的看到用例失败的原因。

实战案例|百度搜索功能自动化测试

在实际项目中,一旦用例报错,我们希望能够将当时应用的状态记录下来,记录这些状态的方式可以是日志、截图、视频等手段,并将这些记录在测试报告中,方便相关人员定位问题。我们基于 Pytest 与 Allure 结合生成测试报告来实现这个目标。

以百度 Web 网页版本测试为例,百度首页呈现的功能:新闻、网页、贴吧、知道、音乐、图片、视频、地图等,我们以百度网页的搜索功能为例,使用 Allure、pytest 结合 Selenium 自动化测试框架,完成一个搜索功能的测试。

为了模拟百度搜索功能场景,这里需要创建两个文件,数据文件与用例文件。首先创建数据管理文件 data/data.yml,代码如下:

- allure
- pytest
- unittest
  • 1
  • 2
  • 3

然后,创建用例文件名为 test_baidudemo.py,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-import allure
import pytest
import yaml
from selenium import webdriver
import time@allure.testcase("http://www.github.com")
@allure.feature("百度搜索")
@pytest.mark.parametrize('test_data1', yaml.safe_load(\
open("data/data.yml")))
def test_steps_demo(test_data1):with allure.step("打开百度网页"):driver = webdriver.Chrome()driver.get("http://www.baidu.com")driver.maximize_window()with allure.step(f"输入搜索词:{test_data1}"):driver.find_element_by_id("kw").send_keys(test_data1)time.sleep(2)driver.find_element_by_id("su").click()time.sleep(2)with allure.step("保存图片"):driver.save_screenshot("./result/b.png")allure.attach.file("./result/b.png", \attachment_type=allure.attachment_type.PNG)with allure.step("关闭浏览器"):driver.quit()

代码解析:

allure.testcase 用例标识,给定用例的链接,可以与用例的管理地址关联。
allure.feature 功能模块划分,方便管理和运行测试用例。
pytest.mark.parametrize 用来参数化测试用例。
allure.step 用来添加测试步骤,在测试报告里面会展示出来这个步骤说明。
执行:

 pytest test_baidudemo.py -s -q --alluredir=./result/allure serve ./result/
  • 1
  • 2
  • 3

测试结果图:
在这里插入图片描述
在这里插入图片描述
上面的测试报告展示运行时间,时长,用例数,通过率,以及测试套件 SUITES,环境等信息。

点击左侧栏最下方的 Package 可以看到所有的测试用例以及测试数据,点击一条用例右侧会展示出用例的优先级,数据,测试步骤以及每个步骤的的名称及附加的图片等信息。这里添加了一个测试用例的链接,可以与测试用例的管理链接关联起来,方便后期统计覆盖率。

另外,pytest 与 Allure 也可以与 Jenkins 集成,实现自动化测试的持续集成。

 最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走

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

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

相关文章

echarts-wordcloud词云

echarts-wordcloud是基于echarts的一个插件,所以我们要首先安装echarts包,然后再安装echarts-wordcloud的包,这里我的练习项目安装的版本;当然,你可以随意安装你需要的版本; “echarts”: “^5.3.3”, “ec…

面试2024.1.20

简单介绍下你做的项目。 这个神领物流项目是一个前后端分离的项目,前段他有3个客户端(用户端为微信小程序、司机端和快递员端为app)一个管理端(pc),后端用的技术栈用的是SpringAlibabaCloud、数据库用的是M…

【精选】中间件 tomcat漏洞复现

🍬 博主介绍👨‍🎓 博主介绍:大家好,我是 hacker-routing ,很高兴认识大家~ ✨主攻领域:【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 🎉点赞➕评论➕收藏…

JRTP实时音视频传输(2)-使用TCP通信的案例

环境搭建等参考:JRTP实时音视频传输(1)-必做的环境搭建与demo测试 1.创建自己的demo 先将example1拷贝为myclienttcp.cpp和myservertcp.cpp cp example1.cpp myclienttcp.cpp cp example1.cpp myservertcp.cpp 改写jrtplib/JRTPLIB/examples/CMakeLists.txt&…

79、avx2 向量指令集优化卷积运算

上一节 介绍了 avx2 向量指令集中的 load/store 操作,本节介绍如何使用 avx2 的向量指令集来实现乘累加运算。 因为我们实战中用到的 resnet50 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率…

怎么从视频中提取动图?一个方法快速提取gif

视频以连续的方式播放一系列图像帧,通过每秒播放的帧数(帧率)来创做,由于GIF动图则以循环播放一系列静态图像帧的方式展现动画效果。由于视频的优势在于流畅的动画、丰富的细节和长时间播放,因此常用于电影、电视节目、…

如何在 Ubuntu / Raspbian 上安装 MariaDB

Raspberry Pi OS(原为Raspbian)是为树莓派基于Debian开发的操作系统。 从2015年起,树莓派基金会正式将其作为树莓派的官方操作系统。 Raspbian是由Mike Thompson和Peter Green创建的一个独立项目。第一个版本于2012年6月发布,至…

LP-AM243x EtherNet/IP 连接施耐德 M241 EIP主站测试

硬件环境:LP-AM243x 开发板 施耐德 Modicon M241 软件环境: INDUSTRIAL-COMMUNICATIONS-SDK-AM243X MCU-PLUS-SDK-AM243X — MCU SDK for AM243x 调试过程: 首先,让AM243x能够运行 Null Boot, Starting NULL Boo…

Kotlin 尾递归函数

函数式编程中,重要的概念 尾递归。 当一个函数,在函数最后调用 自身,称为 尾递归,是一种特殊的递归函数。 在JVM中,每次方法调用时,都会产生新的栈帧(stack frame),消耗栈…

TCP缓存(C++)

系统为每个 socket 创建了发送缓冲区和接收缓冲区,应用程序调用 send()/write()函数发送数据的 时候,内核把数据从应用进程拷贝 socket 的发送缓冲区中;应用程序调用 recv()/read()函数接收数据的时候,内核把数据从 socket 的接收…

C语言实现简单的扫雷游戏

目录 1 -> test.c 2 -> game.c 3 -> game.h 1 -> test.c #define _CRT_SECURE_NO_WARNINGS 1#include "game.h"void menu() {printf("************************************\n");printf("********* 1.play ********\n&quo…

【51单片机】动态数码管

0、前言 参考: 普中51单片机开发攻略–A2.pdf 1、数码管介绍 上一章我们主要是介绍一位数码管的内部结构及控制原理。下面我们再来介 绍下多位数码管及动态显示原理的相关知识。 1.1 多位数码管简介 2、74HC245 和 74HC138 芯片介绍 2.1 74HC245 芯片简介 2.2 7…

Docker使用及部署python项目

一、准备项目 ​ 我写的是一个爬取某ppt网站的代码,就一个ppt1.py是爬虫,然后,ppts是存放下载的ppt的 二、准备requirement.txt文件 这个是需要哪些python库支持,写好 ​ 三、准备Dockerfile文件 需要一个名为Dockerfile的文件&…

HarmonyOS关于deps、external_deps的使用

在添加一个模块的时候,需要在BUILD.gn中声明它的依赖,为了便于后续处理部件间依赖关系,我们将依赖分为两种——部件内依赖deps和部件间依赖external_deps。 依赖分类 如上图所示,主要分为部件内依赖(图左)…

Java设计模式-前言

大家好,我是馆长!从今天开始馆长开始对java设计模式进行讲解和整理分享给大家。馆长会尽快的整理完成设计模式的所有内容和讲解代码。从多方面进行模式的详细说明,方便各位看官理解和易学。 软件设计模式的概念 软件设计模式(Sof…

C++笔记之bool类型的隐式转换现象与应用

C++笔记之bool类型的隐式转换现象与应用 —— 《C++ Primer Plus》 文章目录 C++笔记之bool类型的隐式转换现象与应用1.C++中,有几种类型和表达式可以隐式转换为bool类型2.使用explicit关键字来声明显示转换运算符,这样只有在使用static_cast<bool>时才能将对象转换为…

MySQL之索引结构

索引概述 索引是帮助MySQL高效获取数据的数据结构&#xff08;有序&#xff09;。 在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用&#xff08;指向&#xff09;数据&#xff0c;这样就可以在这些数据结构上实现…

00-Rust前言

问&#xff1a;为什么要近期想学习Rust? 答&#xff1a; Rust出来也是有一段时间了&#xff0c;从Microsoft吵着要重构他们的C"祖传代码"开始&#xff0c;Rust就披着“高效&#xff0c;安全”的头衔。而自己决定要学习Rust&#xff0c;是因为近期发现&#xff1a;涉…

linux驱动(八):block,net

本文主要探讨210的block驱动和net驱动。 block 随机存取设备且读写是按块进行,缓冲区用于暂存数据,达条件后一次性写入设备或读到缓冲区 块设备与字符设备:同一设备支持块和字符访问策略,块设备驱动层支持缓冲区,字符设备驱动层没有缓冲 块设备单位:扇…

【iOS】UICollectionView使用

使用UITableView作为表格来展示数据完全没有问题&#xff0c;但仍有许多局限性&#xff0c;对于一些更加复杂的布局样式&#xff0c;就有些力不从心了 比如&#xff0c;UITableView只允许表格每一行只能显示一个cell&#xff0c;而不能在一行中显示多个cell&#xff0c;对于这…