Allure+Pytest测试报告美化与定制

Allure是一个轻量级、灵活、支持多语言平台的report框架,不仅能生成好看易读的测试报告,还能针对的特别需求生成high level的测试统计报告,本文主要介绍Python语言和Allure结合Pytest测试框架生成测试报告的一些基本语法和用法。
Allure官方文档请参考:https://docs.qameta.io/allure/

本文以Windows环境作示例。

安装

  1. 首先,电脑里当然要已经配置好了Python,IDE(比如我的是Pycharm),pytest插件,环境变量等满足自动化测试的一些工具。
  2. 然后,去到GitHub下载zip文件到本地:Allure-release
    注意一定要在这个页面上滑动到简介的底部选择适合自己电脑环境的包来下载哦~
    在这里插入图片描述
  3. 接下来把该文件解压缩,并把解压缩后的文件夹放到一个你绝对不会删掉的位置,同时去到该文件夹中的bin目录下,把bin目录的路径放到系统环境变量PATH中,然后运行bin目录下的allure.bat文件。
  4. 最后,Win+R打开命令行,执行以下命令安装allure-pytest插件。
    或者,直接在pycharm中安装allure-pytest也可。
pip install allure-pytest

如此,allure的环境就准备好了。

基本使用语法

  1. 在执行测试用例的时候监听并收集测试结果,直接在执行命令后加一个“–alluredir=存放测试结果的路径”的参数即可:
pytest --alluredir = /tmp/my_allure_results
#/tmp/my_allure_results即你要存放测试结果的路径
  1. 当测试用例执行完毕,测试结果已经收集完毕,这时就可以启动服务来生存你的测试报告了,命令执行成功后会在你的默认浏览器中打开测试报告
allure serve /tmp/my_allure_results
#/tmp/my_allure_results即上一步存放的测试结果的路径

初步尝试

OK,环境和语法都掌握了,现在来做个简单的尝试,代码就参考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')

新建一个python文件,然后在命令行中到该文件所在的路径下,执行测试文件,比如我的python文件命名为Test_BlogAllure.py

pytest Test_BlogAllure.py --alluredir=./AllureResult/1
# pytest后加文件名称运行指定测试用例

命令执行完毕后,项目路径下会出现几个json文件,即测试结果
在这里插入图片描述
接下来,执行命令生成测试报告

allure serve ./AllureResult/1

就会根据上一步的测试结果生成测试报告并在默认浏览器打开如下图
可以看到,一共四个测试用例,一个成功,一个跳过,一个失败,一个有异常,这四种状态在测试报告中都有对应的标识
在这里插入图片描述

Allure相关功能

steps

steps直译过来就是步骤,在Allure支持的众多功能中,也有这么一个功能,可以根据tester的需求在具体的某个执行步骤中使用装饰器标记出该步骤,并且显示在测试报告中。
另外,step通常会和with一起使用,用来方便区分不同的step代码片段

@allure.step("Discription")

with allure.step("Description"):
	# 代码片段

Attachments

Attachments即附件,用该方法可以把多种不同类型的附件添加到测试结果中并显示在测试报告里,两种常用的用法:

allure.attach(body,name,attachment_type,extension)
allure.attach.file(source,name,attachment_type,extension)
# body--要写入文件的原始内容
# name--文件名的字符串
# attachment_type--附件的类型
# extension--扩展名
# source--文件路径

Descriptions

Description在allure装饰器中使用,能够让tester添加更多的描述性信息以便阅读测试报告的人能更直观全面地了解测试结果,常用的两个方法:

@allure.description_html("""HTML代码片段""")
# 可以在描述中直接添加一段HTML代码来提供UI更加友好的描述信息
@allure.description("""Descriptions""")

Titles

title装饰器也是为了测试结果更可读,不仅可以在title内容中添加纯文本,还可以传入相关变量进行描述

@allure.title("title name")

Links

allure装饰器还提供了三种方法,可以将bug链接,用例链接,管理系统等和测试报告集成到一起

@allure.link("Link address",name="address name")
# 可添加任何需要添加的链接
@allure.issue()
# bug(bug管理平台)链接,在测试报告中会自动在链接旁添加一个bug图标
@allure.testcase()
# 测试用例(用例管理平台)链接

Story & Feature

这两个装饰器一般会在测试用例方法以功能来分的时候使用,feature就表示是什么功能,story的意思更接近于一个测试场景,二者都可以在描述信息中添加相应的变量
这里需要提一下,关于feature和story关系,一般来说呢,feature是基于整个功能层面的描述,层级在story之上,而story可以理解为某一个feature的用户场景

@allure.story("descriptions")
@allure.feature("descriptions")

示例

下面将会用Python+allure来写一段没有什么实际意义只为说明allure装饰器用法的代码作为演示。

import pytest
import allure


@allure.title("title:功能层级的title")
@allure.feature("登录模块")
class TestLogin():

    @allure.title("title:登录成功测试用例")
    @allure.story("Story:登录成功")
    @allure.link("www.baidu.com",name="测试用例地址")
    @allure.description("这是一个测试用例描述")
    def test_login_success(self):
        print("登录成功测试用例")
        pass

    @allure.title("title:登录失败测试用例")
    @allure.story("Story:登录失败")
    @allure.description_html("""
    <h1>这是一个用HTML来描述的测试用例</h1>
    <table style="width:100%">
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Age</th>
      </tr>
      <tr align="center">
        <td>William</td>
        <td>Smith</td>
        <td>50</td>
      </tr>
      <tr align="center">
        <td>Vasya</td>
        <td>Jackson</td>
        <td>94</td>
      </tr>
    </table>
    """)
    def test_login_fail(self):
        with allure.step("点击用户名"):
            print("输入用户名")
        with allure.step("点击密码"):
            print("输入错误的密码")
        with allure.step("点击登录"):
            print("点击登录")
        print("登录失败测试用例")

        # 把部分HTML放到测试报告附件中
        allure.attach('<head></head><body>登录失败</body>', 'Attach with HTML type',attachment_type=allure.attachment_type.HTML)
        pass

    @allure.title("title:登录时用户名缺失测试用例")
    @allure.story("Story:用户名缺失")
    def test_lossUserName(self):
        print("用户名缺失测试用例")
        pass

    @allure.title("title:登录时密码缺失测试用例")
    @allure.story("Story:密码缺失")
    def test_lossPassword(self):
        print("缺失密码测试用例")
        pass

执行完测试用例生成测试报告如下图
在这里插入图片描述
在suites维度中,直接以测试文件的名称来显示测试的整体情况,点击show all即可查看具体情况:
在这里插入图片描述
如图可知,一共四个方法,每个方法中的title装饰器直接显示在左侧列表标题中,选中某个测试方法,会在右边展示具体内容。比如description_html方法添加的HTML片段会直接被编译为网页的形式展示出来。
再看Test body,下面的每个小单元对应的就是step装饰器中标记的步骤。
回到首页,点击feature维度下的show all按钮,这边是以功能–用户场景的维度来展示测试报告的,内容还和上面的suite维度展示的测试报告相同。
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值