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,一经查实,立即删除!

相关文章

c#之函数

1. 定义一个函数,用来取得数字的和,但是数字的个数不确定 (1) class Program{static int Sum(int[] array){int num 0;for (int i 0; i < array.Length; i){num num array[i];}return num;}static void Main(string[] args){int sum Sum(new int[]{12,13,34,5,68,9,9…

echarts-wordcloud词云

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

Hive架构设计

我们知道MapReduce和Spark它们提供了高度抽象的编程接口便于用户编写分布式程序,它们具有极好的扩展性和容错性,能够处理超大规模的数据集。这些计算引擎提供了面向高级语言(比如Java,Python等)的编程接口,然而,考虑到分布式程序编写的复杂性,直接使用这些编程接口实现…

Django中解决跨域问题

同源策略&#xff08;Same origin policy&#xff09;是一种约定&#xff0c;它规定了 请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同&#xff0c;如果不一致&#xff0c;请求会发送成功&#xff0c;后端会正常响应&#xff0c;但是浏览器会拦截 …

面试2024.1.20

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

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

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

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

环境搭建等参考&#xff1a;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 神经网络中,卷积运算在整个模型中的比例占据是相当高,而卷积运算的核心计算就是乘累加计算。因此,只要将最核心的乘累加计算效率…

2024成都线路板展览会|全国线路板展

时 间&#xff1a;2024年7月17&#xff5e;19日 地 点&#xff1a;成都世纪城新国际会展中心 ◆ 》》》展会概况&#xff1a; 电路板是电子产品的关键电子互联件&#xff0c;被誉为“电子产品之母”。电路板行业作为电子信息产业中重要的组成部分&#xff0c;受到国家产…

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

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

React Hooks 基本使用

背景 class 组件如果业务复杂&#xff0c;很难拆分和重构&#xff0c;很难测试&#xff1b;相同业务逻辑分散到各个方法中&#xff0c;逻辑混乱逻辑复用像HOC、Render Props&#xff0c;不易理解&#xff0c;学习成本高React提倡函数式编程&#xff0c;函数更易拆分&#xff0…

如何在 Ubuntu / Raspbian 上安装 MariaDB

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

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

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

大数据小白初探Hbase从零到入门

目录 1.前言 2.初识Hbase 2.1 有了HDFS为什么还需要HBase呢? 2.2 HBase主要做什么的? 2.3 HBase架构特点? 2.4 HBase的适用场景? 2.5 HBase的数据模型和物理储存格式? 2.5.1 逻辑表结构 2.5.2 物理存储 2.5.3 分布式集群框架部署图 2.5.4 HBase的逻辑本质: 2…

Python 循环结构练习-穷举法

穷举法&#xff1a;穷尽所有的可能性&#xff0c;然后设置条件&#xff0c;找到问题的解 —> 暴力破解法 题目1&#xff1a;鸡翁一值钱5&#xff0c;鸡母一值钱3&#xff0c;鸡雏三值钱1&#xff0c;用百钱买百鸡&#xff0c;问鸡翁、鸡母、鸡雏几何。 实现&#xff1a; …

Kotlin 尾递归函数

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

TCP缓存(C++)

系统为每个 socket 创建了发送缓冲区和接收缓冲区&#xff0c;应用程序调用 send()/write()函数发送数据的 时候&#xff0c;内核把数据从应用进程拷贝 socket 的发送缓冲区中&#xff1b;应用程序调用 recv()/read()函数接收数据的时候&#xff0c;内核把数据从 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、前言 参考&#xff1a; 普中51单片机开发攻略–A2.pdf 1、数码管介绍 上一章我们主要是介绍一位数码管的内部结构及控制原理。下面我们再来介 绍下多位数码管及动态显示原理的相关知识。 1.1 多位数码管简介 2、74HC245 和 74HC138 芯片介绍 2.1 74HC245 芯片简介 2.2 7…

nginx 搭建docker 似有hub仓库

当使用 SSL/TLS 证书并希望通过 HTTPS 访问 Docker Registry 时&#xff0c;通常会使用 Nginx 作为反向代理。这样做可以为 Docker Registry 提供 HTTPS 支持&#xff0c;同时还可以利用 Nginx 的其他功能&#xff0c;如负载均衡和缓存。下面是使用 Nginx 作为反向代理设置私有…