接口测试框架开发实践:测试报告插件allure-pytest详解

发表于:2024-2-20 09:17

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:软件质量保障    来源:知乎

  Python 主流自动化测试报告插件有三个:HTMLTestRunner、Pytest-html 和 Allure。HTMLTestRunner是一个比较古老的报告模板,界面也不是很好看。Pytest-html界面很简洁,看起来也很直观,是一款比较不错的报告插件。如果你想提升下逼格,让你的自动化测试报告变得高大上,那么请选择 Allure 。
  Allure 是一款轻量级的开源自动化测试报告生成框架。它支持绝大部分测试框架,比如TestNG、Junit 、pytest、unittest 等。本文主要介绍 Pytest 框架结合 Allure 生成格式统一、美观的测试报告。
  安装&配置环境变量
  Allure下载最新版本:
  vim ~/.zshrc
  PATH="/Users/rain/allure-2.9.0/bin:${PATH}"
  export PATH
  source ~/.zshrc
  环境变量配置好后,allure测试一下。
  注意:allure-pytest与allure版本务必一致,否则会生成空白报告。
  pip3 install allure-pytest
  生成报告
  生成测试报告仅需两步。
  1.生成测试数据 pytest test_allure_demo.py --alluredir ./report
  2.生成测试报告 allure serve report
  我随便写了一段代码测试一下,仅供参考。
  #!/usr/bin/env python
  # -*- encoding: utf-8 -*-
  '''
  @File    :   testcase_001.py
  @Time    :   2021/06/20 12:07:09
  @Author  :   软件质量保障
  @wechat  :   ISTE1024
  @Email   :   byteflow@163.com
  @Blog    :   https://www.zhihu.com/people/iloverain1024
  @Copyright : 侵权必究
  '''
  import pytest
  import requests
  import yaml
  import allure
  @allure.feature("编辑页面")
  class RequestHandler:
      def __init__(self):
          """session管理器:维持会话,可以让我们在跨请求时保存某些参数"""
          self.session = requests.session()
      def httpcore(self, method, url, params=None, data=None, json=None, headers=None, **kwargs):
          return self.session.request(method,url, params=params, data=data, json=json, headers=headers,**kwargs)
      def close_session(self):
          """关闭session"""
          self.session.close()
  @allure.step("编辑页面")
  def get_test_data(test_data_path):
      case = []  # 存储测试用例名称
      http = []  # 存储请求对象
      expected = []  # 存储预期结果
      data = yaml.safe_load(open(test_data_path,encoding='utf-8'))
      for td in data:
          case.append(td.get('case', ''))
          http.append(td.get('http', {}))
          expected.append(td.get('expected', {}))
      parameters = zip(case, http, expected)
      return case, parameters
  cases, params = get_test_data('./testcases/data/TEST_DATA_001.yaml')
  @allure.story("测试")
  @pytest.mark.parametrize("case,http,expected", list(params), ids=cases)
  def test_main(case, http, expected):
      method = http["method"]
      url = http["path"]
      headers = http["headers"]
      json = http["body"]['payload']
      req = RequestHandler()
      login_res = req.httpcore(method, url=url, headers=headers, data=json)
      print('--登陆结果---')
      assert login_res.json()['code'] == expected['response']['code']
  1.生成测试数据
  # 其中 --alluredir参数的作用是指出生成的报告文件夹,运行完后就会在当前目录下生成一个report文件夹,report文件夹下放着生成报告文件。
  pytest test_allure_demo.py --alluredir ./report
  2.生成测试报告
  # 执行后,会自动打开浏览器的一个页面来显示测试报告。
  allure serve report
  报告结构
  通过上图的报告页面可以看到,allure整体分为7部分:
  Overview、Categories、Suites、Graphs、Timelines、Behavior、Packages。
  1.Overview
  概览页是报告所有内容的汇总页,可以通过点击对应的元素跳转到相应的页面。大体上汇总以下内容:
  ·测试结果统计 - 报告执行结果统计。
  · 执行 - 如果此报告表示几次测试执行,这里将显示每次执行的统计数据。
  · 历史趋势 - 如果测试积累了一些历史数据,它的趋势将被计算并显示在图表中。
  · 环境 - 测试环境的信息。
  · 测试套件 - 可以跳转到Suites页面。
  · 类别 - 点击跳转到Categories页面。
  空白处内容作者没有配置,所以没有展示。
  2.Categories
  默认存在两类缺陷:
  · 产品缺陷(测试失败)
  · 测试缺陷(测试中断)
  当然,类别也提供创建自定义缺陷分类的方法,以应用于测试结果分类。可以在 allure-results 目录中添加 categories.json 文件。
  [
    {
      "name": "Ignored tests", 
      "matchedStatuses": ["skipped"] 
    },
    {
      "name": "Infrastructure problems",
      "matchedStatuses": ["broken", "failed"],
      "messageRegex": ".*bye-bye.*" 
    },
    {
      "name": "Outdated tests",
      "matchedStatuses": ["broken"],
      "traceRegex": ".*FileNotFoundException.*" 
    },
    {
      "name": "Product defects",
      "matchedStatuses": ["failed"]
    },
    {
      "name": "Test defects",
      "matchedStatuses": ["broken"]
    }
  ]
  参数:
  ·name [必填]:分类的名字
  · matchedStatuses [可选]:测试用例的运行状态,默认是["failed", "broken", "passed", "skipped", "unknown"]
  · messageRegex [可选]:测试用例运行的错误信息,使用正则表达式匹配。默认是".*"
  · traceRegex [可选]:测试用例运行的堆栈信息,使用正则表达式匹配。默认是".*"
  3.Suites
  在测试集选项卡上,可以按测试套件和类分组展示已执行测试。
  4.Graphs
  图表页上可以查看从测试数据收集的不同统计信息: 状态和持续时间图等。
  5.Timelines
  时间轴能够展示可视化测试执行,Allure 适配器收集测试执行时间,并且在选项卡上根据顺序进行排列。
  6.Behaviors
  allure支持行为驱动测试的展示,该选项卡根据特性和故事标签对测试结果进行分组展示。
  7.Packages
  根据不同的测试代码所在的package以树状布局展示测试结果。
  Allure常用特性
  @allure.feature:用于描述被测试产品功能模块
  @allure.story:用于描述feature的用户场景,即功能子模块
  @allure.step : # 用于描述测试步骤,将会输出到报告中
  @allure.attach:用于向测试报告中输入一些附加的信息,通常是一些测试数据,截图等
  @allure.severity:标注测试用例的重要级别
  blocker:阻塞缺陷
  critical:严重缺陷
  normal:一般缺陷
  minor:次要缺陷
  trivial:轻微缺陷
  @allure.description: 标注测试用例的描述
  @allure.issue:对应缺陷管理系统里面的链接
  @allure.link:定义一个链接,在测试报告展现
  空白页问题
  allure空白页 报错 Uncaught TypeError: P.a.registerLanguage is not a function,Uncaught ReferenceError: allure is not defined问题解决方法。
  原因:本地安装的allure版本和allure-pytes插件版本不一致造成的;
  查看二者的版本:
  #查看allure版本
  allure --version
  # allure-pytest插件版本
  python3 list
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号