Allure是一个开源的测试报告生成框架,提供了测试报告定制化功能,相较于我们之前使用过pytest-html插件生成的html格式的测试报告,通过Allure生成的报告更加规范、清晰、美观。

pytest框架支持使用Allure生成测试报告,接下来让介绍pytest怎样结合Allure生成测试报告。

环境搭建

安装allure-pytest

步骤1需要先安装插件allure-pytest,可以理解为用于连接pytestallure,使它们可以结合使用。

安装命令:pip install allure-pytest

安装Allure

步骤2中需要安装Allure,需要去github下载,地址为:https://github.com/allure-framework/allure2/releases

根据操作系统在最新版本中选择对应格式的安装文件进行下载,Windows系统选择allure-2.xx.x.zip下载,如下图所示:

下载后解压文件,并bin文件所在的路径加入系统环境变量,再重启电脑,怎样加入环境变量这里不啰嗦,不知道的同学可以百度。

至此,环境搭建完成。

定制报告

Allure提供了很多特性用于定制生成测试报告,脚本中加入这些特性可以对测试步骤进行详细的说明,且不会对测试代码逻辑产生影响。

接下来以在线购物平台的购物车功能模块下单模块简单举例说明,测试模块test_case.py代码如下:

import allure
import pytest
import os @allure.step("登录获取token")
def get_token():
print("请求登录接口获取token") @allure.step("加入购物车")
def add_to_shopping_trolley():
print("请求加入购物车接口") @allure.step("查询我的购物车")
def get_shopping_trolley_goods():
print("请求查询我的购物车接口") @allure.step("清空购物车")
def empty_shopping_trolley():
print("请求清空购物车接口") @allure.step("下单")
def place_order():
print("请求下单接口") @allure.epic("xx在线购物平台接口测试")
@allure.feature("购物车功能模块")
class TestShoppingTrolley: @allure.story("商品加入购物车")
@allure.title("正向用例--将库存数>0的商品加入购物车")
@allure.description("校验库存数不为0的商品加入购物车是否正常")
@allure.severity("critical")
def test_add_goods(self):
get_token()
add_to_shopping_trolley() @allure.story("商品加入购物车")
@allure.title("异常用例--将库存数=0的商品加入购物车")
@allure.description("校验库存数为0的商品加入购物车是否提示正确的错误信息")
@allure.severity("normal")
def test_add_goods_error(self):
get_token()
add_to_shopping_trolley() @allure.story("查询购物车商品数量")
@allure.title("查询购物车所有商品的总数量")
@allure.description("校验查询购物车所有商品的总数量是否正常")
@allure.severity("critical")
def test_get_goods_quantity(self):
get_token()
add_to_shopping_trolley()
get_shopping_trolley_goods() @allure.story("查询购物车商品数量")
@allure.title("查询购物车单个商品的数量")
@allure.description("校验查询购物车单个商品的数量是否正常")
@allure.severity("critical")
def test_get_goods_quantity(self):
get_token()
add_to_shopping_trolley()
get_shopping_trolley_goods() @allure.story("清空购物车")
@allure.title("加入商品后再清空购物车")
@allure.description("校验清空购物车接口功能是否正常")
@allure.severity("normal")
def test_empty_shopping_trolley(self):
get_token()
add_to_shopping_trolley()
empty_shopping_trolley() @allure.epic("xx在线购物平台接口测试")
@allure.feature("下单模块")
class TestPlaceOrder: @allure.story("购物车下单")
@allure.title("商品加入购物车再下单")
@allure.description("校验清购物车下单功能是否正常")
@allure.severity("critical")
def test_place_order(self):
get_token()
add_to_shopping_trolley()
place_order() @allure.story("立即购买下单")
@allure.title("选择商品不加入购物车立即购买下单")
@allure.description("校验立即购买下单功能是否正常")
@allure.severity("critical")
def test_order(self):
get_token()
place_order()

