• 全网最牛自动化测试框架系列之pytest(11)-Allure生成测试报告


    【文章末尾给大家留下了大量的福利哦】 

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

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

    环境搭建

    安装allure-pytest

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

    安装命令:pip install allure-pytest

    安装Allure

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

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

    至此,环境搭建完成。

    定制报告

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

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

    1. import allure
    2. import pytest
    3. import os
    4. @allure.step("登录获取token")
    5. def get_token():
    6. print("请求登录接口获取token")
    7. @allure.step("加入购物车")
    8. def add_to_shopping_trolley():
    9. print("请求加入购物车接口")
    10. @allure.step("查询我的购物车")
    11. def get_shopping_trolley_goods():
    12. print("请求查询我的购物车接口")
    13. @allure.step("清空购物车")
    14. def empty_shopping_trolley():
    15. print("请求清空购物车接口")
    16. @allure.step("下单")
    17. def place_order():
    18. print("请求下单接口")
    19. @allure.epic("xx在线购物平台接口测试")
    20. @allure.feature("购物车功能模块")
    21. class TestShoppingTrolley:
    22. @allure.story("商品加入购物车")
    23. @allure.title("正向用例--将库存数>0的商品加入购物车")
    24. @allure.description("校验库存数不为0的商品加入购物车是否正常")
    25. @allure.severity("critical")
    26. def test_add_goods(self):
    27. get_token()
    28. add_to_shopping_trolley()
    29. @allure.story("商品加入购物车")
    30. @allure.title("异常用例--将库存数=0的商品加入购物车")
    31. @allure.description("校验库存数为0的商品加入购物车是否提示正确的错误信息")
    32. @allure.severity("normal")
    33. def test_add_goods_error(self):
    34. get_token()
    35. add_to_shopping_trolley()
    36. @allure.story("查询购物车商品数量")
    37. @allure.title("查询购物车所有商品的总数量")
    38. @allure.description("校验查询购物车所有商品的总数量是否正常")
    39. @allure.severity("critical")
    40. def test_get_goods_quantity(self):
    41. get_token()
    42. add_to_shopping_trolley()
    43. get_shopping_trolley_goods()
    44. @allure.story("查询购物车商品数量")
    45. @allure.title("查询购物车单个商品的数量")
    46. @allure.description("校验查询购物车单个商品的数量是否正常")
    47. @allure.severity("critical")
    48. def test_get_goods_quantity(self):
    49. get_token()
    50. add_to_shopping_trolley()
    51. get_shopping_trolley_goods()
    52. @allure.story("清空购物车")
    53. @allure.title("加入商品后再清空购物车")
    54. @allure.description("校验清空购物车接口功能是否正常")
    55. @allure.severity("normal")
    56. def test_empty_shopping_trolley(self):
    57. get_token()
    58. add_to_shopping_trolley()
    59. empty_shopping_trolley()
    60. @allure.epic("xx在线购物平台接口测试")
    61. @allure.feature("下单模块")
    62. class TestPlaceOrder:
    63. @allure.story("购物车下单")
    64. @allure.title("商品加入购物车再下单")
    65. @allure.description("校验清购物车下单功能是否正常")
    66. @allure.severity("critical")
    67. def test_place_order(self):
    68. get_token()
    69. add_to_shopping_trolley()
    70. place_order()
    71. @allure.story("立即购买下单")
    72. @allure.title("选择商品不加入购物车立即购买下单")
    73. @allure.description("校验立即购买下单功能是否正常")
    74. @allure.severity("critical")
    75. def test_order(self):
    76. get_token()
    77. 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. 首先,生成测试结果数据:

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

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

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

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

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

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

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

    执行代码

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

    run.py

    1. if __name__ == '__main__':
    2. pytest.main(['testcase/test_case.py', '-s', '-q', '--alluredir', './result'])
    3. 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还有其他的常用特性,下篇文章我们再继续学习。

     重点:学习资料学习当然离不开资料,这里当然也给你们准备了600G的学习资料

    【需要的可以扫描文章末尾的qq群二维码自助拿走】

    【记得(备注“csdn000”)】

    【或私信000】

    群里的免费资料都是笔者十多年测试生涯的精华。还有同行大神一起交流技术哦。

    项目实战:

    大型电商平台:

    全套软件测试自动化测试教学视频

    300G教程资料下载【视频教程+PPT+项目源码】

    全套软件测试自动化测试大厂面经

    python自动化测试++全套模板+性能测试

    听说关注我并三连的铁汁都已经升职加薪暴富了哦!!!!

  • 相关阅读:
    【Web】https 与 http 的区别
    快速认识 WebAssembly
    (英文)C指针Pointers
    SAS学习2(data步,input语句,从文件中读取数据)
    FlinkSql中的聚合查询
    使用x64dbg手动脱UPX壳(UPX4.1.0)
    [VTK] vtkWindowedSincPolyDataFilter 源码注释解读
    PHP笔记:时间日期
    Vue3 —— 常用 Composition API(零)(setup函数、ref函数、reactive函数、响应式、reactive对比ref)
    文件列表创建工具 Nifty File Lists mac中文版功能特色
  • 原文地址:https://blog.csdn.net/m0_60054525/article/details/126711787