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. 在开发中使用GMap.Net 控件的心得一

    首先必须先加载GMap.Net这个控件,先通过"添加引用"来加载相应的.dll文件,如果在工具箱中找不到GMapControl这个控件,也别心急. 点击"工具" ...

  2. Maven项目之间关系介绍

    Maven项目之间的关系 依赖关系 单纯的项目A中需要项目B中的资源,将项目B打成Jar包被A依赖,此时项目A直接调用项目B中资源即可. 项目A和项目B此时形成最基本的依赖关系. 继承关系 需要场景: ...

  3. JavaScrip中 Array.reduce()

    数组的方法 reduce() reduce方法在数组的每一项元素上都会执行回调函数. 语法:array.reduce( callBack [ , init]  ) // 语法arrary.reduce ...

  4. 3.8学习总结——Android保存信息

    为了保存软件的设置参数,Android平台为我们提供了一个SharedPreferences接口,它是一个轻量级的存储类,特别适合用于保存软件配置参数.使用SharedPreferences保存数据, ...

  5. 如何写出安全又可靠的PHP脚本

    前言 咔咔目前所做的项目是一个saas系统,在开发新功能之后,需要为用户角色添加相应的权限,这时整个系统的所有用户都需要添加相应的权限. 因为以前系统的缺陷现在只能用脚本来处理这些工作,所以接下来咔咔 ...

  6. 记一次PHP的Invalid binding type问题

    首先说明下环境问题,新旧服务器的迁移.代码在老服务器运行没有任何问题.环境都是PHP7.3,结果新的服务器上流量导过来以后,就报出了如下问题: FastCGI sent in stderr: &quo ...

  7. php后台解决跨域

    protected function _initalize() { header("content-type:text/html;charset=utf-8"); header(& ...

  8. Jmeter系列(21)- Jmeter录制手机App请求

    前置知识点 Jmeter HTTP代理服务器每次点击启动录制,会往Jmeter的bin目录下生成相关证书,证书有效期是7天 录制前需要先看下证书过期没有,过期了,删除bin目录下的证书,即Apache ...

  9. Navicat15 最新版本破解版操作步骤

    1.关于Navicat 15的安装版本以及破解机下载 分享的网盘连接:https://pan.baidu.com/s/12DaG0TmS9hXlYmJ_T5ytz2rA 提取码:7cg6 2.安装Na ...

  10. linux,apache,php,mysql常用的查看版本信息的方法

    1. 查看linux的内核版本,系统信息,常用的有三种办法:   uname -a:   more /etc/issue;    cat /proc/version; 2. 查看apache的版本信息 ...