Pytest 结合 Allure 生成测试报告

news2025/1/15 19:57:38

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

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

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.coloradmin.cn/o/1401117.html

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

相关文章

Qt拖拽事件简单实现

1.相关说明 重写resizeEvent(这个按需重写)、dragEnterEvent(拖拽事件函数)、dropEvent(放下事件函数)&#xff0c;可以将本地图片拖拽到label标签中 2.相关界面 3.相关代码 #include "widget.h" #include "ui_widget.h" #include <QDragEnterEvent>…

5G_系统同步机制(八)

BBU和RRU的同步机制 为什么要做到系统同步 在TDD模式下工作时&#xff0c;为了避免相邻小区之间的干扰&#xff0c;近距离的所有gNB在任何时间点都必须具有相同的传输方向(DL或UL)。这样做的必要条件是在BTS之间同步SFN (System Frame number)和time Slot。此外&#xff0c;由…

c++程序的内存模型,new操作符详解

目录 内存四区 程序运行前 代码区 全局区 程序运行后 栈区 堆区 new操作符 创建一个数 创建一个数组 内存四区 不同区域存放不同的数据&#xff0c;赋予不同的生命周期&#xff0c;让我们更加灵活的编程 程序运行前 程序运行前就有代码区和全局区 代码区 程序编…

STM32标准库开发——PWM驱动代码

PWM驱动初始化代码 使能定时器二时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);设置定时器时钟源 TIM_InternalClockConfig(TIM2);配置定时器二的时基单元 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; TIM_TimeBaseInitStruct.TIM_ClockDivisionTIM_CKD_D…

java面试——juc篇

一、线程基础 1、进程与线程的区别&#xff1f;&#xff08;⭐⭐⭐&#xff09; 进程&#xff1a;进程是程序的一次执行过程&#xff0c;是操作系统资源分配的基本单位。程序由指令和数据组成&#xff0c;指令要运行就得加载至CPU&#xff0c;数据要读写就得加载至内存&#…

【嘉立创EDA-PCB设计指南】4.模块化布局

前言&#xff1a;本文对本专栏中的【嘉立创EDA-PCB设计指南】前面绘制的原理图进行模块化布局&#xff0c;首先进行预布局&#xff08;将每个模块放一起&#xff09;&#xff0c;然后进行精细化布局&#xff08;按照原理图来精细化布局&#xff09;。 目录 模块化预布局 模块…

电梯调度问题文献阅读

电梯调度问题文献阅读 文章目录 电梯调度问题文献阅读[toc]文献阅读1. 陈纪龙,孟洪兵,吴刚等.六层电梯模拟系统的研究与实现[J].伊犁师范学院学报(自然科学版),2014,8(01):57-62.2. 陈福兰,杜虹.浅析电梯并联运行的几种调度方法[J].装备制造技术,2012,(10):178-180190.3. 马春江…

洛谷(CodeForces)历年愚人节题目,难度普及+/提高,让你怀疑自己智商

INTERCALC 题目描述 DO YOU EXPECT ME TO FIND THIS OUT? WHAT BASE AND/XOR LANGUAGE INCLUDES string? DON’T BYTE OF MORE THAN YOU CAN CHEW YOU CAN ONLY DISTORT THE LARGEST OF MATHEMATICS SO FAR SAYING “ABRACADABRA” WITHOUT A MAGIC AND WON’T DO YOU …

IDEA怎么用Devtools热部署

IDEA怎么用Devtools热部署 大家知道在项目开发过程中&#xff0c;有时候会改动代码逻辑或者修改数据结构&#xff0c;为了能使改动的代码生效&#xff0c;往往需要重启应用查看改变效果&#xff0c;这样会相当耗费时间。 重启应用其实就是重新编译生成新的Class文件&#xff0…

流量控制与熔断利器:Sentinel介绍

这是《百图解码支付系统设计与实现》专栏系列文章中的第&#xff08;19&#xff09;篇&#xff0c;也是流量控制系列的第&#xff08;6&#xff09;篇。点击上方关注&#xff0c;深入了解支付系统的方方面面。 本篇聊聊流量控制与熔断利器Sentinel&#xff0c;背后的原理&…

