Allure 内置特性

章节目录:

    • 一、内置特性概述
    • 二、展示环境信息
    • 三、测试结果分类
    • 四、用例步骤说明
    • 五、添加附件
    • 六、添加用例描述
    • 七、设置动态的用例标题
    • 八、报告中添加链接
    • 九、组织测试结果
      • 9.1 使用与理解
      • 9.2 指定运行
    • 十、划分用例级别
    • 十一、动态生成附加信息
    • 十二、清空历史报告记录
    • 十三、生成静态样式报告
    • 十四、结束语

一、内置特性概述

  • “Allure 的内置特性” 指的是 Allure 测试报告框架本身提供的功能和功能组件
  • 这些内置特性是在 Allure 框架中内置的,可以直接使用而无需额外的配置或定制。
  • 这些内置特性使得 Allure 成为一个强大而灵活的测试报告框架,有助于生成具有可视化效果和丰富信息的测试报告,提供更好的测试结果分析和问题排查能力

二、展示环境信息

在 Allure 报告中,environment.properties 是一个用于定义测试环境信息的配置文件。该文件可以包含各种与测试环境相关的属性和值,如操作系统、浏览器版本、测试数据等。这些信息将被包含在报告中,以提供关于测试运行环境的上下文信息。

  • 展示的位置

  • 在 allure 测试结果目录创建 environment.properties 文件。

  • 配置信息

Browser=Chrome(119.0.6045.124)
Python=3.8
  • 重启服务
# test-results 为收集测试结果的目录。
allure serve test-results
  • 查看展示

三、测试结果分类

在 Allure 报告中,categories.json 是一个用于定义测试结果分类和筛选的配置文件。该文件可以帮助你在报告中将测试用例按照不同的维度进行分类和过滤,以便更好地组织和分析测试结果。

  • 在 allure 报告目录创建 categories.json 文件。
  • categories.json 结构
[
    {
        "name":"Category Name",
        "matchedStatuses":[
            "status1",
            "status2"
        ],
        "messageRegex":"regex pattern",
        "traceRegex":"regex pattern"
    }
]
  • name分类的名称,用于在报告中显示。
  • matchedStatuses匹配的测试结果状态列表。只有匹配到指定状态的测试结果才会被包含在该分类中。状态可以是 Allure 报告中定义的标准状态,如 passedfailedbrokenskipped 等,也可以是自定义的状态。
  • messageRegex(可选):一个正则表达式模式,用于匹配包含特定信息的测试结果。只有测试结果的消息文本与该正则表达式匹配时,才会被包含在该分类中。
  • traceRegex(可选):一个正则表达式模式,用于匹配包含特定堆栈跟踪信息的测试结果。只有测试结果的堆栈跟踪文本与该正则表达式匹配时,才会被包含在该分类中。
  • 配置示例
[
  {
    "name": "忽略的用例", 
    "matchedStatuses": ["skipped"] 
  },
  {
    "name": "产品缺陷",
    "matchedStatuses": ["failed"]
  },
  {
    "name": "用例本身问题",
    "matchedStatuses": ["broken"]
  }
]
  • 重启服务,查看展示

四、用例步骤说明

@allure.step() 是 Allure 框架提供的一个装饰器,可以将一个方法或函数标记为测试步骤。它有助于通过将测试用例拆分为较小的可管理步骤来组织和记录测试。

  • 代码示例
import allure


@allure.step("步骤1:登录系统")
def login(username, password):
    pass


@allure.step("步骤2:进行搜索")
def search(keyword):
    pass


@allure.step("步骤3:验证结果")
def verify_result():
    pass


def test_example_01():
    # 使用步骤
    login("username", "password")
    search("keyword")
    verify_result()
    assert 1 + 1 == 2


def test_example_2():
    assert 1 + 1 == 3

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

五、添加附件

allure.attach() 是 Allure 框架提供的一个函数,用于在测试报告中添加附件。它可以用于添加任何类型的文件、截图、日志等与测试相关的附件信息。

  • 代码示例
import allure


def test_example():
    # 执行一些测试步骤。
    assert 1 + 1 == 2

    # 1.添加文件作为附件。
    allure.attach.file("log/test.log", name="test.log", attachment_type=allure.attachment_type.TEXT)
    allure.attach.file("imgs/1.png", name="1.png", attachment_type=allure.attachment_type.PNG)

    # 创建带有超链接的文本。
    link_text = '<a href="https://www.baidu.com">baidu</a>'
    # 2.添加带有超链接的文本作为附件。
    allure.attach(link_text, name='Example Link', attachment_type=allure.attachment_type.HTML)

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

六、添加用例描述

