pytest(11)-Allure生成测试报告

简介: 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下载,如下图所示:

微信图片_20220425173230.png

下载后解压文件,并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
  1. 即运行testcase/目录下的测试用例,将测试结果以json文件的形式保存至当前目录下的result文件夹中。
    参数--alluredir用于指定测试结果保存路径。
  2. 然后,生成HTML格式的测试报告:
# python代码执行
os.system('allure generate ./result -o ./report --clean')
# 命令行形式
allure generate ./result -o ./report --clean
  1. 即将当前目录下的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,结果如下:

微信图片_20220425173240.png


报告结果展示

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

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

微信图片_20220425173243.png

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

微信图片_20220425173247.png

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

微信图片_20220425173251.png

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

微信图片_20220425173254.png


总结


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

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

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

相关文章
|
4月前
|
存储 设计模式 测试技术
怎么基于Pytest+Requests+Allure实现接口自动化测试?
该文介绍了一个基于Python的自动化测试框架,主要由pytest、requests和allure构成,采用关键字驱动模式。项目结构分为六层:工具层(api_keyword)封装了如get、post的请求;参数层(params)存储公共参数;用例层(case)包含测试用例;数据驱动层(data_driver)处理数据;数据层(data)提供数据;逻辑层(logic)实现用例逻辑。代码示例展示了如何使用allure装饰器增强测试报告,以及如何使用yaml文件进行数据驱动。
107 0
|
20天前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
49 6
基于Python访问Hive的pytest测试代码实现
|
2月前
|
前端开发 关系型数据库 测试技术
django集成pytest进行自动化单元测试实战
在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试框架,Pytest提供了更为丰富和强大的测试功能。本文通过一个实际项目ishareblog介绍django集成pytest进行自动化单元测试实战。
30 3
django集成pytest进行自动化单元测试实战
|
3月前
|
Shell Python
`pytest-httpserver`是一个pytest插件,它允许你在测试期间启动一个轻量级的HTTP服务器,并模拟HTTP请求和响应。
`pytest-httpserver`是一个pytest插件,它允许你在测试期间启动一个轻量级的HTTP服务器,并模拟HTTP请求和响应。
|
3月前
|
监控 Python
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
`pytest-qt` 是一个用于在 Qt 应用程序中进行 GUI 测试的 pytest 插件。
|
5月前
|
jenkins 测试技术 持续交付
Pytest测试框架
Pytest是一个功能强大的测试框架,支持单元测试和复杂功能测试,可结合Requests和Selenium等进行接口和自动化测试。它拥有超过315个插件,兼容unittest,并能与Allure、Jenkins集成实现持续集成。安装可通过pip或Pycharm。Pytest遵循特定命名规则,测试用例由名称、步骤和断言组成。断言用于验证预期结果,当失败时程序会终止。Pytest提供setup/teardown机制来管理测试前后的资源。
77 3
|
5月前
|
测试技术 持续交付 Python
Python测试架构pytest
【4月更文挑战第19天】pytest 是一个强大且灵活的 Python 测试框架,它可以帮助你编写高效且可维护的测试。通过遵循上述基本架构指南,你可以开始使用 pytest 来提高你的 Python 项目的质量和可靠性。
25 2
|
5月前
|
测试技术 iOS开发
pytest Mark标记测试用例
使用`pytest.mark`进行测试用例分组和筛选,如`@pytest.mark.webtest`。通过`pytest -m`参数执行特定标记的用例,例如`pytest -s test_command_param.py -m webtest`。同时,pytest支持内置的skip、skipif和xfail功能来管理特殊用例:skip始终跳过,skipif条件满足时跳过,xfail则标记预期失败的测试。
32 0
|
5月前
|
前端开发 测试技术 C++
Python自动化测试面试:unittest、pytest与Selenium详解
【4月更文挑战第19天】本文聚焦Python自动化测试面试,重点讨论unittest、pytest和Selenium三大框架。unittest涉及断言、TestSuite和覆盖率报告;易错点包括测试代码冗余和异常处理。pytest涵盖fixtures、参数化测试和插件系统,要注意避免过度依赖unittest特性。Selenium的核心是WebDriver操作、等待策略和测试报告生成,强调智能等待和元素定位策略。掌握这些关键点将有助于提升面试表现。
235 0
|
5月前
|
运维 测试技术
实用指南:使用Pytest Allure测试框架添加用例失败截图
本文介绍了如何在使用`allure+pytest`进行软件测试时,通过`pytest_runtest_makereport`钩子函数自动捕获失败用例的截图。在`conftest.py`中定义钩子,当用例失败时,保存截图并附加到Allure测试报告中。测试代码示例展示了登录豆瓣的场景,测试失败时会自动生成截图。这种方法有助于快速理解和解决测试问题,提升测试效率和软件质量。
133 0
下一篇
无影云桌面