allure 与 pytest

Allure 介绍

  • 一个轻量级、灵活的、支持多语言的测试报告工具。
  • 支持多平台,奢华的 report 框架。
  • 能提供详尽的测试报告、测试步骤、Log 等信息。
  • Java 语言开发,但支持 pytest、JavaScript、PHP、ruby 等语言或框架。
  • 可以集成到 Jenkins。

安装

Allure 的使用,需要安装 Java 和 Allure。

  • Java:由于 Allure 是 Java 语言开发的,所以需要安装 Java;网上很多 Java 的安装教程,这里就不详细说明了。
  • Allure:本人只有 win10 系统的,所以本章主要是在 win10 下操作的。
    • 下载地址:https://github.com/allure-framework/allure2/releases
      如果github下载不太顺畅,可以考虑别的网站:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
    • 配置环境变量:解压后将 bin 目录加入 PATH 环境变量
      在这里插入图片描述
    • 环境验证:命令行输入allure --version,能正常打印对应版本即可
      在这里插入图片描述
    • pytest 要能使用 allure,需要安装相应的插件:pip install allure-pytest

使用

官方文档:https://docs.qameta.io/allure-report/
在这里插入图片描述

入门

想要看到 allure 报告,需要做 2 个步骤:
1、pytest 执行时关联 allure:pytest 命令带上--alluredir 结果存放目录--alluredir=结果存放目录
2、打开执行报告:allure serve 结果存放目录
test_demo.py的内容如下:

def test_add_positive():
    assert 1 + 3 == 4

def test_add_negative():
    assert -1 + -3 == -4

执行用例:
在这里插入图片描述
执行命令成功后,会在当前目录下,生成 result 目录,result 目录下存放了执行结果。
在这里插入图片描述
通过allure serve ./result打开测试报告。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

allure 装饰器

allure 提供了一些装饰器,比较常用的如下:

方法 参数值 参数说明
@allure.epic(*epics) epic 描述 定义项目,当由多个项目时使用,一般传参一个字符串,表示项目名称。往下是 feature。
@allure.feature(*features) 分支 用例按照模块区分(类似于一个业务分了几个步骤/功能),一般传参一个字符串,表示分支名称。往下是 story。
@allure.story(*stories) 故事 类似于场景(即一个功能分为几个方面去验证),一般传参一个字符串,表示场景名称。
@allure.title(test_title) 用例标题 给指定的用例设置名称,在测试报告中,展示的用例名称不是函数名称,是设置的 test_title。
@allure.description(test_description) 用例描述 test_description 参数里说明了当前用例的详细内容,例如前置条件、验证场景、预期结果等需要关注的内容。
@allure.severity(allure.severity_level.xxx) 用例优先级 支持给用例设置优先级,一旦用例执行失败,就可以确定缺陷的等级。目前allure可设置5种级别:BLOCKER、CRITICAL、NORMAL、MINOR、TRIVIAL。
@allure.step(test_step) 用例步骤 类似于将测试过程分步骤执行,allure 会统计步骤的执行情况,方便定位问题和调试。allure.step()内的代码如果执行成功,则 allure 报告中会显示该步骤执行成功,执行失败时会展示到对应的步骤。
@allure.testcase(url, name=None) 用例相关链接 设置用例存放的地址,方便访问对应用例详情,name 不为 None 时,文本显示为 name,否则显示用例所在 url。
@allure.issue(url, name=None) 缺陷地址 对应缺陷管理系统里的缺陷地址,用法同allure.testcase()
@allure.link(url, link_type='link', name=None) 定义链接 用于定义一个需要在测试报告中展示的链接。link_type 默认是 link,可设置为 tms、issue,为 tms 时用法与allure.testcase()一致;为 issue 时用法与allure.issue()一致。url 和 name 参数用法与allure.testcase()一致。
allure.attach(body, name=None, attachment_type=None, extension=None) 按照附件形式添加展示 将python对象按照指定的附件类型展示在报告中,可支持的 attachment_type(附件类型)在allure.attachment_type中。
allure.attach.file(source, name=None, attachment_type=None, extension=None) 添加附件 将文件按照指定的附件类型读取并展示到报告中,可支持的 attachment_type(附件类型)在allure.attachment_type中。