上面测试代码中使用了Allure的一些特性,为了更好的理解这些特性的使用,我们可以将测试脚本由上至下进行分层:

  1. 被测系统,即被测系统的描述,如在线购物商城
  2. 功能模块,一个被测软件系统包含一个或多个功能模块,如在线购物商城包含登录、购物车、下单、支付、发货等模块
  3. 使用场景,一个功能模块中包含一个或多个用户使用场景,如购物车模块包含加入购物车、修改数量、清空购物车的场景
  4. 测试用例,一个场景包含一条或多条测试用例,如加入购物车包含库存数>0 或 <0等测试用例
  5. 测试步骤,一条测试用例由一个或多个测试步骤构成,如将库存数>0商品加入购物车,测试步骤为:登录-->商品加入购物车

对照以上分层,我们再来理解代码中使用的这些Allure特性,如下:

  • @allure.epic(),用于描述被测软件系统

  • @allure.feature(),用于描述被测软件的某个功能模块

  • @allure.story(),用于描述功能模块下的功能点或功能场景,也即测试需求

  • @allure.title(),用于定义测试用例标题

  • @allure.description(),用于测试用例的说明描述

  • @allure.severity(),标记测试用例级别,由高到低分为 blocker、critical、normal、minor、trivial 五级

  • @pytest.allure.step(),标记通用函数使之成为测试步骤,测试方法/测试函数中调用此通用函数的地方会向报告中输出步骤描述

生成报告

生成Allure报告步骤

pytest中Allure生成测试报告需要经过如下两步操作:

  1. 首先,生成测试结果数据:

    # python代码执行
    pytest.main(['testcase/test_case.py', '-s', '-q', '--alluredir', './result'])
    # 命令行形式
    pytest testcase/test_case.py --alluredir ./result

    即运行testcase/目录下的测试用例,将测试结果以json文件的形式保存至当前目录下的result文件夹中。

    参数--alluredir用于指定测试结果保存路径。

  2. 然后,生成HTML格式的测试报告:

    # python代码执行
    os.system('allure generate ./result -o ./report --clean')
    # 命令行形式
    allure generate ./result -o ./report --clean

    即将当前目录下的result文件夹中的json数据,生成测试报告结果及index.html,并保存至当前目录下的report文件夹中。

    --clean表示先清除之前的测试报告,使用与否视情况自行选择。

执行代码

因此,执行模块run.py代码编写如下:

run.py

if __name__ == '__main__':
pytest.main(['testcase/test_case.py', '-s', '-q', '--alluredir', './result'])
os.system('allure generate ./result -o ./report --clean')

运行run.py,结果如下:

报告结果展示

运行run.py后,在run.py同级目录下新增了result文件夹,以及文件夹下的json文件,有多少条测试用例就生成多少个名称为xxxx-result.json的结果文件。

同样在run.py同级目录下新增了report文件夹,report文件夹中生成了一些文件,包括index.html,如下:

在浏览器中打开index.html,打开后首页如下:

选择点击Behaviors后,结果如下:

Allure报告默认语言为英文,可以选择中文,如下:

总结

可以把epic、feature、story理解为将测试用例按照功能模块进行分类,epic为一级类目,feature为二级类目,story为三级类目。

而title、description、severity、step等则用于测试用例自身相关的描述定义。

当然,Allure还有其他的常用特性,下篇文章我们再继续学习。

