关于自动化报告生成工具 Allure 的最全面介绍

我们需要测试报告

测试用例总会执行完毕,我们也总会需要一个总结本轮测试的报告来告诉我们测试的质量如何,从而为纠正软件的存在的质量问题提供依据,同时为软件验收和交付打下基础。

我们期待遇到一个这样的测试报告

  • 标注每次执行的测试时间、环境、轮次
  • 一眼明了的测试结果
  • 清晰可查的测试过程
  • 多个维度的缺陷统计分析
  • 配置灵活
  • 易上手使用&省心
  • ...

于是,allure report 进入了我们的视野 🎉

Allure简介 🤔

什么是allure:

image.png

什么是Allure:

同单词 allure 一样,Allure也是一个充满魅力处处是惊喜的报告框架。

A flexible lightweight multi-language test report tool designed to create fancy and clear testing reports.
一种灵活的轻量级多语言测试报告工具,旨在创建优质又清晰的测试报告。[官网]

image.png
image.png

开始上手试试吧

一、安装

brew install allure

💡 Allure 安装完成之后,在控制台输入allure --version查看是否安装成功,如果提示找不到命令,按照以下方式配置:

  1. 下载 Allure 安装包
  2. 解压
  3. 将 bin 路径添加到 bash_profile 或 bashrc 中,然后 source bash_profile or bashrc file
  4. 执行命令 ln -s /path/to/your/bin/allure /usr/bin/allure,在 /usr/bin/ 下面建立一个软链接。
$ pip install allure-pytest

二、Allure命令行参数

终端输入 allure -h 可以获取allure命令的具体信息

allure [options] [command] [command options]

options 列表

--help 命令行帮助文档
-q, --quiet         切换至安静模式(Default: false)
-v, --verbose       切换至冗长模式(Default: false)
--version           版本信息(Default: false)

command 列表

  • generategenerate _[options] _ allure 结果目录

用于生成 allure 的html 报告 : pytest testcase.py --alluredir= <结果目录>

1896874-20201028123446680-921838785.png

  • openopen _[options] _allure报告目录

打开allure 报告(打开 generate 命令生成的报告):allure generate -o <./allure-report>

1896874-20201028141707575-281214400.png

  • serve : serve _[options]_ allure 结果目录

启动 allure 服务,打开 allure 报告:pytest testcase.py --alluredir= ./allure

1896874-20201028123446680-921838785.png

三、生成报告

要使Allure能够在测试执行期间收集测试结果,只需添加 --alluredir 选项,并提供数据存储路径即可(pytest 提供了 --clean-alluredir 参数可以清空 allure 报告生成的目录)

pytest test_case.py --alluredir=../allure_result

我们可以得到:一堆json、txt文件....


image (1).png

因此我们还需要利用allure命令行参数把数据整合成能查看的报告;

# 方法一:
# 直接生成HTML报告,这个会直接在线打开报告
allure serve ../allure_result


# 方法二:
# 1. 指定生成报告的路径
 allure generate ../allure_result -o ../allure_report --clean

# 2. 启动本地服务生成链接查看报告
allure open -h 127.0.0.1 -p 8883 /tmp/allure_report

💡 使用方法一 后,会自动启动浏览器进入对应的报告页面。如果浏览器没有自动启动,可复制在终端中生成的http://localhost:8883/index.html 到浏览器中自行打开。

image (2).png

四、查看报告

  • Overview:总览
  • Categories:类别,默认是分了failed和error,凡是执行结果是其中一个的都会被归到类里面,可以通过这里快捷查看哪些用例是failed和error的
  • Suites:测试套,就是所有用例的层级关系,根据package、module、class、function来查找用例
  • Graphs:图表,包括用例执行结果的分布图,优先级,耗时等
  • Timeline:时间刻度,可以看到测试用例精确的测试时序(执行顺序),包括每个case的执行时间
  • Behaviors:功能,根据epic、feature、story来分组测试用例(敏捷常用词)
  • Packages:包,按照package、module来分组测试用例
image (4).png
image (3).png