@allure.epic(*epics)、@allure.feature(*features)、@allure.story(*stories)

epic、feature、story 是存在层级关系的,在报告中进行层级展示。
示例如下:
test_demo.py 内容如下:

import allure

@allure.epic("epic的使用1")
@allure.feature("测试模块1")
def test_case1():
    assert 1 + 3 == 4


@allure.feature("测试模块1")
def test_case2():
    assert -1 + -3 == -4

@allure.feature("测试模块1")
@allure.story("某部分验证1")
def test_case3():
    assert True

@allure.feature("测试模块1")
@allure.story("某部分验证1")
def test_case4():
    assert True

@allure.story("某部分验证1")
def test_case5():
    assert True

@allure.story("某部分验证2")
def test_case6():
    assert True

执行pytest test_demo.py --alluredir ./result命令,打开 allure 报告后如下:
在这里插入图片描述
点击 Show all 按钮,层级显示说明如下:
在这里插入图片描述

@allure.title(test_title)

@allure.title(test_title):是给指定的用例设置名称,在测试报告中,展示的用例名称不是函数名称,是设置的 test_title。
test_demo.py 内容如下:

import allure

def test_case1():
    assert 1 + 3 == 4

@allure.title("测试xxxx点")
def test_case2():
    assert True

allure 测试报告显示如下:
在这里插入图片描述

@allure.description(test_description)

@allure.description(test_description):描述当前用例的详细信息,比如说前置条件、验证场景、预期结果等需要关注的内容。设置了之后,allure 报告中,该用例的详情页面会展示Description字段,字段内容为test_description的内容。
示例:
test_demo.py 内容如下:

import allure

def test_case1():
    print("这里是test_case1的测试内容")
    assert True

@allure.description("这条用例是为了验证...巴拉巴拉...的场景")
def test_case2():
    print("这里是test_case2的测试内容")
    assert True

allure 报告中,test_case2()的执行详情显示如下:
在这里插入图片描述

@allure.severity(allure.severity_level.xxx)

@allure.severity(allure.severity_level.xxx) :支持给用例设置优先级,一旦用例执行失败,就可以确定缺陷的等级。目前 allure 可设置5种级别:

  • BLOCKER:阻塞缺陷,相当于主要功能未实现,非常严重
  • CRITICAL:严重缺陷,功能点缺失,或主流程虽然实现,但存在较大的问题
  • NORMAL:一般缺陷(边界情况、格式错误等)
  • MINOR:次要缺陷(界面与 UI 需求不符等)
  • TRIVIAL:轻微缺陷(比如无提示、用户体验不好等)

示例:
test_demo.py 内容如下:

import allure

def test_case1():
    print("这里是test_case1的测试内容,未设置优先级")
    assert True

@allure.severity(allure.severity_level.BLOCKER)
def test_case2():
    print("这里是test_case2的测试内容,优先级为BLOCKER,阻塞缺陷")
    assert True

@allure.severity(allure.severity_level.CRITICAL)
def test_case3():
    print("这里是test_case3的测试内容,优先级为CRITICAL,严重缺陷")
    assert True

@allure.severity(allure.severity_level.NORMAL)
def test_case4_success():
    print("这里是test_case4的测试内容,优先级为NORMAL,一般缺陷")
    assert True

@allure.severity(allure.severity_level.NORMAL)
def test_case4_fail():
    print("这里是test_case的测试内容,优先级为")
    assert False

@allure.severity(allure.severity_level.MINOR)
def test_case5():
    print("这里是test_case5的测试内容,优先级为MINOR,次要的、较小的缺陷")
    assert True

