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. java版gRPC实战之六:客户端动态获取服务端地址

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  2. 截断误差VS舍入误差

     截断误差:是指计算某个算式时没有精确的计算结果,如积分计算,无穷级数计算等,使用极限的形式表达的,显然我们只能截取有限项进行计算,此时必定会有误差存在,这就是截断误差. 舍入误差:是指由于计算机表示 ...

  3. Linux没有/var/log/messages日志文件

    1.新安装的CentOS8没有/var/log/messages日志文件: 安装rsyslog: dnf  install   -y  rsyslog 或 yum  install  -y  rsys ...

  4. 使用ELK监控Nginx日志实现接口流量访问统计

    前段时间自己看书学习了一下elasticSearch,后面自己实践了使用elasticSearch.logStash.kibana搭建一个网站接口流量访问统计的监控看板.在这里做一些记录学习. 先看一 ...

  5. mapper-spring-boot-starter 主要作用是

    今天是第一次接触到 这个场景启动器内心中真是一片的茫然,学习了这么长时间我居然还不知道有这个的存在今天好好查一查资料 参考资料(https://blog.csdn.net/crq1205/articl ...

  6. 数据库的规范和SQL优化技巧总结

    现总结工作与学习中关于数据库的规范设计与优化技巧 1.规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需 ...

  7. Python3入门系列之-----json与字典转换

    json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写 JSON 函数 使用 JSON 函数需要导入 json 库:import js ...

  8. Winform配置文件读写操作

    前言 在项目当中为了增加软件的灵活性及可配置性,配置文件在程序当中起着不可替代的作用.下面介绍一下最近用的比较多的方式. config文件的操作 数据库连接字符串 1.获取连接字符串 public s ...

  9. 小米路由器4a千兆版刷openwrt

    现在网上搜小米路由器4a千兆版刷机的都是刷的padavan的,很少能找到openwrt的刷机教程. 首先刷openwrt系统的时候要先刷入引导程序breed,网上有一篇帖子写的很详细(https:// ...

  10. JDK源码阅读:String类阅读笔记

    String public final class String implements java.io.Serializable, Comparable<String>, CharSequ ...