allure介绍
allure是一个轻量级,灵活的,支持多语言的测试报告工具
多平台的,奢华的report框架
可以为dev/qa提供详尽的测试报告、测试步骤、log
也可以为管理层提供high level统计报告
java语言开发的,支持pytest,javaScript,PHP等
可以集成到jenkins
Allure 报告生成的原理
Allure 报告是基于标准的 xUnit 结果输出,再添加补充数据而生成的,其报告的生成基于如下两个步骤。
1、在测试执行期间,一个名为 Adapter 的小型 library 被连接到测试框架中,并将所有测试执行的信息保存到 XML 文件中。对于大多数编程语言下的流行测试框架(例如 python 语言中的 pytest,Java 中的 jUnit 等),Allure 都默认为其提供了 Adapter。
2、获取 XML 文件后,Allure 会将这些 XML 文件转换为 HTML 报告。这一步骤可以通过持续集成系统的 Allure 插件,或者命令行命令实现。
环境安装
前提:安装java环境(建议安装JDK1.8版本,此处不展开说明)
安装allure
下载地址
https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
下载完成后,解压zip包放到电脑非中文目录下,然后将文件夹中的bin目录配置到环境变量path中
验证:
配置完成后,重新打开dos窗口
执行命令allure --version,查看版本信息
常用参数
一、查看allure 命令的帮助文档
allure -h
allure 命令的语法格式
allure [options] [command] [command options]
options 列表
options: --help 命令行帮助文档 -q, --quiet 切换至安静模式 Default: false -v, --verbose 切换至冗长模式 Default: false --version 版本信息 Default: false
command 列表
generate serve open plugin
二、generate 命令行参数
作用
生成 allure 的html 报告
语法格式
generate [options] allure结果目录
【注】:allure 结果目录就是运行 pytest 命令时--alluredir 跟的那个目录: pytest -sq --alluredir= ./allure
命令选项
选项 描述
-c , --clean 删除allure报告生成的目录,就是-○跟的目录
--config allure命令行配置路径,如果指定会覆盖--profile和--configDirectory
--configDirectory allure命令行配置目录
--profile allure命令行配置文件
-o, --report-dir,--output 生成allure报告的目录
默认:执行命令当前目录下的 allure-report
没有目录则自动生成
最常用的就是 -o 与 -c 两个命令行参数。
三、open 命令行参数:结合generate 命令行参数一起使用
作用
打开已经生成的 allure 测试报告,就是打开 generate 命令生成的报告。
语法格式
open [options] allure报告目录
【注】:allure 报告目录就是运行 allure generate 命令时-o 跟的那个目录: allure generate -o ./allure-report
命令选项
选项 描述
-h,--host 该host将用于启动报告的Web服务器
-p,--port 该port将用于启动报告的Web服务器
四、serve 命令行参数
作用
启动 allure 服务,打开 allure 报告。【区分与open命令行参数的区别】
语法格式
serve [options] allure结果目录
【注】:allure 结果目录就是运行 pytest 命令,--alluredir 跟的那个目录: pytest -sq --alluredir= ./allure
命令选项
选项 描述
--config allure命令行配置路径,如果指定会覆盖--profile和--configDirectory
--configDirectory allure命令行配置目录
--profile allure命令行配詈文件
-h , --host 该host将用于启动报告的Web服务器
-p , --port 该port将用于启动报告的Web服务器
allure的执行
在测试执行期间收集结果
pytest [测试文件] -s -q --alluredir=./result/ (--alluredir这个选项,用于指定存储测试结果的路径)
python项目下 安装allure
result下生成中间结果
查看测试报告:
方式一:
测试完成后,查看实际报告,在线看报告,会直接打开默认浏览器展示当前报告
allure serve ./result/ (注意这里的serve书写)
使用管理员方式运行即可解决
方式二:
从结果生成报告,这是一个启动tomcat的服务。需要两个步骤,生成报告,打开报告
生成报告:
allure generate ./result/ -o ./report --clean (注意:覆盖路径加--clean)
两种方式的区别:
①第一种方式是将allure测试报告的原始数据(xml/json/text/attach等文件)直接在浏览器打开allure测试报告;而不在本地生成任何文件。
②第二种方式是首先在本地生成allure测试报告。然后在使用命令在浏览器打开allure测试报告。【此时allure测试报告原始数据仍然存在,而且会生成一个生成后的allure测试报告目录】
第二种方式支持直接在pycharm中选择浏览器打开 index.html 同样可以看到allure测试报告。【第一种方式不生成 index.html ,只能通过 allure server 打开测试报告】;但是如果在使用generate的方式生成allure测试报告之后,需要将此报告展示给其他人观看,同样需要 allure open ./allure-report 开启一个web服务供其他主机查看。
打开报告:
allure open -h 127.0.0.1 -p 8883 ./report/
allure合并测试报告
方式一
allure serve ./result1 ./result2 ./result3
方式二
allure generate -c -o ./report ./result1 ./result2 ./result3
allure open ./report
allure pytest报告中添加用例描述
使用方法 | 参数值 | 参数说明 |
@allure.epic() | epic描述 | 定义项目、当存在多个项目时使用 |
@allure.feature() | 模块名称 | 用例按照模块区分,存在多个模块时使用 |
@allure.story() | 用例名称 | 用例的描述 |
@allure.title() | 用例标题 | 用例标题 |
@allure.testcase() | 用例相关链接 | 自动化用例对应的功能用例存放系统的地址 |
@allure.issue() | 缺陷地址 | 对应缺陷管理系统里面的缺陷地址 |
@allure.description() | 用例描述 | 对测试用例的详细描述 |
@allure.step() | 操作步骤 | 测试用例的操作步骤 with allure.step() |
@allure.severity() | 用例等级 | blocker(阻塞)、critical(严重)、normal(一般)、minor(次要)、trivial(轻微) |
@allure.link() | 定义连接 | 用于定义一个需要在测试报告中展示的连接 |
@allure.attachment() | 附件 | 添加测试报告附件 |
演示实例
import allure
import pytest@allure.feature("演示实例")
class Testdome:a = ["1", "2", "3"]# 参数化,ids表示起别名@allure.story("测试演示1")@pytest.mark.parametrize("sum", a, ids=["test1", "test2", "test3"])def test_demo(self, sum):with allure.step("步骤1"):print(sum)with allure.step("步骤2"):print("测试步骤展示")@allure.severity(allure.severity_level.BLOCKER)@allure.story("测试演示2")@allure.title("测试标题显示")#@allure.link('https://www.baidu.com', name="百度地址")@allure.issue('https://workbench.ctbiyi.com/tw/project', "缺陷地址")@pytest.mark.demo1def test_demo1(self):pass
测试报告中添加附件
方式一
allure.attach(body, name, attachment_type, extension)
参数解释:
body :要写入附件的内容;
name :附件名字;
attachment_type :附件类型,是 allure.attachment_type 其中的一种;
extension :附件的扩展名;
实例演示
@allure.severity(allure.severity_level.CRITICAL)
@allure.issue('https://workbench.ctbiyi.com/tw/project', "缺陷地址")
@pytest.mark.demo2
def test_demo2(self):with allure.step("测试步骤1"):allure.attach("这是一段文本测试信息", name="文本展示")print("测试添加附件")with allure.step("测试步骤2"):allure.attach('<img id="s_lg_img" class="s_lg_img_gold_show" src="//www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png" width="270" height="129" onerror="this.src="https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1-66368c33f8.png";this.onerror=null;" usemap="#mp">',name="html展示",attachment_type=allure.attachment_type.HTML)pass
方式二
allure.attach.file(source, name, attachment_type, extension)
参数解释:
source :文件路径,相当于传一个文件;
name :附件名字;
attachment_type :附件类型,是 allure.attachment_type 其中的一种;
extension :附件的扩展名;
@allure.severity(allure.severity_level.CRITICAL)
@allure.issue('https://workbench.ctbiyi.com/tw/project', "缺陷地址")
@pytest.mark.demo2
def test_demo2(self):with allure.step("测试步骤1"):allure.attach.file('C:/Users/韩寿帅/Desktop/测试截图.jpg', name="截图展示",attachment_type=allure.attachment_type.JPG,extension=".jpg")print("测试添加附件")pass