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. c# 扩展方法奇思妙用基础篇九:Expression 扩展

    http://www.cnblogs.com/ldp615/archive/2011/09/15/expression-extension-methods.html .net 中创建 Expressi ...

  2. TypeError: exchange_declare() got an unexpected keyword argument 'type'

    在设置消息广播时:以下代码会报错channel.exchange_declare(exchange='direct_logs', type='direct')TypeError: exchange_d ...

  3. 数学相关函数在PHP中的应用简介

    对于数学计算来说,最常见的其实还是我们使用各种操作符的操作,比如说 +加.-减 之类的.当然,PHP 中也为我们提供了一些可以方便地进行其他数学运算的操作函数.这些函数都属于 Math 扩展.这个扩展 ...

  4. PHP中的文件系统函数(三)

    总算来到我们最关心的部分了,也就是 f 相关函数的操作.基本上大部分的文件操作都是以今天学习的这些内容为基础的,话不多说,我们就一个一个的来学习学习吧. 文件读取 文件的读取其实非常简单,fopen( ...

  5. 记一次 .NET 某上市工业智造 CPU+内存+挂死 三高分析

    一:背景 1. 讲故事 上个月有位朋友加wx告知他的程序有挂死现象,询问如何进一步分析,截图如下: 看这位朋友还是有一定的分析基础,可能玩的少,缺乏一定的分析经验,当我简单分析之后,我发现这个dump ...

  6. Django边学边记--状态保持(cookie和session)

    Cookie 概念: Cookie,也叫Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密),好比会员卡或餐票. 特点: Cookie是由服务 ...

  7. idea使用gitee的小坑

    1. 账号配置 账号配置登陆时提示 *** is not a valid login name: Email support only. 翻译:只能支持邮箱登录 解决方法:在gitee网站上查看自己配 ...

  8. 实时渲染基础(4)纹理(Texture)

    目录 纹理映射(Texture Mapping) 球形贴图(Spherical Map) 立方体贴图(Cube Map) 纹理走样问题 Mipmap 各向异性过滤(Ripmap) 纹理应用技术(Tex ...

  9. 跳表--怎么让一个有序链表能够进行"二分"查找?

    对于一个有序数组,如果要查找其中的一个数,我们可以使用二分查找(Binary Search)算法,将它的时间复杂度降低为O(logn).那查找一个有序链表,有没有办法将其时间复杂度也降低为O(logn ...

  10. ☠全套Java教程_Java基础入门教程,零基础小白自学Java必备教程👾#010 #第十单元 Scanner类、Random类 #

    一.本单元知识点概述 (Ⅰ)知识点概述 二.本单元教学目标 (Ⅰ)重点知识目标 1.API的使用2.Scanner类的使用步骤3.Random类的使用 (Ⅱ)能力目标 1.掌握API的使用步骤2.使用 ...