Allure 内置特性

章节目录:

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

一、内置特性概述

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

二、展示环境信息

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

  • 展示的位置

Allure 内置特性_第1张图片

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

  • 配置信息

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

Allure 内置特性_第2张图片

三、测试结果分类

在 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 内置特性_第3张图片

四、用例步骤说明

@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 内置特性_第4张图片

五、添加附件

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 = 'baidu'
    # 2.添加带有超链接的文本作为附件。
    allure.attach(link_text, name='Example Link', attachment_type=allure.attachment_type.HTML)

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

allure serve test-results
  • 查看展示

Allure 内置特性_第5张图片

六、添加用例描述

@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 内置特性_第6张图片

七、设置动态的用例标题

@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 内置特性_第7张图片

八、报告中添加链接

@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 内置特性_第8张图片

九、组织测试结果

@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
  • 查看展示

Allure 内置特性_第9张图片

  • 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
  • 查看展示

Allure 内置特性_第10张图片

  • 类似地,也可以命令行指定优先级运行
# 只运行 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
  • 查看展示

Allure 内置特性_第11张图片

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

十二、清空历史报告记录

在使用 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"
  • 生成的报告

Allure 内置特性_第12张图片

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

十四、结束语


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

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

你可能感兴趣的:(Python,python,pytest)