@allure.severity(allure.severity_level.TRIVIAL)
def test_case6():
    print("这里是test_case6的测试内容,优先级为TRIVIAL,轻微缺陷(比如无提示、用户体验不好等)")
    assert True

执行后,allure 报告显示如下:
在这里插入图片描述

allure.step(test_step)

allure.step(test_step) : 类似于将测试过程分步骤执行,allure 会统计步骤的执行情况,方便定位问题和调试。allure.step()内的代码如果执行成功,则allure报告中会显示该步骤执行成功,执行失败时会展示到对应的步骤。
allure.step(test_step)是针对测试过程的步骤,不建议装饰整个用例,建议放在测试用例方法或函数里,使用方式如下:

with allure.step("步骤说明"):
    # 代码实现对应步骤

示例:
test_demo.py 内容如下:

import allure

def test_send_mail_without_step():
    print("步骤1:输入用户名admin,密码password")
    print("登录成功")
    print("步骤2:新建邮件")
    print("步骤3:编辑邮件")
    print("步骤4:发送邮件")
    print("发送成功消息提示")
    print("步骤5:退出确认")
    print("退出成功页面")


def test_send_mail_with_step_success():
    with allure.step("步骤1:用户登录"):
        print("输入用户名admin,密码password")
        print("登录成功")

    with allure.step("步骤2:新建并编辑邮件"):
        print("新建邮件")
        print("编辑邮件")

    with allure.step("步骤3:发送邮件"):
        print("发送邮件")
        print("发送成功消息提示")

    with allure.step("步骤4:退出登录"):
        print("退出确认")
        print("退出成功页面")

def test_send_mail_with_step_fail():
    with allure.step("步骤1:用户登录"):
        print("输入用户名admin,密码password")
        print("登录成功")

    with allure.step("步骤2:新建并编辑邮件"):
        print("新建邮件")
        assert False
        print("前面报错了,接下来的不会被执行了")
        print("编辑邮件")

    with allure.step("步骤3:发送邮件"):
        print("发送邮件")
        print("发送成功消息提示")

    with allure.step("步骤4:退出登录"):
        print("退出确认")
        print("退出成功页面")

allure 报告显示如下:
在这里插入图片描述

@allure.testcase(url, name=None)

@allure.testcase(url, name=None):是给指定的用例设置跳转链接 url,如果 name 为None,则直接显示链接,如果 name 不为None,则报告中显示 name,点击跳转到指定链接。一般是用来设置用例可访问的链接,直接跳转到用例详情。
示例:
test_demo.py 内容如下:

import allure

def test_case1():
    print("这里是test_case1的测试内容")
    assert True

@allure.testcase("https://www.baidu.com/")
def test_case2():
    print("这里是test_case2的测试内容")
    assert True

@allure.testcase("https://www.baidu.com/", "用例所在位置")
def test_case3():
    print("这里是test_case3的测试内容")
    assert True

allure 报告显示如下:
在这里插入图片描述

@allure.issue(url, name=None)

@allure.issue(url, name=None):是给指定的用例设置缺陷链接 url,如果 name 为 None,则直接显示链接,如果 name 不为 None,则报告中显示 name,点击跳转到指定链接。一般是用来设置对应的缺陷链接,能直接跳转到指定的缺陷详情页面。
示例:
test_demo.py 内容如下:

import allure

def test_case1():
    print("这里是test_case1的测试内容")
    assert True

@allure.issue("https://www.baidu.com/")
def test_case2():
    print("这里是test_case2的测试内容")
    assert True

@allure.issue("https://www.baidu.com/", "缺陷访问地址")
def test_case3():
    print("这里是test_case3的测试内容")
    assert True

allure 报告显示如下:
在这里插入图片描述

@allure.link(url, link_type='link', name=None)

@allure.link(url, link_type='link', name=None):用于定义一个需要在测试报告中展示的链接。link_type 默认是 link,可设置为 tms、issue,为 tms 时用法与allure.testcase()一致;为 issue 时用法与allure.issue()一致。url 和 name 参数用法与allure.testcase()一致。
示例:
test_demo.py 内容如下:

