自动化测试基础——allure下载安装及配置及pytest + allure-pytest插件生成allure企业级测试报告及企业级定制

文章目录

  • 前言
  • 一、allure下载
  • 二、allure安装
  • 三、allure目录介绍
  • 四、allure环境变量配置
  • 五、pytest + allure-pytest插件生成allure企业级测试报告
  • 六、allure企业级报告的log定制
  • 七、allure企业级报告功能内容定制
    • 1.功能左边层级定制
    • 2.功能右边优先级定制
    • 3.功能右边测试用例描述定制
    • 4.功能右边测试用例链接定制
    • 5.功能右边测试用例测试步骤定制
    • 6.功能右边测试用例测试步骤+附件定制
    • 6.功能右边测试用例测试步骤+文本内容定制
  • 八、局域网下查看allure测试报告
    • 1.局域网(内网)
    • 2.局域网(外网)

前言

allure 是一个java测试报告框架。所以要基于JDK环境

  • JDK下载与安装及配置:https://blog.csdn.net/weixin_44904239/article/details/116291544

一、allure下载

  • allure下载地址:https://github.com/allure-framework/allure2/releases

二、allure安装

  • 将下载好的安装包解压到需要存放的路径下(我这边存放在了D盘的根目录下)

    在这里插入图片描述

    在这里插入图片描述

三、allure目录介绍

  • bin:命令文件

  • config:配置文件

  • lib:存放jar包

  • plugins:插件

    在这里插入图片描述

四、allure环境变量配置

  1. 此电脑 → 属性

    在这里插入图片描述

  2. 高级系统设置

    在这里插入图片描述

  3. 环境变量

    在这里插入图片描述

  4. 双击系统变量下的Pash

    在这里插入图片描述

  5. 新建

    在这里插入图片描述

  6. 填写 allure 安装的路径 → 确定(D:\allure-2.21.0\bin)

    在这里插入图片描述

  7. 确定

    在这里插入图片描述

  8. 确定

    在这里插入图片描述

  9. Windows系统及PyCharm中验证

    allure --version
    

    在这里插入图片描述

    在这里插入图片描述

注意:allure环境变量配置完成以后,Windows窗口验证没问题,pycharm验证有问题,则重启pycharm重新验证即可

五、pytest + allure-pytest插件生成allure企业级测试报告

  1. 安装 pytest allure-pytest 插件

    pip install pytest 
    pip install allure-pytest
    
  2. 配置 pytest.ini 全局配置文件

    # --alluredir=./temps:设置allure生成临时的json格式的报告存放的路径
    # --clean-alluredir:清空上一次运行的记录addopts = -vs --alluredir=./temps --clean-alluredir
    

    在这里插入图片描述

  3. pytest测试框架的主函数入口配置

    参数作用
    generte生成报告
    tempsallure生成临时的json格式的报告存放的路径
    -o生成allure报告的目录
    report生成allure报告存放的目录
    -c,–clean清空
    import osimport pytest# 运行pytest测试框架的主函数
    if __name__ == '__main__':pytest.main()# 调用allure生成报告os.system("allure generate ./temps -o ./report --clean")
    

    在这里插入图片描述

注意:需要通过pytest主函数执行才会生成allure的html测试报告

  1. 查看allure生成的html测试报告

    在这里插入图片描述
    在这里插入图片描述

  2. 修改allure报告的语言

    在这里插入图片描述

    在这里插入图片描述

六、allure企业级报告的log定制

  1. 前往allure安装目录下的plugins存放插件的目录下复制定制log的插件名称

    在这里插入图片描述

  2. 将复制的插件名称粘贴到allure安装目录下的config目录下的allure.yml文件中

    config目录下的allure.yml文件中配置自定义的logo插件

    - custom-logo-plugin
    

    在这里插入图片描述

    在这里插入图片描述

  3. 重新启动pytest生成allure报告,查看是否启用自定义log插件

    在这里插入图片描述

  4. 将准备好的log图片放到allure安装目录下的plugins\custom-logo-plugin\static定制log的插件路径下

    在这里插入图片描述

  5. 修改allure安装目录下的plugins\custom-logo-plugin\static定制log的插件路径下的styles.css文件

    通过修改这两个参数来调整log图片的大小和位置:margin-left: 10px;height: 90px;

    .side-nav__brand {background: url('log.jpg') no-repeat left center !important;margin-left: 10px;height: 90px;background-size: contain !important;
    }.side-nav__brand-text {display: none;
    }
    

    在这里插入图片描述
    在这里插入图片描述

  6. 重新启动pytest生成allure报告,查看是否定制log成功

    在这里插入图片描述

