Allure快速入门
1.关于Allure
Allure框架是一个灵活轻量级多语言测试报告工具,它不仅可以以WEB的方式展示简介的测试结果,而且允许参与开发过程的每个人从日常执行的测试中最大限度的提取有用信息。
Allure报告简化了常见缺陷的统计:失败的测试可以分为BUG和被中断的测试,还可以配置日志、步骤、fixture、附件、计时、执行历史以及与BUG管理系统集成,所以,通过以上配置,所有负责的开发人员和测试人员可以尽可能的掌握测试信息。
2.Allure安装
- 1.下载JDK,下载地址如下所示:
https://www.oracle.com/java/technologies/downloads/
- 2.设置环境变量
以Windows为例,如下所示:
JAVA_HOME=D:\Program Files\Java
Path中添加%JAVA_HOME%\bin
在命令行中分别输入以下命令,不报错,即代表设置成功
C:\Users\admin>java -version
java version "17.0.1" 2021-10-19 LTS
Java(TM) SE Runtime Environment (build 17.0.1+12-LTS-39)
Java HotSpot(TM) 64-Bit Server VM (build 17.0.1+12-LTS-39, mixed mode, sharing)
C:\Users\admin>javac -version
javac 17.0.1
- 3.下载Allure命令行,下载地址如下所示:
https://github.com/allure-framework/allure2/releases/
- 4.将下载到本地的allure压缩包解压到指定目录,并添加相应的环境变量
Path=D:\Program Files\Allure\allure-2.16.0\bin
在命令行中输入allure,不出现报错即可
Usage: allure [options] [command] [command options]
Options:
--help
Print commandline help.
-q, --quiet
Switch on the quiet mode.
Default: false
...
3.Allure用法
3.1 语法格式
allure [options] [command] [command options]
3.2 常用option和command
Options
- -q, --quiet:切换到静默模式,默认关闭
- -v, --verbose:切换详细日志模式,默认关闭
Commands
- generate:生成allure的HTML报告
- -c, --clean:在生成新报告前,清理之前生成报告的目录,默认关闭
- --config:Allure命令行配置文件路径,如果指定将覆盖--profile和--configDirectory所设定的值
- --configDirectory:Allure命令行配置文件目录,默认值为: ALLURE_HOME目录
- --profile:Allure命令行配置文件
- -o, --report-dir, --output:指定生成报告的目录,默认allure-report
- serve:启动serve并查看报告
- 基本语法:serve [options] allure结果目录
- --config:Allure命令行配置文件路径,如果指定将覆盖--profile和--configDirectory所设定的值
- --configDirectory:Allure命令行配置文件目录,默认值为: ALLURE_HOME目录
- --profile:Allure命令行配置文件
- -h, --host:指定访问报告的web服务器地址
- -p, --port:指定访问报告的web服务器地端口,默认为0
- open:查看报告
- 基本语法:open [options] allure报告目录
- -h, --host:指定访问报告的web服务器地址
- -p, --port:指定访问报告的web服务器地端口,默认为0
1.generate常用参数主要为-c和-o
2.open常用参数主要为-h和-p
4.Allure报告结构
- Overview
报告总览
- Categories
类别,允许用户创建自定义的类别。默认分为失败和错误,在执行结果是其中一类时则被归到相应的类中。
- Suites
测试套件,即所有用例的层级关系,可以按package/module/class/method进行查找
- Graphs
测试结果图形化,包含测试用例的运行结果分布图、耗时、优先级等
- Timeline
时序图,将测试用例的执行顺序和测试时间以可视化形式展现出来
- Behaviors
行为驱动,根据Epic、Feature、Story来对测试用例进行分组
- Packages
用例按Package进行分组,根据测试结果按不同的Package进行分组,并以树形结构进行展示
5.Allure特性
5.1 Flaky
该特性用来标识不够稳定的测试用例集,即有些用例运行时,时而成功时而失败。其用意主要如下所示:
- 当用例失败的情况下,能够获取足够详细的信息
- 不标记为Flaky的话,可能就要禁用这些测试
用法如下所示:
@Flaky
public void aTestWhichFailsFromTimeToTime {
...
}
5.2 Environment
Environment表示环境变量参数,用来显示本次测试运行环境的参数。在生成allure-result结果前,通过创建environment.properties或environment.xml文件,并把文件放置到allure-result目录中。
environment.properties
Browser=Chrome
Browser.Version=95.0
Stand=Production
environment.xml
<environment>
<parameter>
<key>Browser</key>
<value>Chrome</value>
</parameter>
<parameter>
<key>Browser.Version</key>
<value>95.0</value>
</parameter>
<parameter>
<key>Stand</key>
<value>Production</value>
</parameter>
</environment>
environment.properties和environment.xml不允许存在中文。
5.3 Categories
默认分类分为两种,如下所示:
- Product defects:产品缺陷,测试结果为失败(failed tests)
- Test defects:测试缺陷,测试结果为错误(broken tests)
除了默认分类之外,也可以自定义创建分类。通过创建categories.json文件,在生成allure-result结果前,提前放置到该目录即可。
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(可选项):测试用例运行的错误堆栈信息,默认是 .* ,通过正则进行匹配
6.Allure与Pytest集成
6.1 Allure行为驱动
allure除了支持Pytest自带的特性之外(fixture、parametrize、xfail、skip),自身也有非常强大的特性,下面来详细介绍。
6.1.1 @allure.step
allure报告允许对每个测试用例的执行步骤进行详细说明,该功能通过@allure.step()装饰器来实现
@allure.step()只有一个参数,就是title
6.1.2 @allure.attach
allure报告支持添加附件并进行展示,可用以补充测试结果,第一种基本语法如下所示:
allure.attach(body, name, attachment_type, extension)
- body:要显示的附件内容
- name:附件名称
- attachment_type:附件类型,属于allure.attachment_type里面的一种
- extension:附件扩展名
allure.attachment_type主要有TEXT、CSV、HTML、XML、JSON、YAML、PCAP、PNG、JPG、SVG、GIF、BMP、MP4、OGG、WEBM、PDF等
第二种基本语法如下所示:
allure.attach.file(source, name, attachment_type, extension)
- source:上传文件所在路径
- 其他参数和上面参数一致
6.1.3 @allure.description
给用例添加详细的描述,常见语法有三种:
1.@allure.description(str)
2.在测试用例函数声明下方添加 """ """
3.@allure.description_html(str)
相当于传一个HTML代码组成的字符串,类似 allure.attach()中传HTML
方式一和方式二作用和效果是一样的
6.1.4 @allure.title
添加测试用例标题,支持占位符传递关键字参数(动态标题,结合(@pytest.mark.parametrize使用)
如果没有添加 @allure.title()的话,测试用例的标题默认就是函数名
6.1.5 @allure.link&@allure.issue&@allure.testcase
三个装饰器源码如下所示:
def link(url, link_type=LinkType.LINK, name=None):
return safely(plugin_manager.hook.decorate_as_link(url=url, link_type=link_type, name=name))
def issue(url, name=None):
return link(url, link_type=LinkType.ISSUE, name=name)
def testcase(url, name=None):
return link(url, link_type=LinkType.TEST_CASE, name=name)
- issue()和testcase()调用的也是link(),只是link_type不一样
- url:跳转的链接,必传参数
- name:显示在allure报告的名字,如果不传就是显示完整的链接
出现三个装饰器的原因是为了更好地将链接分类访问连接、Bug链接、测试用例链接
6.1.6 BDD标记装饰器
在pytest中,可以使用@pytest.mark进行标识,但并不会显示在allure报告上,而allure也提供了三种类型的标记装饰器,它们则是可以显示在allure报告上的,如下所示:
- @allure.epic:敏捷里面的概念,往下是 feature
- @allure.feature:功能点的描述,理解成模块往下是 story
- @allure.story:故事,往下是 title
1.story 是 feature 的子集,当测试用例有 @allure.feature、@allure.story 时,在报告上会先显示 feature,点开之后再显示 story
2.如果不加 @allure.feature、@allure.story 时,在Behaviors栏目下,测试用例都不会分类显示
用命令行方式运行时,可以指定运行某个story、feature、epic
--allure-epics
--allure-features
--allure-stories
6.1.7 @allure.severity
allure提供了用例级别,因此在allure报告可以清晰看到不同级别用例的缺陷数量。详细等级如下所示:
级别 | 含义 | 详细解释 |
---|---|---|
blocker | 阻塞缺陷 | 无法执行下一步操作等 |
critical | 严重缺陷 | 功能点缺失或直接崩溃等 |
normal | 一般缺陷 | 边界值问题,格式错误等 |
minor | 次要缺陷 | UI类错误等 |
trivial | 轻微缺陷 | 必填项无提示或提示信息不规范和统一等 |
6.2 Allure和Pytest安装
执行以下命令安装即可:
pip install -U allure-pytest pytest
6.3 Allure与Pytest集成示例
6.3.1 allure.step示例
示例代码如下所示:
import pytest
import allure
import os
@allure.step("这是第一步")
def inputUrl(url:str):
print(f"输入的网址为:{url}")
@allure.step(title="这是第二步")
def locateElement(xpath:str):
print(f"查找元素的xpath是{xpath}")
@allure.step("这是第三步")
def sendElement():
inputUsernameAndPasswd("Surpass","password")
@allure.step("这是第四步,{username},{password}")
def inputUsernameAndPasswd(username:str,password:str):
print(f"输入的用户名和密码分别为:{username},{password}")
@allure.step("这是第五步")
def test_login():
inputUrl("https://www.baidu.com")
locateElement('//*[@id="su"]')
sendElement()
生成结果如下所示:
6.3.2 allure.attach示例
示例代码如下所示:
import pytest
import allure
import os
def attach01(body,name,attachment_type=allure.attachment_type.TEXT):
"""
附件为内容
"""
allure.attach(body,name,attachment_type=attachment_type)
def attach02(filePath,name,attachment_type=allure.attachment_type.TEXT):
"""
附件为文件
"""
allure.attach.file(filePath,name,attachment_type=attachment_type)
def test_attach01():
body = "<h3>方法一:测试allure附件内容为HTML</h3>"
name = "attach-01-test"
attach01(body,name,attachment_type=allure.attachment_type.HTML)
def test_attach02():
filePath=os.path.join(os.getcwd(),"attach","sample.png")
name="attach-02-test"
attach02(filePath,name,attachment_type=allure.attachment_type.PNG)
生成结果如下所示:
6.3.3 allure.description示例
示例代码如下所示:
import pytest
import allure
def test_allureDescription01():
"""这是一个allure.description示例01"""
assert (7+8)==15
@allure.description("这是一个allure.description示例02")
def test_allureDescription02():
assert (7+8)==15
@allure.description_html("""
<h2>这是一个
<font size=15>allure.description </font>示例03
</h2>
""")
def test_allureDescription03():
assert (7+8)==15
生成结果如下所示:
6.3.4 allure.title示例
示例代码如下所示:
import pytest
import allure
@allure.title("登录")
@pytest.fixture(scope="session")
def loginData(request):
params=request.param
name=params.get("name","")
password=params.get("password","")
code=params.get("code","")
print(f"param is {name},{password},{code}")
yield name,password,code
@allure.title(f"登录成功")
@pytest.mark.parametrize("loginData",[
{"name":"Surpass","password":"123456","code":"SHCQ"},
{"name":"Diana","password":"20210227","code":"FKDT"}
],indirect=True)
def test_loginSucces(loginData):
name,password,code=loginData
body=f"用户名:{name},密码:{password},验证码:{code}"
name="allure.title.test"
allure.attach(body,name,attachment_type=allure.attachment_type.TEXT)
生成结果如下所示:
6.3.5 allure.link&allure.issue&allure.testcase示例
示例代码如下所示:
import pytest
import allure
@allure.link("https://www.google.com")
def test_basicLink():
pass
@allure.link(url="https://www.surpassme.com",name="basicLink")
def test_basicLinkWithName():
pass
@allure.issue(url="https://www.baidu.com",name="issueLink")
def test_issueLink():
pass
@allure.testcase(url="https://www.zentao.net",name="testcaseLink")
def test_testcaseLink():
pass
生成结果如下所示:
6.3.6 BDD标记装饰器示例
示例代码如下所示:
import pytest
import allure
@allure.step("第一步")
def firstStep():
print("这是第一步")
@allure.step("第二步")
def secondStep():
print("这是第二步")
@allure.step("第N步")
def nStep():
print("第N步")
@allure.epic("总体描述")
@allure.feature("测试模块A")
class TestEpicAndFeatureAndStory():
@allure.issue("http://www.surpamssme.com/issue/id=0227")
@allure.testcase("http://www.surpassme.com/testcase/id=0227")
@allure.title("功能A-用例-01")
@allure.story("测试功能A")
@allure.description("Surpassme 测试验证")
def test_CaseA01(self):
print("test_Case01")
firstStep()
secondStep()
@allure.story("测试功能A")
@allure.title("功能A-用例-02")
def test_CaseA02(self):
pass
@allure.story("测试功能A")
@allure.title("功能A-用例-03")
def test_CaseA03(self):
pass
@allure.story("测试功能B")
@allure.title("功能B用例-01")
def test_CaseB01(self):
pass
@allure.story("测试功能B")
@allure.title("功能B用例-03")
def test_CaseB02(self):
pass
生成结果如下所示:
6.3.7 allure.severity
示例代码如下所示:
import allure
@allure.title("blocker")
@allure.severity("blocker")
def test_Case01():
pass
@allure.title("critical")
@allure.severity("critical")
def test_Case02():
pass
@allure.title("normal")
@allure.severity("normal")
def test_Case03():
pass
@allure.title("minor")
@allure.severity("minor")
def test_Case04():
pass
@allure.title("trivial")
@allure.severity("trivial")
def test_Case05():
pass
生成结果如下所示:
原文地址:https://www.cnblogs.com/surpassme/p/15491632.html
本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:
Allure快速入门的更多相关文章
- pytest封神之路第零步 快速入门
背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...
- Web Api 入门实战 (快速入门+工具使用+不依赖IIS)
平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...
- SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)
SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...
- 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)
今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
- Mybatis框架 的快速入门
MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...
- grunt快速入门
快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...
- 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...
随机推荐
- 分组密码(三)DES 算法— 密码学复习(六)
在介绍完Feistel结构之后,接下来进入到著名的DES算法. 6.1 DES算法的意义 在正式介绍DES之前,首先介绍几个重要的历史时间节点. ① 1973年,美国国家标准局(NBS)向社会公开征集 ...
- Hyper-V + WSL2与 VirtualBox 共存
Hyper-V + WSL2与 VirtualBox 共存 这样的教程网上有很多,我先简单复述一下.真正麻烦的是我遇到的问题--开启 Hyper-V 后我的电脑会多出几个删不掉的虚拟显示器来,会在文章 ...
- Mysql将其他表中的数据更新到指定表中
update tb set tb.字段= (select 字段 from tb1 where tb.字段1 = tb1.字段1); update role set uid = (select ID ...
- Docker系列(24)- 实战:DockerFile制作tomcat镜像
实战:DockerFile制作tomcat镜像 step-1 准备镜像文件 tomcat压缩包,jdk压缩包! step-2 编写dockerfile文件,官方命名Dockerfile,build会自 ...
- 通宵修复BUG的思考
HYH.LXJ昨晚通宵修复11月版需求的bug,因为代码提到测试环境后,阻碍了一个分行进行验收测试,业务人员直接把问题反馈给了上级领导,压力下来,项目组就把问题重视起来. 对于通宵加班这件事,应该点赞 ...
- Jmeter集合点技术
集合点简介 好比小学时候做广播体操,先让大家集合,等到时间统一开始做体操. 创建集合点 同步定时器 同时签到 注意:作用域 参数设置 用户数 为0 具体数值,不能大于 超时时间 为0,没有超时时间 具 ...
- django中admin一些方法
1.概述:内容发布,负责添加,修改,删除内容及公告访问2.配置admin应用在settings文件中INSTALLED_APPS添加:'django.contrib.admin', 默认是已经添加好的 ...
- sqlalchemy ————关联表
1.创建模型的时候做外键关联 class UI_ID(db.Model): __tablename__ = 'ui_id' id = db.Column(INTEGER(11), primary_ke ...
- POJ3734-Blocks【EGF】
正题 题目链接:http://poj.org/problem?id=3734 题目大意 用思种颜色给\(n\)个格子染色,要求前两种颜色出现偶数次,求方案. \(1\leq T\leq 100,1\l ...
- ASP.NET Core 学习笔记 第二篇 依赖注入
前言 ASP.NET Core 应用在启动过程中会依赖各种组件提供服务,而这些组件会以接口的形式标准化,这些组件这就是我们所说的服务,ASP.NET Core框架建立在一个底层的依赖注入框架之上,它使 ...