跳转至

Allure

官方网站

一款支持多语言的测试报告生成框架,官方文档:https://docs.qameta.io/allure-report/#_pytest

本地安装

运行依赖JRE

下载allure-commandline新版zip包

  • Mac:解压到usr/local/下,把bin路径添加到环境变量中。还可以直接用brew install allure快速安装
  • Windows:解压到非中文路径下,把bin目录添加到系统环境变量PATH中。

Allure to Pytest

pip install allure-pytest

# 生成报告到指定路径(--clean-alluredir 清除之前运行产生的文件)
pytest --alluredir=tmp/allure-results [--clean-alluredir]

# 运行allure查看报告
allure serve tmp/allure-results
# 把报告转成html格式(-o 指定路径,--clean 清除之前运行产生的文件)
allrue generate tmp/allures [-o tmp/path] [--clean]
# html格式的报告不能直接打开,需用此命令打开
allure open -h 127.0.0.1 -p 8883 tmp/path

经验:前后两次执行同一文件+方法+传参相同时,生成的allure-result/xxxx-result.json文件中的name字段一致,后一次会变为前一次的retry,也就是所谓的覆盖,如果分布式/多线程/进程运行想最后生成到同一allure-result中不变成覆盖的情况,就要想办法改变name,文件名和方法名不变,只能改变传参,可以用fixture传入一个动态参数(必须使用到params),这样就变成平行的多条用例,而不是覆盖的一条用例。

吐槽:曾经遇到过allure serve path后页面展示缺少了某个模块的用例,但是allure-results中是有相关文件的,所以确定不是用例运行的问题,然后allrue generate pathallure open path是完整的,怀疑allure serve path有点什么bug,没有进一步研究,推荐allure open path

常用特性

  • 静态属性: 装饰器形式使用

20220607201628

import allure

@allure.testcase("case_link_url", "测试链接")

@allure.feature("功能")
@allure.story("子功能")

@allure.title("用例标题")
@allure.title("Parameterized test title: adding {param1} with {param2}")  # 可以使用变量

@allure.step("步骤")

@allure.severity(allure.severity_level.级别)
"""
Blocker 中断 影响下一步
Critical 临界 功能点缺失
Normal 正常 一般bug
Minor 次要 比如UI错误
Trival 轻微 比如文案不规范
"""
  • 动态属性: 方法内使用
# 大部分静态属性都可以变为动态属性,这里只列了两种举例
allure.dynamic.title('After a successful test finish, the title was replaced with this line.')
allure.dynamic.description('A final description.')

with allure.step("步骤,放在方法内"):
  pass
  • 指定属性运行
# 测试指定功能的case
pytest --allure-features="xxx"
pytest --allure-stories="xxx"
# 测试指定级别的Case
pytest --allure-severities critical,normal

添加附件

  • 附件直接显示在报告中
@allure.attach(body, name, attachment_type, extension)
"""
body:附件
name:附件名
attachment_type:附件类型(allure.attachment_type.xxx)
extension:附件扩展名
"""
  • 附件以路径形式显示在报告中
@allure.attach.file(source, name, attachment_type, extension)
"""
source:附件路径
其它同上
"""

页面优化

添加环境

如果要在测试报告概览-环境模块展示信息,可以在allure-results路径下新建一个environment.properties文件

.properties 是java环境的一种配置文件格式

Browser=Chrome
Browser.Version=63.0
Stand=Production

添加分类

默认只显示了failedbroken两类,可以增加skipped等分类

[
  {
    "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"]
  }
]

Docker 服务

allure-server

https://github.com/kochetkov-ma/allure-server

allure-docker-service

https://github.com/fescobar/allure-docker-service

sudo docker run -d -p 5050:5050 \
    -e CHECK_RESULTS_EVERY_SECONDS=3 \
    -e KEEP_HISTORY=1 \
    -e OPTIMIZE_STORAGE=1 \
    -v ${PWD}/allure-results:/app/allure-results \
    -v ${PWD}/allure-reports:/app/default-reports \
    frankescobar/allure-docker-service

# 挂载目录${PWD}可以是任何位置,比如我这里是:/home/ubuntu/work/test_result
#   但${PWD}后面的路径以及对应容器中的路径,是不能改的
#   需要注意文件的权限,最好先手动创建好相应路径,并赋予一定的权限
#   /app/default-reports用于挂载存放历史报告

查看最新报告: http://localhost:5050/allure-docker-service/latest-report

常用API: http://localhost:5050/,比如删除历史记录和测试结果等

  • CHECK_RESULTS_EVERY_SECONDS=3 为每3秒自动检查allure-results是否有文件更新
  • CHECK_RESULTS_EVERY_SECONDS=None 则不检查,可以使用GET /generate-report主动生成,可指定Executors
GET /generate-report?execution_name=自定义名字
GET /generate-report?execution_from=自定义链接
GET /generate-report?execution_type=图标(jenkins/gitlab/github/bamboo/teamcity)
  • KEEP_HISTORY=1 保留历史和趋势(默认保留最新的20个),可使用API清除历史记录,可点击logo查看历史
  • OPTIMIZE_STORAGE=1 将app.js和styles.css这两个不会变的静态文件放在容器/app/resources/中引用,减少default-reports存储

最后更新: 2022-06-21