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.propertiesenvironment.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快速入门的更多相关文章

  1. pytest封神之路第零步 快速入门

    背景:本文是在系列第五篇发表后的补充篇章,第一篇介绍了tep,可能对不熟悉pytest的朋友不够友好,特意补充入门篇,帮大家快速了解如何动手写pytest.如果你是从这篇文章第一次阅读,那么请忽略以上 ...

  2. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  3. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  4. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  5. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  8. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  9. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. selenium-ide-2.3.0 组件在foxfire45.0无法安装的问题

    楼主在安装selenium-ide组件时,尝试了下面两种方式都无法安装: 1.在forfire浏览器进行拖拽安装,页面无任何跳转.拖拽后回车安装,也没任何效果 2.附件组件-从文件安装添加组件,添加了 ...

  2. centos7 下安装 mysql5.7

    由于CentOS7的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件. 下载命令: wget https://dev.mysql.com/get/mysql57-commu ...

  3. 3.17学习总结.listview用法总结

    今天复习了listview控件的用法. 1.activity_main.xml 中的代码,如下: <?xml version="1.0" encoding="utf ...

  4. Jwt的新手入门教程

    Jwt的新手入门教程 1.Jwt究竟是什么东东? ​ 先贴官网地址:JSON Web Tokens - jwt.io ​ ​ 再贴官方的定义: What is JSON Web Token? JSON ...

  5. mysql5.7当两个字段名类似,查询时会出错

    excepInfo: select id,describe from iwebshop_student_problem where id=256 order by id desc -- You hav ...

  6. 腾讯云启动jenkins

    首先配置后jdk环境 可参考:https://www.cnblogs.com/Uni-Hoang/p/12991686.html 下载jenkins的war包 在/usr/local/创建一个jenk ...

  7. android web外壳

    参考: 1.https://blog.csdn.net/m0_37201243/article/details/106862817 2.https://www.cnblogs.com/ifaswind ...

  8. P5782-[POI2001]和平委员会【2-SAT】

    正题 题目链接:https://www.luogu.com.cn/problem/P5782 题目大意 \(n\)对人,每对之间恰好有一个人出席.\(m\)对仇恨关系表示两个人不能同时出席. 求是否有 ...

  9. VueCLI3 创建vue项目

    关于旧版本 Vue CLI 的包名称由 vue-cli 改成了 @vue/cli. 如果你已经全局安装了旧版本的 vue-cli (1.x 或 2.x),你需要先通过 npm uninstall vu ...

  10. Kettle学习笔记(四)— 总结

    目录 Kettle学习笔记(一)- 环境部署及运行 Kettle学习笔记(二)- 基本操作 kettle学习笔记(三)- 定时任务的脚本执行 Kettle学习笔记(四)- 总结 Kettle中设置编码 ...