@allure.description() 是一个装饰器,可以用于添加描述信息到 Allure 报告中的测试用例。此外,也可以通过在函数下方添加注释达到一样的效果。

  • 代码示例
import allure


@allure.description("这是 test_example_01 的描述。")
def test_example_01():
    assert 1 + 1 == 2


def test_example_02():
    """
    这是 test_example_02 的描述。
    """
    assert 1 + 1 == 2

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

七、设置动态的用例标题

@allure.title() 是一个装饰器,用于为 Allure 报告中的测试用例设置标题。

  • 代码示例
import allure
import pytest

# 1.测试数据。
data = [
    ["正向用例", "root", 666666],
    ["密码错误", "root", 888888],
    ["用户名传空", "", 888888],
]


# 2.执行测试时,参数化标题名。
@allure.title("登录: {title}")
@pytest.mark.parametrize("title,user_name,password", data)
def test_login(title, user_name, password):
    user_name = str(user_name)
    password = int(password)
    assert user_name == "root" and password == 666666

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

八、报告中添加链接

@allure.link() 是一个装饰器,用于在 Allure 报告中添加链接。

  • 代码示例
import allure


@allure.link("https://www.baidu.com", name="这是普通的网站访问链接。")
def test_example_01():
    assert 1 + 1 == 2


@allure.link("https://www.zentao.net", name="这是禅道的缺陷管理链接。")
def test_example_02():
    assert 1 + 1 == 2


@allure.link("https://testlink.org/", name="这是用例管理平台的用例链接。")
def test_example_03():
    assert 1 + 1 == 2

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

九、组织测试结果

@allure.epic(), @allure.feature()@allure.story() 是 Allure 的特性标签,用于在测试报告中提供更多的上下文信息,以便更好地组织和理解测试结果。

9.1 使用与理解

  • 代码示例
import allure


@allure.epic("1号项目")
@allure.feature("登录模块")
class TestLogin:

    @allure.story("登录用例-01")
    def test_case_01(self):
        assert True

    @allure.story("登录用例-02")
    def test_case_02(self):
        assert False


@allure.epic("1号项目")
@allure.feature("商城模块")
class TestCommodity:

    @allure.story("商城用例-01")
    def test_case_01(self):
        assert False


@allure.epic("2号项目")
@allure.feature("搜索模块")
class TestSearch:

    @allure.story("搜索用例-01")
    def test_case_01(self):
        assert True

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

  • epic 是最高级别的概念,表示整个项目或产品的大型功能或目标;

  • feature 是在 epic 下的子级别,表示产品的功能模块

  • 而 story 是在 feature 下的子级别,表示具体的用户故事或需求

  • 测试用例可以属于一个 epic、一个 feature 或一个 story。

  • 通过使用这些装饰器,可以将测试用例组织和分类到不同的 epic、feature 和 story 中,从而更好地组织和展示测试报告,提供更清晰和结构化的测试结果

9.2 指定运行

可以使用命令行方式指定运行特定的 epic、feature 或 story。

  • 示例
# 指定 epics 运行。
pytest --alluredir=test-results --allure-epics="1号项目"

# 指定 feature 运行。
pytest --alluredir=test-results --allure-features="登录模块"

# 指定 story 运行。
pytest --alluredir=test-results --allure-stories="登录用例-02","搜索用例-01"

# 指定 feature + story。
pytest --alluredir=test-results --allure-features="登录模块" --allure-stories="搜索用例-01"

十、划分用例级别

@allure.severity 是 Allure-pytest 插件提供的一个装饰器,用于定义测试用例的严重程度或优先级。通过指定不同的严重程度,可以将测试用例分类为不同的优先级,以便更好地管理和报告测试结果。

  • 常用的严重程度包括

    • blocker阻塞级别,表示测试用例的失败会阻塞系统的正常功能。
    • critical关键级别,表示测试用例的失败会导致系统的关键功能受影响。
    • normal普通级别,表示测试用例的失败对系统的功能影响较小。
    • minor次要级别,表示测试用例的失败对系统的功能影响很小。
    • trivial微不足道级别,表示测试用例的失败对系统的功能影响几乎可以忽略。
  • 代码示例

import allure


def login():
    return False


def registration():
    return True


@allure.severity("critical")
def test_login():
    assert login() == True


@allure.severity("normal")
def test_registration():
    assert registration() == True

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

  • 类似地,也可以命令行指定优先级运行
# 只运行 critical 的测试用例。(多个级别用逗号拼接)
pytest --alluredir=test-results --allure-severities=critical

十一、动态生成附加信息