七、allure企业级报告功能内容定制

1.功能左边层级定制

在这里插入图片描述

  • (1)项目名称(史诗):@allure.epic()

  • (2)模块名称(特性):@allure.feature()

  • (3)接口名称(分组):@allure.story()

  • (4)用例标题:有两种方式(两种效果是一样的,方式二更加灵活)

    • 方式一:@allure.title()
    • 方式二:allure.dynamic.title()

    方法一

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.title("用例名称-验证成功登陆")def test_login(self):print("登陆")@allure.story("用户注册接口")@allure.title("用例名称-验证成功注册")def test_register(self):print("注册")@allure.story("添加用户")@allure.title("用例名称-验证成功添加用户")def test_add_user(self):print("添加用户")
    

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    方法二

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")print("登陆")@allure.story("用户注册接口")def test_register(self):allure.dynamic.title("用例名称-验证成功注册")print("注册")@allure.story("添加用户")def test_add_user(self):allure.dynamic.title("用例名称-验证成功添加用户")print("添加用户")
    

    在这里插入图片描述

注意:每次修改内容后要查看预期结果需要重新执行allure生成报告

2.功能右边优先级定制


优先级默认都是:normal

在这里插入图片描述

  • 测试用例严重级别:

    • BLOCKER:致命的(@allure.severity(allure.severity_level.BLOCKER)
    • CRITICAL:严重的(@allure.severity(allure.severity_level.CRITICAL)
    • NORMAL:正常的(@allure.severity(allure.severity_level.NORMAL)
    • MINOR:轻微的(@allure.severity(allure.severity_level.MINOR)
    • TRIVIAL:不重要的(@allure.severity(allure.severity_level.TRIVIAL)
    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")print("登陆")@allure.story("用户注册接口")@allure.severity(allure.severity_level.CRITICAL)def test_register(self):allure.dynamic.title("用例名称-验证成功注册")print("注册")@allure.story("添加用户")@allure.severity(allure.severity_level.NORMAL)def test_add_user(self):allure.dynamic.title("用例名称-验证成功添加用户")print("添加用户")@allure.story("删除用户")@allure.severity(allure.severity_level.MINOR)def test_delete_user(self):allure.dynamic.title("用例名称-验证成功删除用户")print("删除用户")@allure.story("修改用户")@allure.severity(allure.severity_level.TRIVIAL)def test_update_user(self):allure.dynamic.title("用例名称-验证成功修改用户")print("修改用户")
    

    在这里插入图片描述
    在这里插入图片描述

3.功能右边测试用例描述定制

  • 测试用例的描述定制:有两种方式

    • 方式一:@allure.description()
    • 方式二:allure.dynamic.description()

    方法一:

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)@allure.description("这是验证登陆是否成功")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")print("登陆")@allure.story("用户注册接口")@allure.severity(allure.severity_level.CRITICAL)@allure.description("这是验证注册是否成功")def test_register(self):allure.dynamic.title("用例名称-验证成功注册")print("注册")@allure.story("添加用户")@allure.severity(allure.severity_level.NORMAL)@allure.description("这是验证添加用户是否成功")def test_add_user(self):allure.dynamic.title("用例名称-验证成功添加用户")print("添加用户")@allure.story("删除用户")@allure.severity(allure.severity_level.MINOR)@allure.description("这是验证删除用户是否成功")def test_delete_user(self):allure.dynamic.title("用例名称-验证成功删除用户")print("删除用户")@allure.story("修改用户")@allure.severity(allure.severity_level.TRIVIAL)@allure.description("这是验证修改用户是否成功")def test_update_user(self):allure.dynamic.title("用例名称-验证成功修改用户")print("修改用户")

    在这里插入图片描述
    在这里插入图片描述
    方法二:

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")allure.dynamic.description("这是验证登陆是否成功")print("登陆")@allure.story("用户注册接口")@allure.severity(allure.severity_level.CRITICAL)def test_register(self):allure.dynamic.title("用例名称-验证成功注册")allure.dynamic.description("这是验证注册是否成功")print("注册")@allure.story("添加用户")@allure.severity(allure.severity_level.NORMAL)def test_add_user(self):allure.dynamic.title("用例名称-验证成功添加用户")allure.dynamic.description("这是验证添加用户是否成功")print("添加用户")@allure.story("删除用户")@allure.severity(allure.severity_level.MINOR)def test_delete_user(self):allure.dynamic.title("用例名称-验证成功删除用户")allure.dynamic.description("这是验证删除用户是否成功")print("删除用户")@allure.story("修改用户")@allure.severity(allure.severity_level.TRIVIAL)def test_update_user(self):allure.dynamic.title("用例名称-验证成功修改用户")allure.dynamic.description("这是验证修改用户是否成功")print("修改用户")
    

    在这里插入图片描述

    在这里插入图片描述

4.功能右边测试用例链接定制

  • @allure.link():接口访问链接

  • @allure.issue():bug链接

  • @allure.testcase():测试用例链接

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)@allure.link("接口访问链接")@allure.issue("bug链接")@allure.testcase("测试用例链接")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")allure.dynamic.description("这是验证登陆是否成功")print("登陆")
    

    在这里插入图片描述

    在这里插入图片描述

5.功能右边测试用例测试步骤定制

  • 测试步骤定制:两种方式(常用第二种

    • 方式一:@allure.step()
    • 方式二:with allure.step():

    方法一:

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)@allure.link("接口访问链接")@allure.issue("bug链接")@allure.testcase("测试用例链接")@allure.step("测试步骤:输入用户名、输入密码、点击登陆")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")allure.dynamic.description("这是验证登陆是否成功")print("登陆")
    

    在这里插入图片描述
    在这里插入图片描述

    方法二:

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)@allure.link("接口访问链接")@allure.issue("bug链接")@allure.testcase("测试用例链接")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")allure.dynamic.description("这是验证登陆是否成功")with allure.step("第一步:输入用户名"):print("输入用户名")with allure.step("第二步:输入密码"):print("输入密码")with allure.step("第三步:点击登陆"):print("点击登陆")print("登陆")
    

    在这里插入图片描述
    在这里插入图片描述

6.功能右边测试用例测试步骤+附件定制

  • 测试用例步骤+附件(一般用于错误截图(一般用于web自动化测试))

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)@allure.link("接口访问链接")@allure.issue("bug链接")@allure.testcase("测试用例链接")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")allure.dynamic.description("这是验证登陆是否成功")print("登陆")# 测试步骤for i in range(1, 6):with allure.step("第" + str(i) + "步"):pass# 错误截图with open("D:\\error.png", mode="rb") as f:result = f.read()allure.attach(body=result, name="错误截图", attachment_type=allure.attachment_type.PNG)
    

    在这里插入图片描述

    在这里插入图片描述

6.功能右边测试用例测试步骤+文本内容定制

  • 文本内容定制:一般应用于接口自动化

  • 文本内容定制:allure.attach("文本内容", name="文本名称", attachment_type=allure.attachment_type.TEXT)

    import allure@allure.epic("项目名称-智考1.0")
    @allure.feature("模块-用户管理模块")
    class TestFirstClass():@allure.story("用户登陆接口")@allure.severity(allure.severity_level.BLOCKER)@allure.link("接口访问链接")@allure.issue("bug链接")@allure.testcase("测试用例链接")def test_login(self):allure.dynamic.title("用例名称-验证成功登陆")allure.dynamic.description("这是验证登陆是否成功")print("登陆")# 测试步骤for i in range(1, 6):with allure.step("第" + str(i) + "步"):pass# 错误截图with open("D:\\error.png", mode="rb") as f:result = f.read()allure.attach(body=result, name="错误截图", attachment_type=allure.attachment_type.PNG)# 接口自动化:文本# 请求四要素allure.attach("接口地址:https://www.baidu.com", name="文本1", attachment_type=allure.attachment_type.TEXT)allure.attach("接口参数:{一般从yaml中获取}", name="文本2", attachment_type=allure.attachment_type.TEXT)allure.attach("接口请求方式:get", name="文本3", attachment_type=allure.attachment_type.TEXT)allure.attach("请求头:{一般从yaml中获取}", name="文本4", attachment_type=allure.attachment_type.TEXT)# 响应内容allure.attach("响应文本:{一般从yaml中获取}", name="文本5", attachment_type=allure.attachment_type.TEXT)allure.attach("接口执行结果:成功/失败", name="文本6", attachment_type=allure.attachment_type.TEXT)
    

    在这里插入图片描述

    在这里插入图片描述

八、局域网下查看allure测试报告

1.局域网(内网)


让公司内部局域网下其他人员查看allure测试报告(通过下面方法,将得到的链接地址分析给其他人员即可)

  • 命令:allure open allure测试报告地址

    allure open ./report
    

在这里插入图片描述
在这里插入图片描述

2.局域网(外网)


需要做网络映射,需要运维人员去完成,不属于测试的工作范围

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

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

相关文章

Qt绘制动态罗盘

介绍:罗盘指针以30角旋转巡逻,扫描航海范围内的点位,并绘制点云。字段信息在表格中显示,该数据都存储在数据库中。选择不同的范围,显示该范围内的点位。 #include "mainwindow.h" #include "ui_mainwi…

Vue form中明细的el-table中删除行,界面除行时,数据删除了,但是列表不刷新。

<el-table :data"form.dataList"> …… </el-table > 当删除行后&#xff0c;数据为list&#xff0c; 数据代码如下&#xff1a; this.form.dataList list; 经常出现数据不进行刷新&#xff0c;但有时刷新是正确的。 把代码改成如下&#xff0c;就一…

魔行观察-每日品牌监测-书亦烧仙草-开店趋势

今日监测对象&#xff1a;书亦烧仙草&#xff0c;监测时间段&#xff1a;2014年9月至2023年12月&#xff0c;发布时间&#xff1a;2024-03-05 数据获取地址&#xff1a;魔查查https://www.moxingdata.com/品牌基础信息 现有门店人均消费覆盖省份经营模式投资金额837918.431特…

【力扣hot100】刷题笔记Day20

前言 今天学习了一句话“自己如果不努力&#xff0c;屎都吃不上热乎的”&#xff0c;话糙理不糙&#xff0c;与君共勉 35. 搜索插入位置 - 力扣&#xff08;LeetCode&#xff09; 二分查找 class Solution:def searchInsert(self, nums: List[int], target: int) -> int:n…

react hook: useCallback

useCallback的主要使用场景在于优化性能&#xff0c;并确保当传递回调函数给子组件时&#xff0c;子组件不会因为父组件的重渲染而重新创建函数。 使用场景 1.当你需要将回调函数传递给子组件时&#xff0c;使用useCallback可以确保子组件在重新渲染时不会不必要地重新创建函数…

【金三银四】每日一点面试题(Java--JUC篇)

1、如何在java中实现多线程&#xff1f; 在Java中实现多线程主要有四种方式&#xff1a; 继承 Thread 类 当一个类继承自Java的Thread类时&#xff0c;它就成为一个线程类。您需要做的只是覆盖run方法&#xff0c;该方法包含线程启动后执行的代码。 class MyThread extends …

10亿数据如何快速插入MySQL

最快的速度把10亿条数据导入到数据库,首先需要和面试官明确一下,10亿条数据什么形式存在哪里,每条数据多大,是否有序导入,是否不能重复,数据库是否是MySQL? 有如下约束 10亿条数据,每条数据 1 Kb 数据内容是非结构化的用户访问日志,需要解析后写入到数据库 数据存放在…

CMIP6数据处理方法与典型案例分析

气候变化对农业、生态系统、社会经济以及人类的生存与发展具有深远影响&#xff0c;是当前全球关注的核心议题之一。IPCC&#xff08;Intergovernmental Panel on Climate Change&#xff0c;政府间气候变化专门委员会&#xff09;的第六次评估报告明确&#xff1b;指出&#x…

【笔记】【电子科大 离散数学】 3.谓词逻辑

谓词引入 因为含变量的语句&#xff08;例如x > 3&#xff09;不是命题&#xff0c;无法进行逻辑推理。 为了研究简单命题句子内部的逻辑关系&#xff0c;我们需要对简单命题进行分解&#xff0c;利用个体词&#xff0c;谓词和量词来描述它们&#xff0c;并研究个体与总体…

JavaScript实现鼠标移动特效

关键代码&#xff1a; <script>document.onmousemove function (e) {// 加div节点var div document.createElement(div);div.style.width 5px;div.style.height 5px;// 加img节点var img document.createElement(img);// 将Img追加到div里面。div.appendChild(img);…

Python开发工具:pycharm使用注意事项以及设置

上一篇文章写了pycharm的安装以及运行&#xff0c;但是在安装过程中遇到了一些问题&#xff0c;接下来详细解析安装过程中遇到的问题&#xff0c;注意事项以及设置配置依赖等信息 安装遇到的问题&#xff1a; 协议许可证关闭不了&#xff1a;PyCharm安装完成后&#xff0c;打…

数据传输的同步技术包含哪些?如何高效安全传输数据?

在数字化时代&#xff0c;数据传输的同步技术对于确保信息的一致性和通信质量至关重要。本文将探讨数据传输同步技术的种类、如何实现高效安全的数据传输&#xff0c;以及企业在数据迁移中常用的几种方式。最后&#xff0c;我们将重点介绍镭速大数据迁移工具的优势。 数据传输同…

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘

Python成功解决AttributeError: ‘Series‘ object has no attribute ‘set_value‘ &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&am…

简单介绍AudioLM

主要介绍AudioLM&#xff0c;学习资料为知乎文章。这里只介绍核心思想和模块。 AudioLM 基本信息 AudioLM: a Language Modeling Approach to Audio Generation pdf: https://arxiv.org/pdf/2209.03143.pdf 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/637196330 模…

SQL 数据库安全的基本概念和技术

大家好&#xff0c;SQL 是一种功能强大且被广泛使用的操纵关系数据库的语言。数据库开发人员和管理员应该重视数据库安全并承担保护数据安全的责任&#xff0c;确保数据不会被未经授权的访问、修改或删除。本文将介绍 SQL 数据库安全的相关基本概念和技术&#xff0c;帮助大家了…

GPT提示语格式——个人自用

总体格式 指令&#xff1a;将 输入 划分为/翻译为/提取出/... 输出 输出格式&#xff1a;... 输入示例&#xff1a;... 输出示例&#xff1a;... 输入&#xff1a;... 输出&#xff1a;基本概述 示例 指令&#xff1a; 提取以下文本中的介词。 输入&#xff1a;“虽然这些发展…

MQ消息队列

rocketMq 与 kafaka 的区别 RocketMQ 和 Kafka 都是分布式消息中间件&#xff0c;主要用于处理高吞吐量、低延迟的消息传递。它们各自有其特点和适用场景&#xff0c;在以下几个方面存在显著区别&#xff1a; 架构设计&#xff1a; Kafka&#xff1a;采用了多分区&#xff08;p…

Elasticsearch:向量相似度计算 - 可笑的速度

作者&#xff1a;Chris Hegarty 任何向量数据库的核心都是距离函数&#xff0c;它确定两个向量的接近程度。 这些距离函数在索引和搜索期间执行多次。 当合并段或在图表中导航最近邻居时&#xff0c;大部分执行时间都花在比较向量的相似性上。 对这些距离函数进行微观优化是值…

记录一次bug

Component inside renders non-element root node that cannot be animated. 这可能导致 页面切换过度动画失败&#xff0c;导致页面空白&#xff0c;需要有一个公共根组件 放在一个根元素下面即可

STM32利用标准库编写PA0和PA4中断proteus仿真

首先先看看结果吧&#xff1a;昨天学习的是5--9或10--15引脚的中断&#xff0c;如果选择的是0到4口应该怎么办呢&#xff1f;今天就学习的这个&#xff0c;特此记录一下&#xff1a; 整个工程打包好了&#xff0c;直接下载打开就能仿真了&#xff1a; 链接&#xff1a;https:/…