import allure

def test_case1():
    print("这里是test_case1的测试内容")
    assert True

@allure.link("https://www.baidu.com/")
def test_case2():
    print("这里是test_case2的测试内容")
    assert True

@allure.link("https://www.baidu.com/", name="相关业务文档")
def test_case3():
    print("这里是test_case3的测试内容")
    assert True

allure 报告显示如下:
在这里插入图片描述

添加附件

allure 提供了 attach,支持在测试报告中添加附件,attach 有 2 种方式,attach 可以添加数据、文本、图片、视频、网页等数据。
可支持的附件类型在allure.attachment_type中有定义:
在这里插入图片描述

方法 说明
allure.attach(body, name=None, attachment_type=None, extension=None) 将 body 的内容按照附件形式展示,name 为附件名称,attachment_type 为附件类型,extension 一般为附件扩展名。
allure.attach.file(source, name=None, attachment_type=None, extension=None) 将文件(source)按照附件形式展示到报告中,name 为附件名称,attachment_type 为附件类型,extension 一般为附件扩展名。source 是附件在本地的路径。

attach()是将 python 对象以指定附件类型展示,attach.file()是将本地文件以指定附件类型展示在报告中,attach()是针对字符串等内容,attach.file()是针对文件。attach.file()会将文件中的内容按照指定附件类型读取并展示到报告中,attach()则是将 python 的字符串对象按照指定附件类型展示。
示例:
test_demo.py 内容如下:

import allure

@allure.title("attach.file()针对于文件来源的附件")
def test_attach_file():
    with allure.step("attach.file()添加图片"):
        allure.attach.file("D:\\test_code\\allure_demo\\csdn.png", name="csdn",
                           attachment_type=allure.attachment_type.PNG, extension=".png")

    # 没有指定name,系统会默认分配附件名称,CSV格式显示正常
    with allure.step("attach.file()添加CSV文件"):
        allure.attach.file("D:\\test_code\\allure_demo\\成绩表.csv",
                           attachment_type=allure.attachment_type.CSV)

@allure.title("attach()和attach.file()的区别")
def test_attach_or_file():
    with allure.step("attach.file()添加文本txt内容"):
        allure.attach.file("D:\\test_code\\allure_demo\\操作步骤.txt", name="文本标题:操作步骤",
                           attachment_type=allure.attachment_type.TEXT)

    # 参数一致,attach.file()会将文件中的内容按照指定附件类型读取并展示到报告中,attach()则是将python的字符串对象按照指定附件类型展示
    with allure.step("attach添加文本txt内容"):
        allure.attach("D:\\test_code\\allure_demo\\操作步骤.txt", name="文本标题:操作步骤",
                           attachment_type=allure.attachment_type.TEXT)

@allure.title("attach()的使用")
@allure.description("attach()将python对象按照指定的附件类型展示,attachment_type有/未指定类型时的区别")
def test_attach():
    # attach()的attachment_type参数,用来确定以什么类型展示,以下是attachment_type参数有无指定的情况
    with allure.step("attach添加HTML内容(指定了attachment_type为HTML格式)"):
        allure.attach('<a href="http://www.eastmoney.com">'
                      '<img class="ts-logo" src="https://g1.dfcfw.com/g3/201909/20190912110958.jpg" alt="东方财富网——财经资讯门户"></a>',
                      name="东方财富网首页", attachment_type=allure.attachment_type.HTML)

    with allure.step("attach添加HTML内容(未指定html格式,默认是文本形式)"):
        allure.attach('<a href="http://www.eastmoney.com">'
                      '<img class="ts-logo" src="https://g1.dfcfw.com/g3/201909/20190912110958.jpg" alt="东方财富网——财经资讯门户"></a>',
                      name="东方财富网首页")