allure.dynamic 是 Allure 报告中的一个装饰器,用于在测试执行期间动态生成附加信息( attachments )。它允许您在测试运行期间生成、更新或删除附加信息,并将其与测试用例关联。

  • 支持动态修改的方法,例如
allure.dynamic.feature
allure.dynamic.link
allure.dynamic.issue
allure.dynamic.testcase
allure.dynamic.story
allure.dynamic.title
allure.dynamic.description
  • 代码示例
import allure


@allure.title("装饰器标题")
def test_example():
    assert True
    allure.dynamic.title("动态标题")

  • 重新收集测试结果,并启动服务
pytest --alluredir=test-results

allure serve test-results
  • 查看展示

  • 这种方式适用于在测试函数中无法提前获得或准备好的数据,或者需要在测试运行期间生成动态内容的情况。

十二、清空历史报告记录

在使用 pytest 运行测试用例生成 Allure 报告时,如果测试用例的名称修改后重新运行,或者分别运行不同的测试用例文件但将 Allure 报告生成到同一个目录,Allure 报告会保留历史运行记录并同时显示两个文件的测试用例运行情况。

  • --clean-alluredir 是 Allure-pytest 插件提供的一个命令行参数,用于清空 Allure 报告生成目录中的历史数据和文件。
  • 示例
pytest --alluredir <报告目录路径> --clean-alluredir
  • 注意:使用 --clean-alluredir 参数会删除报告目录中的所有文件和子目录,包括历史报告、附件和其他生成的文件。确保在使用此参数之前备份重要的报告数据,以防止数据丢失

十三、生成静态样式报告

上面都是基于 .json 测试结果文件动态生成的报告。接下来我们可以通过更加完整的命令,生成静态样式的报告文件。

  • 命令示例
# 1.初始化生成测试结果。
pytest --alluredir=test-results --clean-alluredir

# 2.生成 allure 的 html 报告。
# 将位于 test-results 目录下的测试结果数据生成 Allure 报告,并将报告文件保存到 allure-report 目录中。
# -c:在生成之前,会先清除报告目录中的旧文件。
allure generate -c test-results allure-report

# 3.打开 allure 报告。
allure open allure-report

# 4.关闭服务。
ctrl + c
输入 "y" 或者 "Y"
  • 生成的报告

  • 当然,也能直接点击 index.html 打开报告。

十四、结束语


“-------怕什么真理无穷,进一寸有一寸的欢喜。”

微信公众号搜索:饺子泡牛奶

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Cesium反向遮罩指定区域挖空---Primitive、PolygonGeometry、PolylineGeometry实现

