原文:allure 生成报告
前面文章写了使用 pytest-html
插件生成报告,那为什么还要讲解使用 allure
来生成报告呢?从 pytest-html
生成的报告看出来还是缺少一些报告的元素,如直观的展示不同的维度统计用例执行结果图表,还有就是领导喜欢直观、简洁、数据清晰的测试报告,相信大家都喜欢这样的报告,所以为了大家的发展,不管怎么样都要学会更好看的报告。
官方说明地址:https://docs.qameta.io/allure/#_about
Allure Framework
- Allure Framework is a flexible lightweight multi-language test report tool that not only shows a very concise representation of what have been tested in a neat web report form, but allows everyone participating in the development process to extract maximum of useful information from everyday execution of tests.
- From the dev/qa perspective Allure reports shorten common defect lifecycle: test failures can be divided on bugs and broken tests, also logs, steps, fixtures, attachments, timings, history and integrations with TMS and bug-tracking systems can be configured, so the responsible developers and testers will have all information at hand.
- From the managers perspective Allure provides a clear 'big picture' of what features have been covered, where defects are clustered, how the timeline of execution looks like and many other convenient things. Modularity and extensibility of Allure guarantees that you will always be able to fine-tune something to make Allure suit you better.
翻译:
- Allure Framework 是一种灵活的轻量级多语言测试报告工具,不仅可以以简洁的 Web 报告形式非常简洁地显示已测试的内容,也允许参与开发过程的每个人从日常测试中提取最大程度的有用信息。
- 从开发/质量保证的角度来看,Allure 报告可以缩短常见缺陷的生命周期:可以将测试失败划分为 bug 和损坏的测试,还可以配置 log,step,fixture,attachments,timings,历史记录以及与 TMS 的集成以及 Bug 跟踪系统,因此负责任的开发人员和测试人员将掌握所有信息
- 从管理人员的角度来看,Allure 提供了一个清晰的 “全局”,涵盖了已涵盖的功能,缺陷聚集的位置,执行时间表的外观以及许多其他方便的事情,Allure 的模块化和可扩展性确保您始终能够微调某些东西,以使 Allure 更适合您
3.7.0
6.2.4
2.14.0
2.9.43
allure-2.14.0.zip
解压到一个盘的根目录,如 E:\allure-2.14.0
allure
命令,需要配置到环境变量
allure --version
,显示出 2.14.0
就代表配置成功
pip install allure-pytest
安装最新版即可。pip show allure-pytest
是不是到现在为止,大家都想看下 allure 长得怎么样,那我们就先写个简单的 demo,生成一个简单的报告给大家看下,在进行详细的讲解。
test_allure.py
代码:
# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time :2021/7/13 22:53
# @Author : king
# @File :test_allure.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest
import logging
def test_01():
"""我是 test_01 用例描述"""
logging.info("用例 test_01 执行完成。。")
assert True
def test_02():
"""我是 test_02 用例描述"""
logging.info("用例 test_02 执行完成。。")
assert False
def test_03():
"""我是 test_03 用例描述"""
logging.info("用例 test_03 执行完成。。")
assert True
if __name__ == '__main__':
pytest.main()
pytest --alluredir ./allure_report test_allure.py
,是不是看见当前路径生成一个allure_report
目录,那里面就是 allure
生成报告需要的测试记录数据
allure serve allure_report
,就会自动在默认浏览器打开 allure 报告,默认为英文模式
就从这这些界面,可以看出来,这个报告是不是数据、图表很丰富,还有看见好多地方显示空白、数据不是很丰富,大家不要着急,接下来会讲解如何将我们的报告更加丰富起来。
首先,我们该怎么丰富呢,从哪些方面出发?这里我就当大家写过功能测试用例,功能测试用例要素应该包括功能、模块、编号、标题、前提条件、操作步骤、用例等级、预期结果、实际结果、测试数据等等,我们的自动化用例应该是从功能用例转化而来,下面让我看下 allure
报告里面有哪些常用方法,见下表。
方法 | 参数说明 |
---|---|
@allure.epic() | 可以认为是大功能模块,敏捷里面的概念,史诗 |
@allure.feature() | 模块名称,功能点的描述 |
@allure.story() | 用户故事 |
@allure.title() | 用例的标题 |
@allure.testcase() | 测试用例的链接地址 |
@allure.issue() | 缺陷链接 |
@allure.description() | 用例描述 |
@allure.step() | 用例步骤 |
@allure.severity() | 用例等级 |
@allure.link() | 链接 |
@allure.attach() | 附件 |
使用方法说明:我们看见表格里面的方法就应该知道,都是以装饰器的方式进行使用,下面看下详情使用情况
使用方法:@allure.severity(allure.severity_level.CRITICAL ) 或者 @allure.severity('critical')
常用等级划分
class Severity(str, Enum):
BLOCKER = 'blocker' # blocker:阻塞缺陷(功能未实现,无法下一步)
CRITICAL = 'critical' # 严重缺陷(功能点缺失)
NORMAL = 'normal' # 一般缺陷(边界情况,格式错误)
MINOR = 'minor' # 次要缺陷(界面错误、ui问题)
TRIVIAL = 'trivial' # 轻微缺陷(非重点功能的轻微问题)
由于用例需要前置条件,我们就使用 fixture 来实现,我们将 fixture 写到 conftest.py
文件里面:
conftest.py 代码:
# -*- coding: utf-8 -*-
"""
# @Project :demo_test
# @Time :2021/7/14 14:47
# @Author :king
# @File :conftest.py
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import pytest
import logging
def pytest_collection_modifyitems(items):
"""
测试用例收集完成时,将收集到的item的name和nodeid的中文显示在控制台上
:return:
"""
for item in items:
item.name = item.name.encode("utf-8").decode("unicode_escape")
item._nodeid = item.nodeid.encode("utf-8").decode("unicode_escape")
@pytest.fixture(scope="session", autouse=True)
def login():
logging.info("我是登录功能")
yield
logging.info("我是退出功能")
case_step.py
代码:
# -*- coding: utf-8 -*-
"""
# @Project :pytest_demo
# @Time :2021/7/14 14:46
# @Author :king
# @File :case_step.py
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import allure
import logging
@allure.step("我是操作步骤一")
def step_01():
logging.info("我是操作步骤一......")
@allure.step("我是操作步骤二")
def step_02():
logging.info("我是操作步骤二......")
@allure.step("我是操作步骤三")
def step_03():
logging.info("我是操作步骤三......")
@allure.step("我是操作步骤四")
def step_04():
logging.info("我是操作步骤四......")
@allure.step("我是添加附件")
def step_05():
logging.info("我是添加附件......")
allure.attach(open("test.PNG", mode="rb").read(), "截图", allure.attachment_type.PNG)
test_allure.py
代码:
# !/usr/bin/python3
# _*_coding:utf-8 _*_
""""
# @Time :2021/7/14 14:46
# @Author : king
# @File :test_allure.py
# @Software :PyCharm
# @blog :https://blog.csdn.net/u010454117
# @WeChat Official Account: 【测试之路笔记】
"""
import logging
import allure
import pytest
from class_06.case_step import step_02, step_01, step_03, step_04, step_05
@allure.epic("备课")
@allure.feature("教材管理")
class TestTextBook:
@allure.story("添加教材成功")
@allure.testcase("http://XXX.XXX.x.x:8081/butly/testcase-1.html")
@allure.issue("http://XXX.XXX.x.x:8081/butly/bug-1.html")
@allure.link("https://blog.csdn.net/u010454117")
@allure.title("添加教材")
@user61tml("<h2><font color='red'>正常添加教材</font></h2>")
@allure.severity(allure.severity_level.CRITICAL)
def test_add_textbook(self):
"""用例描述:
1.在教材界面,点击新增按钮
2.在新增教材界面,选择教材版本、章节信息
3.点击确定按钮
"""
logging.info("开始添加教材操作")
step_01()
step_02()
step_05()
logging.info("添加教材完成")
@allure.testcase("http://XXX.XXX.x.x:8081/butly/testcase-2.html")
@allure.issue("http://XXX.XXX.x.x:8081/butly/bug-3.html")
@allure.link("https://blog.csdn.net/u010454117")
@allure.title("删除教材")
@allure.story("删除教材成功")
@allure.description("正常删除教材数据")
@allure.severity(allure.severity_level.CRITICAL)
def test_delete_textbook(self):
"""用例描述:
1.在教材界面,选择需要删除的教材
2.在教材界面,点击删除按钮
3.再确认删除界面,点击确定按钮
"""
logging.info("开始删除教材操作")
step_03()
step_04()
logging.info("删除教材完成")
@allure.epic("备课")
@allure.feature("资源管理")
class TestResources:
@allure.testcase("http://XXX.XXX.x.x:8081/butly/testcase-5.html")
@allure.issue("http://XXX.XXX.x.x:8081/butly/bug-5.html")
@allure.link("https://blog.csdn.net/u010454117")
@allure.title("添加资源")
@allure.story("添加资源成功")
@allure.severity(allure.severity_level.CRITICAL)
def test_add_resources(self):
"""用例描述:
1.在资源界面,点击添加的资源
2.在资源预览界面,点击添加按钮
"""
logging.info("开始添加资源操作")
step_01()
step_02()
step_05()
logging.info("添加资源完成")
@allure.testcase("http://XXX.XXX.x.x:8081/butly/testcase-6.html")
@allure.issue("http://XXX.XXX.x.x:8081/butly/bug-6.html")
@allure.link("https://blog.csdn.net/u010454117")
@allure.title("删除资源")
@allure.story("删除资源成功")
@allure.severity(allure.severity_level.CRITICAL)
def test_delete_resources(self):
"""用例描述:
1.在备课界面,点击资源的删除按钮
2.在资源删除确定界面,点击确定按钮
"""
logging.info("开始删除资源操作")
step_01()
step_04()
logging.info("删除资源完成")
assert "删除成功" == "删除教材成功"
if __name__ == '__main__':
pytest.main()
目录结构如下:
pytest --alluredir ./allure_report test_allure.py
,是不是看见当前路径生成一个allure_report
目录,那里面就是 allure
生成报告需要的测试记录数据allure serve allure_report
命令,自动打开 allure
报告,切换到中文2.运行命令 allure generate allure_report -o ./html --clean
, 可以看出来生成一个html
的目录。使用浏览器打开里面的 index.html
文件,也可以打开报告
总览界面
类别页面,显示失败的用例详情
测试套
图表界面
时间刻度
功能界面
包
从上面执行结可以看出来,allure
添加了不同的属性之后,测试报告上面用例操作可以跟功能测试用例一样,非常容易知道自动化用例具体执行了什么操作,这样的报告给大家非常清晰、明了。
以上为内容纯属个人理解,如有不足,欢迎各位大神指正,转载请注明出处!
如果觉得文章不错,欢迎关注微信公众号,微信公众号每天推送相关测试技术文章
搜索【测试之路笔记】