使用到的附件内容如下:
在这里插入图片描述
执行 pytest 命令:pytest test_demo.py --clean-alluredir --alluredir ./result,打开 allure 报告:allure serve ./result

allure 报告显示如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

pytest 的 allure 参数

python 安装了 allure-pytest 库之后,pytest 命令可以使用 allure 的参数。
在这里插入图片描述
常用的 allure 参数如下:

参数 描述
--alluredir=DIR 将 pytest 执行结果存放到指定的目录 DIR。
--clean-alluredir pytest 的执行结果,allure 默认是累计的,即会加上之前的执行统计结果,加上这个参数后会只统计当前执行结果。比如第二次执行后打开 allure 报告,会显示有第一次执行的内容,只想要本次执行结果的,可以加上该参数。
--allure-severities=SEVERITIES_SET 指定执行对应优先级的用例,SEVERITIES_SET 中,如果有多个优先级,使用英文逗号,连接。
--allure-epics=EPICS_SET 指定执行对应 epic 的用例,如果有多个 epic,使用英文逗号,连接。
--allure-features=FEATURES_SET 指定执行对应 feature 的用例,如果有多个 feature,使用英文逗号,连接。
--allure-stories=STORIES_SET 指定执行对应 story 的用例,如果有多个story,使用英文逗号,连接。

示例(参数内容的示例都是用当前的代码):
test_demo.py 内容如下:

import allure

@allure.epic("epic1的用例")
@allure.feature("feature2的用例")
def test_case1():
    print("这里是test_case1的测试内容,未设置优先级")
    assert True

@allure.story("story2的用例")
@allure.severity(allure.severity_level.BLOCKER)
def test_case2():
    print("这里是test_case2的测试内容,优先级为BLOCKER,阻塞缺陷")
    assert True

@allure.epic("epic1的用例")
@allure.story("story1的用例")
@allure.testcase("https://wwww.baidu.com")
@allure.severity(allure.severity_level.CRITICAL)
def test_case3():
    print("这里是test_case3的测试内容,优先级为CRITICAL,严重缺陷")
    assert True

@allure.epic("epic3的用例")
@allure.feature("feature2的用例")
@allure.severity(allure.severity_level.NORMAL)
def test_case4_success():
    print("这里是test_case4的测试内容,优先级为NORMAL,一般缺陷")
    assert True

@allure.feature("feature1的用例")
@allure.story("story3的用例")
@allure.severity(allure.severity_level.NORMAL)
def test_case4_fail():
    print("这里是test_case的测试内容,优先级为NORMAL")
    assert False

@allure.epic("epic2的用例")
@allure.severity(allure.severity_level.MINOR)
def test_case5():
    print("这里是test_case5的测试内容,优先级为MINOR,次要的、较小的缺陷")
    assert True

@allure.feature("feature3的用例")
@allure.severity(allure.severity_level.TRIVIAL)
def test_case6():
    print("这里是test_case6的测试内容,优先级为TRIVIAL,轻微缺陷(比如无提示、用户体验不好等)")
    assert True

统计当前执行结果

--clean-alluredir:pytest 的执行结果,allure 默认是累计的,即会加上之前的执行统计结果,加上这个参数后会只统计当前执行结果。比如第二次执行后打开 allure 报告,会显示有第一次执行的内容,只想要本次执行结果的,可以加上该参数。
示例:
执行了pytest test_demo.py --alluredir ./result命令后,再执行pytest test_demo.py::test_case4_fail --alluredir ./result命令。
在这里插入图片描述

allure 报告显示如下:
在这里插入图片描述