【经典算法】有趣的算法之---粒子群算法梳理

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 粒子群算法 粒子群算法&#xff08;Particle Swarm Optimization&#xff0c;PSO&#xff09;是一种用于解决优化问题的元启发式算法。它通过模拟鸟群或…

csv数据导入hive表

文章目录 前言1、将csv文本文件放置hdfs目录下2、登录hive并进入到指定数据库3、创建表4、执行导入语句5、例子: 二、使用hue将csv数据导入hive表总结 前言 介绍将csv数据导入hive表 1、将csv文本文件放置hdfs目录下 2、登录hive并进入到指定数据库 3、创建表 create extern…

【Python代码】以线性模型为例,详解深度学习算法流程,包括数据生成、定义模型、损失函数、优化算法和训练

**使用带有噪声的线性模型构造数据集&#xff0c;并根据有限的数据恢复该线性模型的参数。**其中包括数据集构造、模型参数初始化、损失函数定义、定义优化算法和训练等过程。是大多数算法实现过程的一个缩影&#xff0c;理解此过程有助于在开发或改进算法时更深刻了解其算法的…

C#,实用新型加强版的整数数组

疫苗要打加强针&#xff01;数组要用加强版&#xff01; 三连发 加强版整数数组源代码https://mp.csdn.net/mp_blog/creation/editor/124151056 加强版实数数组源代码https://mp.csdn.net/mp_blog/creation/editor/124151110 加强版泛型数组源代码https://mp.csdn.net/mp_bl…

软件资源管理下载系统全新带勋章功能 + Uniapp前端

测试环境&#xff1a;php7.1。ng1.2&#xff0c;MySQL 5.6 常见问题&#xff1a; 配置好登录后转圈圈&#xff0c;检查环境及伪静态以及后台创建好应用 上传图片不了&#xff0c;检查php拓展fileinfo 以及public文件权限 App个人主页随机背景图&#xff0c;在前端uitl文件…

Java 面向对象02 封装 (黑马)

人画圆&#xff1a;画圆这个方法应该定义在园这个类里面。 人关门&#xff1a;是人给了门一个作用力&#xff0c;然后门自己关上了门&#xff0c;所以关门的方法是在门的类里面 封装对象的好处&#xff1a; 调用Java自带的方法举例实现&#xff1a; 在测试类中&#xff0c;对其…

Java中验证码功能的解决方案

目录​​​​​​​ 1、前言 2、随机数字验证码 2.1 使用Java的Random类生成随机数字 2.2 使用Java的Graphics2D类在图片上绘制验证码 3、字符验证码 3.1 生成包含随机字符的字符串 3.2 使用Java的Graphics2D类在图片上绘制验证码 ​​​​​​​​​​​​​​4、数学…

【设计模式】代理模式例子解析

代理模式&#xff0c;顾名思义&#xff0c;就是我们在需要访问一个类时&#xff0c;并不直接调用这个类&#xff0c;而是通过一个"代理"来间接地实现这个过程。 这个“代理”就像是真实对象的一个接口&#xff0c;所有的对于真实对象的操作都需要通过这个“代理”来…

IP劫持的危害分析及应对策略

在当今数字化时代&#xff0c;网络安全问题备受关注&#xff0c;其中IP劫持是一种常见而危险的威胁。本文将深入探讨IP劫持的危害&#xff0c;并提供一些有效的应对策略。 第一部分&#xff1a;IP劫持的定义 IP劫持是指黑客通过各种手段获取并篡改目标IP地址的控制权&#xf…

怎么提升搜狗网站排名

在当今数字化时代&#xff0c;网站排名对于品牌、企业以及个人都至关重要。而对于许多网站来说&#xff0c;搜狗搜索引擎是一个重要的流量来源。为了在搜狗上取得更好的排名&#xff0c;不仅需要优化网站内容&#xff0c;还需要巧妙运用一些工具和技巧。在本文中&#xff0c;我…