PolylineRegionalExcavationFun2() {import("./data/安徽省.json").then((res) => {console.log(`res`, res);let features = res.features;let positionArray = [];let borderLinePositionArray = [];// 获取区域的经纬度坐标if (features[0]?.geometry?.coord…

【大数据】Flink 中的状态管理

Flink 中的状态管理 1.算子状态2.键值分区状态3.状态后端4.有状态算子的扩缩容4.1 带有键值分区状态的算子4.2 带有算子列表状态的算子4.3 带有算子联合列表状态的算子4.4 带有算子广播状态的算子 在前面的博客中我们指出&#xff0c;大部分的流式应用都是有状态的。很多算子都…

【陈工笔记-Transformer】Transformer的基础认识

对Transformer生动形象的比喻 Transformer包括了Encoder和Decoder&#xff0c;在知乎上看到了对两个部分关系的一种理解&#xff0c;非常有趣。即&#xff0c;“一个人学习跳舞&#xff0c;Encoder是看别人是如何跳舞的&#xff0c;Decoder是将学习到的经验和记忆&#xff0c;…

被动信息搜集

被动信息搜集主要通过搜索引擎或者社交等方式对目标资产信息进行提取&#xff0c; 通常包括IP查询、Whois查询、子域名搜集等。进行被动信息搜集时不与目标产 生交互&#xff0c;可以在不接触到目标系统的情况下挖掘目标信息。主要方法包括&#xff1a;DNS 解析、子域名挖掘、…

Unity中创建Ultraleap 3Di交互项目

首先&#xff0c;创建新的场景 1、创建一个空物体&#xff0c;重命名为【XP Leap Provider Manager】&#xff0c;并在这个空物体上添加【XR Leap Provider Manager】 在物体XP Leap Provider Manager下&#xff0c;创建两个子物体Service Provider(XR)和Service Provider(…

随机点名--好玩哦

大屏滚动&#xff0c;随机点名&#xff0c;可刺激哦 想屏幕名字滚动得快一点&#xff0c;sleep时间就小一点 效果图 代码 #!/bin/bash namefile"/opt/name.txt" linenum$(sed -n $ $namefile) while : docleartmp$(sed -n "$[RANDOM%linenum1]p" $namefi…

文件上传之大文件分块上传

原则&#xff1a;合久必分&#xff0c;分久必合 优势部分&#xff1a;减少了内存占用&#xff0c;可实现断点续传&#xff0c;并发处理&#xff0c;利用带宽&#xff0c;提高效率 不足之处&#xff1a;增加复杂性&#xff0c;增加额外计算存储 应用场景&#xff1a;云存储大文件…

Springboot的 Lombok全部关联注解以及核心注解@Data详解

目录 工具安装 依赖注入 注解类别 1. Getter / Setter 2. ToString 3. EqualsAndHashCode 4. NoArgsConstructor / RequiredArgsConstructor / AllArgsConstructor 5. Data 示例 注意事项 6. Value 7. Builder 8. Slf4j / Log / Log4j / Log4j2 / XSlf4j 9. NonN…

03.领域驱动设计:了解实体和值对象以及它们的区别

目录 1、概述 2、实体 1.实体的业务形态 2.实体的代码形态 3.实体的运行形态 4.实体的数据库形态 3、值对象 1.值对象的业务形态 2.值对象的代码形态 3.值对象的运行形态 4.值对象的数据库形态 5.值对象的优势和局限 4、实体和值对象的区别 5、总结 1、概述 DDD战…

企业虚拟机服务器中了lockbit3.0勒索病毒怎么办,lockbit3.0勒索病毒解密处理流程

对于企业来说&#xff0c;企业的数据是企业的核心命脉&#xff0c;关乎着企业的生产与运营的所有工作。随着网络技术的不断发展&#xff0c;网络安全威胁也在不断增加。近期&#xff0c;云天数据恢复中心接到了很多企业的求助&#xff0c;企业的虚拟机服务器遭到了lockbit3.0勒…

vue的pinia环境搭建

一、 pinia是什么&#xff1f; Pinia是Vue的新一代轻量级状态管理库&#xff0c;它允许您跨组件/页面共享状态。Pinia由Vue.js官方成员重新设计&#xff0c;旨在提供更直观、更易于学习的状态管理解决方案。 Pinia的主要特点包括&#xff1a; 对Vue2和Vue3提供良好的支持&#…

机器学习之pandas库学习

这里写目录标题 pandas介绍pandas核心数据结构SeriesDataFrameDataFrame的创建列访问列添加列删除行访问行添加行删除数据修改 pandas介绍 pandas是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。Pandas 纳入 了大量库和一些标准的数据模型&#xff…

C#学习(十一)——Array和Collection

一、集合 集合重要且常用 孤立的数据是没有意义的&#xff0c;集合可以作为大量数据的处理&#xff0c;可进行数据的搜索、迭代、添加、删除。 C#中&#xff0c;所有集合都必须实现ICollection接口&#xff08;数组Array除外&#xff09; 集合说明Array数组&#xff0c;固定长…

【Linux】进程间通信概念 | 匿名管道

文章目录 一、什么是进程间通信进程间通信的概念进程间通信的目的进程间通信的分类进程间通信的本质 二、什么是管道三、匿名管道匿名管道的原理✨站在内核角度理解管道✨站在文件描述符角度理解管道 pipe系统调用fork后在父子进程间使用管道通信代码实现 匿名管道的读写规则管…

初识人工智能,一文读懂机器学习之逻辑回归知识文集(7)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

CSS 双色拼接按钮效果

<template><view class="sss"><button> <!-- 按钮 --><view class="span"> 按钮 </view> <!-- 按钮文本 --></button></view></template><script></script><style>body {b…

uniapp微信小程序-input默认字的样式

需要的是这样的 问题 正常是在input框上面写样式就行&#xff0c;但是uniapp不起作用 解决 直接在input上写placeholder-style"color就解决了 <input class"findInput" type"text" placeholder"关键词查询"placeholder-style"co…

Gin 框架之jwt 介绍与基本使用

文章目录 一.JWT 介绍二.JWT认证与session认证的区别2.1 基于session认证流程图2.2 基于jwt认证流程图 三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明3.2.4 定义一个payload 3.3 signatrue : …

一文掌握SpringBoot注解之@Component 知识文集(5)

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

操作系统(5)-----操作系统进程相关

目录 一.进程的组成 1.PCB&#xff08;进程控制块&#xff09; 2.程序段与数据段 二.进程的特征 三.进程的状态以及状态的转换 四.进程的组织 1.链接方式 2.索引方式 五.进程控制 六.进程控制相关原语 1.创建原语 2.撤销原语 3.阻塞原语 4.唤醒原语 5.切换原语 …