加了--clean-alluredir参数后(即执行命令:pytest test_demo.py::test_case4_fail --alluredir ./result --clean-alluredir

allure 报告显示如下:
在这里插入图片描述
在这里插入图片描述

allure 过滤用例

按照优先级

在这里插入图片描述
allure 报告显示如下:
在这里插入图片描述

按照 epic

在这里插入图片描述
allure 报告显示如下:
在这里插入图片描述

按照 feature

在这里插入图片描述
allure 报告显示如下:
在这里插入图片描述

按照 story

在这里插入图片描述
allure 报告显示如下:
在这里插入图片描述

生成报告

我们在进行测试用例执行时,经常会有失败的用例需要调试,所以中间可能会有多个版本的测试报告,最后生成最终版本的测试报告。
报告的数据肯定是从 pytest 执行用例统计得来的。pytest 执行用例时,需要加上--alluredir 存储路径参数,将 pytest 的执行统计结果存放到指定的存储路径,有2种方式查看测试报告:

  • 方式 1:测试完成后在线查看报告,命令为allure server 存储路径
  • 方式 2:测试完成后从测试结果生成静态报告,再打开查看静态报告:
    • 生成静态报告:allure generate 存储路径 -o 新路径 --clean(注意:覆盖路径加-c--clean
    • 打开查看静态报告:allure open -h ip地址 -p 端口 新路径

2 种方式都是统计最近一次 pytest 命令执行后的结果,pytest 中有些参数也会影响报告的统计结果,比如加了--clean-alluredir就只会显示当前 pytest 执行用例的统计结果,而不会将之前的统计结果包含进来。所以从统计执行结果来说,方式 1 和方式 2 对 pytest 统计执行结果是一样的,只是渲染成 html 的方式不一样,方式 1 用于本地渲染和查看,方式 2 用于本地渲染和对外展示(即给其他设备也能查看)。

方式 1 前面的示例用过很多次了,这里主要讲下方式 2:方式 2 是对已统计的 pytest 执行结果生成新的测试报告:
test_demo.py 内容如下:

import pytest

def test_passed():
    assert True

def test_fail():
    assert False

def test_skip():
    pytest.skip("测试跳过这条用例")

def test_broken():
    raise ValueError("测试出现异常")

执行 pytest 命令:
在这里插入图片描述
从上面截图可以看出,当前目录自动生成了个 result 目录,是本次 pytest 执行结果。接下来根据 result 生成静态报告:
在这里插入图片描述
allure generate ./result -o ./report --clean执行成功后,当前目录自动生成 report 目录,存放了生成的 html 文件及其组件、数据内容。
在这里插入图片描述
可直接用浏览器打开文件,如下:
在这里插入图片描述
也可以使用allure open -h ip地址 -p 端口 新路径命令打开报告:
在这里插入图片描述
在这里插入图片描述

Allure 介绍

  • 一个轻量级、灵活的、支持多语言的测试报告工具。
  • 支持多平台,奢华的 report 框架。
  • 能提供详尽的测试报告、测试步骤、Log 等信息。
  • Java 语言开发,但支持 pytest、JavaScript、PHP、ruby 等语言或框架。
  • 可以集成到 Jenkins。

安装

Allure 的使用,需要安装 Java 和 Allure。

  • Java:由于 Allure 是 Java 语言开发的,所以需要安装 Java;网上很多 Java 的安装教程,这里就不详细说明了。
  • Allure:本人只有 win10 系统的,所以本章主要是在 win10 下操作的。
    • 下载地址:https://github.com/allure-framework/allure2/releases
      如果github下载不太顺畅,可以考虑别的网站:https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
    • 配置环境变量:解压后将 bin 目录加入 PATH 环境变量
      在这里插入图片描述
    • 环境验证:命令行输入allure --version,能正常打印对应版本即可
      在这里插入图片描述
    • pytest 要能使用 allure,需要安装相应的插件:pip install allure-pytest

使用

官方文档:https://docs.qameta.io/allure-report/
在这里插入图片描述

入门

想要看到 allure 报告,需要做 2 个步骤:
1、pytest 执行时关联 allure:pytest 命令带上--alluredir 结果存放目录--alluredir=结果存放目录
2、打开执行报告:allure serve 结果存放目录
test_demo.py的内容如下:

猜你喜欢

转载自blog.csdn.net/weixin_56175092/article/details/132181654