pytest(11)-Allure生成测试报告(一)的更多相关文章

  1. pytest+jenkins+allure 生成测试报告发送邮件

    前言第一部分:Pycharm for Gitee1. pycharm安装gitee插件2. gitee关联本地Git快速设置- 如果你知道该怎么操作,直接使用下面的地址简易的命令行入门教程:3. Gi ...

  2. python + pytest + allure生成测试报告

    pytest结合allure生成测试报告 环境搭建 要安装java环境,版本要是jdk1.8的,配置好java环境变量,不然输入allure命令会报错,JAVA_HOME环境,自行配置 安装allur ...

  3. Pytest测试框架(五):pytest + allure生成测试报告

    Allure 是一款轻量级.支持多语言的开源自动化测试报告生成框架,由Java语言开发,可以集成到 Jenkins. pytest 测试框架支持Allure 报告生成. pytest也可以生成juni ...

  4. 【Python】使用Pytest集成Allure生成漂亮的图形测试报告

    前言 大概两个月前写过一篇<[测试设计]使用jenkins 插件Allure生成漂亮的自动化测试报告>的博客,但是其实Allure首先是一个可以独立运行的测试报告生成框架,然后才有了Jen ...

  5. Python&Selenium&pytest借助allure生成自动化测试报告

    一.摘要 本篇博文将介绍Python和Selenium进行自动化测试时,如何借助allure生成自动化测试报告 二.环境配置 首先python环境中安装pytest和pytest_allure_ada ...

  6. pytest + allure 生成测试报告

    pytest测试样例规则:测试文件以test_开头(以_test结尾也可以)测试类以Test开头,并且不能带有 init 方法测试函数以test_开头断言使用基本的assert即可 ubuntu 安装 ...

  7. python自动化之使用allure生成测试报告

    Allure测试报告框架帮助你轻松实现"高大上"报告展示.本文通过示例演示如何从0到1集成Allure测试框架.重点展示了如何将Allure集成到已有的自动化测试工程中.以及如何实 ...

  8. pytest 11 allure2生成html报告

    allure是一个report框架,支持java的Junit/testng等框架,当然也可以支持python的pytest框架,也可以集成到Jenkins上展示高大上的报告界面. 环境准备 1.pyt ...

  9. Pytest+allure生成测试报告

    1.Allure.zip包的下载地址: https://github.com/allure-framework/allure2 在跳转页面选择一个allure.zip包的版本下载 若以上方法无法下载z ...

随机推荐

  1. FileReader()读取文件、图片上传预览

    前言 FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据. 其中File对象可以是来自用户 ...

  2. Javascript面向对象——创建对象、构造函数的原型

    Javascript面向对象--创建对象.构造函数的原型 其实:JavaScript中的创建类,就是创建一个构造函数,在创建对象时用到new这个关键字, 一.创建对象 1.函数创建对象 functio ...

  3. Javascript中常用事件集合和事件使用方法

    Javascript中常用事件集合和事件使用方法 一.事件绑定 格式: 事件源 . on事件类型=事件处理函数 事件绑定三要素 1.事件源:和谁绑定 2.事件类型:什么事件 3.事件处理函数:触发了要 ...

  4. 前端3D引擎-Cesium自定义动态材质

    本文代码基于Vue-cli4和使用WebGL的地图引擎Cesium,主要内容为三维场景下不同对象的动态材质构建. 参考了很多文章,链接附在文末. 为不同的几何对象添加动态材质 不知道这一小节的名称概况 ...

  5. 🏆【Alibaba中间件技术系列】「RocketMQ技术专题」系统服务底层原理以及高性能存储设计分析

    设计背景 消息中间件的本身定义来考虑,应该尽量减少对于外部第三方中间件的依赖.一般来说依赖的外部系统越多,也会使得本身的设计越复杂,采用文件系统作为消息存储的方式. RocketMQ存储机制 消息中间 ...

  6. 第07讲:Flink 常见核心概念分析

    Flink系列文章 第01讲:Flink 的应用场景和架构模型 第02讲:Flink 入门程序 WordCount 和 SQL 实现 第03讲:Flink 的编程模型与其他框架比较 第04讲:Flin ...

  7. list概述

    1.list概述 list 是一种双向链表.list 的设计更加复杂一点,好处是每次插入或删除一个元素,就配置或释放一个元素,list 对于空间的运用有绝对的精准,一点也不浪费.而且对于任何位置的元素 ...

  8. HCNP Routing&Switching之组播技术-IGMP-Snooping

    前文我们了解了组播协议IGMP相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15700550.html:今天我们来聊一聊二层交换机处理组播报文所面临的 ...

  9. 出现 error: RPC failed; curl 18 transfer closed with outstanding read data remaining 的原因

    最近在做全栈项目,前台后台,服务器端,三端在一个文件夹,当git clone 项目的时候就会出现:error: RPC failed; curl 18 transfer closed with out ...

  10. 使用IndexedDB缓存给WebGL三维程序加速

    前言 使用webgl开发三维应用的时候,经常会发现三维场景加载比较慢,往往需要等待挺长时间,这样用户的体验就很不友好. 造成加载慢的原因,主要是三维应用涉及到的资源文件会特别多,这些资源文件主要是模型 ...