Allure

发布时间 2023-09-25 15:33:44作者: 阿明明

简介

Allire是一款轻量级的开源自动化测试报告生成框架,JAVA语言开发的,支持大部分测试框架,如pytest,unittest等,生成的测试报告是最漂亮的。,而且还可以配合pytest 和jenkin实现CI集成

官方文档:https://docs.qameta.io/allure/#_pytest

 

安装

安装JAVA环境

Allure的运行需要以来java的环境,小编在实测的过程,发现很多的JDK版本是无法运行起来Allure的, 但是jdk1.13是可以的,也建议读者使用该版本

在ubuntu环境下安装jdk,是非常简单的,如下

sudo apt install openjdk-13-jre-headless

在windows下载,去官网下载安装即可
连接:https://www.java.com/en/download/

 

安装Allure命令行工具

在ubuntu下安装

sudo apt-get install allure

 在实际开发中更常用的是将allure源代码下载到本地

 

安装pytest-allure集模块

pip install allure-pytest

 

基本使用

生成allure的测试报告,结果以json格式文件保存在指定的目录

pytest.ini文件

[pytest]
# 指定运行参数
addopts = -s -v -p no:warnings --reruns 3 --reruns-delay 2 -n 4 --alluredir=./results

# 搜索测试文件的目录路径
testpaths = ./

# 搜索测试文件名格式
python_files = pytest_*.py

# 搜索测试类格式
python_classes = Test*

# 搜索测试方法名格式
python_functions = test_*

 

运行测试用例,即可生成指定的json文件

 

生成测试报告

allure serve ./results

会以服务端的方式打开测试报告

 报告结果展示

 

 

生成html格式文档的测试报告
HTML格式文档的生成要依赖上面生成的json文件,所以必须先生成json文件,才可以生成html格式报告

allure generate ./results -o ./reports --clean

 

 

将index.html在浏览器中打开即可

 

常用方法

方法 描述
@allure.testcase(url,name=None) 设置测试用例的站点访问地址
@allure.issue(url,name=None) 设置测试用例的站点缺陷管理地址
@allure.feature(feature) 设置测试用例的模块名称
@allure.severity(severity_level)

设置测试用例的优先级,有五个等级

CRITICAL: 严重缺陷

NORMAL: 普通缺陷(默认值)

MINOR: 较小缺陷

TRIVIAL:不重要缺陷

BLOCKER:阻塞缺陷

@allure.title(title) 设置测试用例的标题名称
@allure.description(description) 设置测试用例的描述信息,是纯文本
@allure.description_html(description_html) 设置测试用例的描述信息,是html文本
@allure.link(url,link_type,name=None) 设置测试用例的缺陷访问地址
allure.step(title) 设置测试用例的执行过程的步骤信息
allure.attach(body, name=None, attachmet_type=None, extension=None)

设置测试用例的文本附件信息,常见的文本附件类型支持

TEXT, SVG,HTML,JSON,YAML,CSV等

allure.attach.file(filepath, name=None, attachment_type=None, extension=None)

设置测试用例的文件附件信息,常见的文件附件类型包括

PNG , GIF,IPG,PDF

 

代码实现


import os
import random
import pytest
import shutil
import allure
from allure_commons.types import LinkType


def add(x, y):
return x + y


@allure.testcase("http://www.luffycity.com", "测试地址站点的首页地址")
@allure.issue("http://www.luffycity.com", "软件缺陷的管理站点的首页地址")
class TestAdd(object):
@allure.feature("测试用例模块的描述: 购物车模块,用户模块")
@allure.story("测试用例的分类描述")
@allure.title("测试用例test_01的标题描述")
@allure.description("测试用例test_01的详细描述")
@allure.severity(allure.severity_level.MINOR) # 较小缺陷等级的用例,如果不设置这个,默认是NORMAL普通缺陷等级的用例
def test_01(self):
res = add(10, 20)
assert res == 30

@allure.feature("测试用例模块的描述: 购物车模块,用户模块")
@allure.story("测试用例的分类描述")
@allure.title("测试用例test_02的标题描述")
# @allure.description("测试用例test_02的详细描述") # 纯文本描述
@allure.description_html("<b style='color: red;'>测试用例test_02的详细描述</b>") # HTML文本描述
@allure.severity(allure.severity_level.BLOCKER) # 阻塞缺陷等级的用例
@allure.link("http://test.luffycity.com/test_02", link_type=LinkType.LINK, name="测试用例:02")

# 只设置当前测试用例方法失败重试
@pytest.mark.flaky(reruns=3, reruns_delay=2)
def test_02(self):
# 注意是使用with上下文管理器语句
with allure.step("步骤1:内容描述"):
result = 1+1

with allure.step("步骤2:内容描述"):
result +=1

print(f"测试结果是:{result}")
assert result == 3

@allure.feature("测试用例模块的描述: 购物车模块,用户模块")
@allure.story("测试用例的分类2描述")
@allure.title("测试用例test_03的标题描述")
@allure.description("测试用例test_03的详细描述")
@allure.severity(allure.severity_level.CRITICAL) # 致命缺陷等级的用例
def test_03(self):
# 图片附件
allure.attach.file("/home/zk4956z3/PycharmProjects/autoTest/demo/images/demo.png", 'demo.png', allure.attachment_type.PNG)
# 文本附件
allure.attach("""<h1>Test with some complicated html description</h1>
<table style="width:100%">
<tr>
<th>Firstname</th>
<th>Lastname</th>
<th>Age</th>
</tr>
<tr align="center">
<td>William</td>
<td>Smith</td>
<td>50</td>
</tr>
<tr align="center">
<td>Vasya</td>
<td>Jackson</td>
<td>94</td>
</tr>
</table>""", "Test with some complicated html attachment", allure.attachment_type.HTML)

ret = random.randint(1, 3)
assert ret % 2 == 0

# __name__ 是一个魔术变量,在当前文本被python解释器作为主程序运行是,值固定就是 "__main__"
# 如果当前文件作为模块被其他文件导包使用,则__name__的值,则为当前文件名或者其他的自定义名称,总之不是 "__main__"了。
if __name__ == '__main__':
try:
# 删除之前的测试结果与测试文件目录内容
shutil.rmtree("./reports")
shutil.rmtree("./results")
except Exception as e :
print(e)
pytest.main(["-sv", "/home/zk4956z3/PycharmProjects/autoTest/demo/main.py", "--alluredir", "./results"])
# 生成报告html文件
os.system('/home/zk4956z3/PycharmProjects/autoTest/allure/bin/allure generate ./results -o ./reports --clean')
# # 基于http协议打开HTML测试报告
os.system('/home/zk4956z3/PycharmProjects/autoTest/allure/bin/allure open ./reports')