这是一个最基础的测试报告样式。我们发现,上面记录了case的执行时长,通过率和执行结果,这已经基本具备了测试报告的主要功能。
很明显,比起上面那个光秃秃的测试报告,我们更想要的报告长这个样子:


image (5).png
image (6).png

Allure Report 配置

如果我们想记录测试用例链接、操作现场记录(截图、文字、附件)、测试环境、测试用例分类归纳等等数据,那么就需要来了解更多Allure的特性。

Environment(环境)

记录的是本次测试的运行环境参数,但要注意,这里的环境是自己手动添加的,不是Allure自动生成的。
Enviromment有两种添加的方法:environment.propertiesenvironment.xml。不管是那种格式的文件,只要放入到</allure_results>(这个目录是生成最后的html报告之前,生成依赖文件的目录)目录下即可。

app_name=sentence
app_version=1.0.2
device_name=HUAWEI
device_version=10
<environment>
    <parameter>
        <key>app_name</key>
        <value>sentence</value>
    </parameter>
    <parameter>
        <key>app_version</key>
        <value>1.0.2</value>
    </parameter>
    <parameter>
        <key>device_name</key>
        <value>HUAWEI</value>
    </parameter>
    <parameter>
        <key>device_version</key>
        <value>10</value>
    </parameter>
</environment>
image (7).png

Categories(分类)

用于对测试结果进行分类。默认情况下,有两类缺陷:

  1. Product defects 产品缺陷(测试结果:failed)
  2. Test defects 测试缺陷(测试结果:error/broken)

我们也可以创建自定义缺陷分类,将 categories.json 文件添加到</tmp/my_allure_results>目录即可(和上面environment.properties放同一个目录)

[
    {
        "name": "Ignored tests", 
        "matchedStatuses": ["skipped"] 
    },
    {
        "name": "Infrastructure problems",
        "matchedStatuses": ["broken", "failed"],
        "messageRegex": ".*bye-bye.*" 
    },
    {
        "name": "Outdated tests",
        "matchedStatuses": ["broken"],
        "traceRegex": ".*FileNotFoundException.*" 
    },
    {
        "name": "Product defects",
        "matchedStatuses": ["failed"]
    },
    {
        "name": "Test defects",
        "matchedStatuses": ["broken"]
    }
]
  • name:分类名称
  • matchedStatuses:测试用例的运行状态,默认["failed", "broken", "passed", "skipped", "unknown"]
  • messageRegex:测试用例运行的错误信息,默认是 .* ,是通过正则去匹配。
  • traceRegex:测试用例运行的错误堆栈信息,默认是 .* ,也是通过正则去匹配。

Flaky(易脫落的碎屑)

顾名思义,不稳定的case。使用时,直接在类或者方法上加 @Flaky

  • 简单来说就是:有可能前一天还运行成功,第二天就运行失败,Flaky可以理解成“不稳定”。
  • 标记成Flaky的好处就是:当用例失败的情况下,我们能获取更关于这个case的执行具体信息;如果不标记为Flaky的话,可能就要skip这些测试。
from flaky import flaky


class TestAllure:
    @flaky
    def test_generate_allure(self):
        """
        这里是description:简单生成一个测试报告试试!
        :return:
        """
        assert 1 + 1 == 3
image (8).png

Allure 特性

基础报告

import pytest


def test_success():
    """this test succeeds"""
    assert True


def test_failure():
    """this test fails"""
    assert False


def test_skip():
    """this test is skipped"""
    pytest.skip('for a reason!')


def test_broken():
    raise Exception('oops')
image (9).png

pytest-allure特性 [链接]

  1. 预期失败:@pytest.mark.xfail,在allure中会增加特殊标记
@pytest.mark.xfail(condition=lambda: True, reason='我希望这个case失败')
def test_xfail_expected_failure():
    """this test is an xfail that will be marked as expected failure"""
    assert False


@pytest.mark.xfail(condition=lambda: True, reason='我希望这个case失败')
def test_xfail_unexpected_pass():
    """this test is an xfail that will be marked as unexpected success"""
    assert True
  1. 跳过case:@pytest.mark.skipif,在allure中会特殊标记为skip状态,并增加tag
  2. @pytest.fixture:allure跟踪每个fixture的调用,并详细显示调用的参数、正确的调用顺序。
  3. @pytest.mark.parametrize:allure会详细展示使用参数化生成的case

Allure带来的特性

除了上述pytest的特性(parametrize、xfail、skip)之外,Allure自己本身也有强大的特性可以在pytest中使用。
如果希望在报告中看到测试步骤,测试附加信息,可以使用注解的方式直接加到case上。
常用的allure注解有:

  1. @allure.title:case标题
  2. @allure.description**, **@allure.description_html ,""" 描述 """
  3. @allure.step**, **@allure.attach,@allure.attach.file

allure.attach(body, name, attachment_type, extension)

  • body:要显示的内容(附件)
  • name:附件名字
  • attachment_type:附件类型,是 allure.attachment_type 里面的其中一种
  • extension:附件的扩展名(比较少用)
    image (10).png
  1. @allure.testcase, @allure.issue, @allure.link** **

主要是用于将allure报告和测试管理系统集成,可以更快速的跳转到测试用例地址

# issue()和testcase()其实调用的也是link(),只是link_type不一样

def link(url, link_type=LinkType.LINK, name=None):
    return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name))


def issue(url, name=None):
    return link(url, link_type=LinkType.ISSUE, name=name)


def testcase(url, name=None):
    return link(url, link_type=LinkType.TEST_CASE, name=name)
  1. @allure.dynamic 在测试用例执行过程中动态指定标题和描述等标签的方法;如: allure.dynamic.description allure.dynamic.title

上面有的方法都能进行动态修改,如:

allure.dynamic.feature
allure.dynamic.link
allure.dynamic.issue
allure.dynamic.testcase
allure.dynamic.story
allure.dynamic.title
allure.dynamic.description
@allure.title("装饰器标题")
def test_1():
    print(123)
    allure.dynamic.title("动态标题")
  1. 重试/历史记录:Allure会保留在单个测试运行期间重新执行的测试的信息,以及一段时间内测试执行的历史记录。

Allure标记装饰器

  1. @allure.epic:敏捷里面的概念,定义史诗,往下是 feature
  2. @allure.feature:功能点的描述,理解成模块往下是 story
  3. @allure.story:故事,往下是 title

注解@allure.feature与@allure.store的关系

  1. feature相当于一个功能,一个大的模块,将case分类到某个feature中,报告中「Behaviors(功能)」中显示,相当于 testsuite。
  2. story相当于对应这个功能或者模块下的不同场景,分支功能,属于feature之下的结构。
  3. 如果不加 @allure.feature、@allure.story 时,在Behaviors栏目下,测试用例都不会分类显示,当用例多的时候可能看的花里胡哨
  4. 可以直接在pytest执行是加入参数 --allure-epics、--allure-features、--allure-stories 筛选case
  1. @allure.severity:case的重要性级别
  • blocker:阻塞缺陷(功能未实现,无法下一步)
  • critical:严重缺陷(功能点缺失)
  • normal: 一般缺陷(边界情况,格式错误)
  • minor:次要缺陷(界面错误与ui需求不符)
  • trivial: 轻微缺陷(必须项无提示,或者提示不规范)

pytest -s -v testcase.py --allure-serverities normal,critical

总结

  • allure 是一个轻量级、灵活的、支持多语言的测试报告工具。
  • allure 是一个多平台的、奢华的report框架。
  • 可以为开发者/测试人员提供详尽的测试报告、测试步骤、log等信息;也可以提供高品质的统计报告。

参考

allure 官网:https://docs.qameta.io/allure/#_about
pytest API:https://docs.pytest.org/en/latest/reference/reference.html#id30
小菠萝测试笔记:https://www.cnblogs.com/poloyy/category/1690628.html
本文用到的项目:pythonProject.zip

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

相关阅读更多精彩内容

友情链接更多精彩内容