网上介绍allure报告的很多 ,但个人总感觉还是不够整体 ,不够详细 ,所看到的都是局部 。故本人花了些时间 ,将这个allure详细的整理了一遍 。整体且涉及每个细节 。
1.allure介绍
-
它是一个生成HTML测试报告的工具包
-
使用java开发,所以需要java环境
-
功能强大 , 生成的报告美观、直观
-
需要用pytest去搜集测试用例
-
使用浏览器打开,更易进行持续集成
2.allure相关安装和配置
2.1 软件安装列表
想使用allure,需要安装如下软件 :
安装软件 | 用途 | 链接地址 |
---|---|---|
java | allure使用java开发,所以必须要有运行环境 | https://www.oracle.com/cn/java/technologies/downloads/ |
allure | 生成测试报告 | Central Repository: io/qameta/allure/allure-commandline |
python | 编写自动化所需语言 | Welcome to Python.org |
pycharm | 开发工具 | Download PyCharm: Python IDE for Professional Developers by JetBrains |
pytest | python第三方包,使用它来搜集测试用例 | pip install pytest |
如果你先上面下载的麻烦 ,这里直接提供已下载好的安装包 :
2.2 安装四步曲
以上软件安装成功需要四步,分别为 :
-
下载 ,上面下已经地址,没有的自行下载即可。
-
安装 ,
-
allure无需安装,直接解压到一个指定的路径下即可
-
pytest只需要在cmd命令中运行
pip install pytest
即可 。 -
其它软件直接双击,一路下一步即可安装成功
-
-
配置环境变量,以上除了pytest不需要配置环境变量,其它的都需要配置 ,具体如何配置见2.3
-
验证 :除了pycharm无需要验证外,其它的都需要输入命令验证,打开cmd窗口输入以下命令进行验证:
# 1. java验证 :
java --version
# 2. python验证 :
python -V
# 3. allure验证
allure --version
# 4. pytest验证
pip show pytest
2.3 环境变量配置
(1)java环境配置
此电脑-鼠标右击-属性-高级系统设置-环境变量-添加java环境变量,具体如下:
注意 : 变量值里面的路径一定是你自己电脑上安装java的路径
将以上变量保存后,接下来编辑path环境变量 ,添加%JAVA_HOME%\bin ,一般可以将其移到最上面,点击确定。
(2)python环境配置
此电脑-鼠标右击-属性-高级系统设置-环境变量-点击path变量进行编辑(以存在,故是编辑),添加:
注意 :这里的python路径一定是你电脑上的路径
(3)allure环境配置
此电脑-鼠标右击-属性-高级系统设置-环境变量-添加allure环境变量,具体如下:
3.allure功能
3.1 allure整体流程
其实 ,在allure中主要分为以上的三部分,分别是用于集成在测试用例的装饰器函数 、 通过命令行命令收集测试用例的命令行工具、最后就是生成测试报告的展示 。
具体使用时,按照如下的流程实现即可 :
-
在编写好的测试用例中添加allure装饰器函数 ,
-
在运行入口处编写运行allure执行命令 ,它就会生成测试报告
-
通过浏览器查看生成的测试报告 。
3.2 allure装饰器函数
(1)基本说明
allure装饰器
# 作用:用于将测试用例的数据展示到测试报告中
# 导入:import allure
# 说明 :
1.需要将这些装饰器函数添加测试方法或测试类的开头。
2.同一个类或者一个方法可以添加多个装饰器函数 ,这样此用例就具有了个作用属性 。
(2)装饰器函数
函数 | 说明 | 备注 |
---|---|---|
@allure.epic() | 敏捷中的概念 | 项目名称 |
@allure.feature() | 模块名称 | 模块名 |
@allure.story() | 用户故事 | 子模块 |
@allure.title(用例的标题) | 用例标题 | 用例标题 |
@allure.severity() | 用例等级 | 包括:blocker,critical,normal,minor,trivial |
@allure.step() | 操作步骤 | 测试步骤 |
@allure.description() | 测试用例描述 | 可以写预期结果 |
@allure.testcase(url) | 测试用例链接 | 链接到测试用例系统 |
@allure.issue(url) | 测试bug链接 | 链接到bug系统 |
@allure.link(url) | 链接 | 一般可以链接到被测系统地址 |
@allure.attachment() | 附件 | 一般可以添加截图或者日志 |
以上的装饰器其实就是对应测试用例模板中的一些字段 ,具体如下 :
(3)如何在脚本中使用
(4)使用总结
将我们以上的装饰器整理后就是如下的结构 ,按照此结构可以整理出你的测试用例 。
如果你编写的测试用例装饰器函数都已经使用 ,那么它的层级就是如上的结构 ,当然这里还需要说明以下几点 :
-
每一个装饰器都是可选项,可加可不加 。比如你把feature去掉了,那么在报告中就不展示这一层级了 ,其它也是如此。
-
epic、feature、story、title主要用来显示层级 ,而到了title层里,就是显示具体的内容 ,内容包括severity,description,testcase ,issue,link,step等
-
除了step和attachment比较特殊以外,它们都是放在方法内使用 ,其它的都是标注在测试方法的开头或者类的开头 。
那么,在项目中该怎么组织我们的测试用例呢 ?一般就是按照项目结构一层一层的组织下来 ,比如 :
@allure.epic("vshop") #标记属于那个项目
@allure.feature("订单") # 标记属于那个模块
@allure.story("订单列表") #标记属于那个子模块
@allure.issue("http://localhost")
class TestOrder(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
cls.reg = RegLogic()
cls.mysql = BaseMysql()
cls.mobile = '13712345678'
cls.password1,cls.password2 = 123456,123456
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get("http://localhost")
# 判断账号是否存在
result = self.mysql.get_one(get_user.format(self.mobile))
logger.info("查找注册账号结果:{}".format(result))
if result:
self.mysql.exec_sql(del_user.format(self.mobile))
def tearDown(self) -> None:
self.mysql.exec_sql(del_user.format(self.mobile))
self.mysql.close()
self.driver.quit()
@allure.title("查询订单列表") #标记测试用例
@allure.description("显示该列表的所有数据") # 标记用例的描述
def test_order_list(self):
with allure.step("1.进入我的订单列表页"): #标记测试步骤
self.order(self.driver)
# 断言
self.assertEqual("安全退出",self.reg.get_reg_msg(self.driver))
@allure.title("查询订单详情") #标记测试用例
@allure.description("显示该订单的数据详情") # 标记用例的描述
def test_order_list(self):
with allure.step("1.进入我的订单列表页"):
self.order(self.driver)
with allure.step("2.点击最上面一个订单"):
self.order_detail(self.driver)
# 断言
self.assertEqual("安全退出",self.reg.get_reg_msg(self.driver))
3.3命令行参数
(1)命令行参数说明
所谓的命令行参数,就是通过cmd窗口运行的命令 ,如果你对allure的命令行参数不太清楚,可以打开cmd窗口输入:
allure --help
就可以看到如下的显示:
Usage: allure [options] [command] [command options]
Options:
--help
Print commandline help.
-q, --quiet
Switch on the quiet mode.
Default: false
-v, --verbose
Switch on the verbose mode.
Default: false
--version
Print commandline version.
Default: false
Commands:
generate Generate the report
Usage: generate [options] The directories with allure results
Options:
-c, --clean
Clean Allure report directory before generating a new one.
Default: false
--config
Allure commandline config path. If specified overrides values from
--profile and --configDirectory.
--configDirectory
Allure commandline configurations directory. By default uses
ALLURE_HOME directory.
--profile
Allure commandline configuration profile.
-o, --report-dir, --output
The directory to generate Allure report into.
Default: allure-report
serve Serve the report
Usage: serve [options] The directories with allure results
Options:
--config
Allure commandline config path. If specified overrides values from
--profile and --configDirectory.
--configDirectory
Allure commandline configurations directory. By default uses
ALLURE_HOME directory.
-h, --host
This host will be used to start web server for the report.
-p, --port
This port will be used to start web server for the report.
Default: 0
--profile
Allure commandline configuration profile.
open Open generated report
Usage: open [options] The report directory
Options:
-h, --host
This host will be used to start web server for the report.
-p, --port
This port will be used to start web server for the report.
Default: 0
plugin Generate the report
Usage: plugin [options]
Options:
--config
Allure commandline config path. If specified overrides values from
--profile and --configDirectory.
--configDirectory
Allure commandline configurations directory. By default uses
ALLURE_HOME directory.
--profile
Allure commandline configuration profile.
以上就是allure显示的命令行参数 ,你可以先看它的格式 ,具体如下:
allure格式: allure [options] [command] [command options]
其中除了allure是必须输入的,剩下括号内的都是可选项,可输可不输人
第一部分就是options,具体包括如下参数 :
Options:
--help
Print commandline help.
-q, --quiet
Switch on the quiet mode.
Default: false
-v, --verbose
Switch on the verbose mode.
Default: false
--version
Print commandline version.
Default: false
这个里面都是一些基本信息,相对来说用的少,这里我们不做介绍
第二部分是command,具体包括:
-
generate :Generate the report
-
serve : Serve the report
-
open :Open generated report
-
plugin:Generate the report
以上的命令虽然只有四个,但是每个命令下又都有若干个参数 ,一般加上那个命令,就的加上对应的一些参数 ,这里面我们主要介绍常用的generate命令 。
第三部分是command options,这里主要介绍generate选项 :
Usage: generate [options] The directories with allure results
Options:
-c, --clean
Clean Allure report directory before generating a new one.
Default: false
--config
Allure commandline config path. If specified overrides values from
--profile and --configDirectory.
--configDirectory
Allure commandline configurations directory. By default uses
ALLURE_HOME directory.
--profile
Allure commandline configuration profile.
-o, --report-dir, --output
The directory to generate Allure report into.
Default: allure-report
这里主要使用的两个选项就是 :
-
-c : 每次生成报告前清除之前生成的报告文件 ,不加此选项则默认为不清除 。
-
-o : 生成报告的路径 ,也就是你要将测试报告输出到哪里 。
所以 ,我们该如何使用此命令行参数呢 ?可以在cmd窗口运行如下命令:
allure generate JSON路径 -o 生成测试报告路径 -c
这里有一个JSON路径,这个需要通过pytest生成一堆json文件,存放这堆JSON文件的这个路径就是JSON路径。
不过这个命令一般集成在python中去使用的,具体写法参考项目文件。
3.4 生成测试报告
生成的报告就是如下的情况 :
(1)整体说明:
每个tab页都是啥意思呢 ?接下来我们来看下面的说明 :
(2)总览:
所以,此页面主要是展示和链接其它页面功能 ,相当与其它页面的汇总 。
(3)类别
所谓类别,就是按照不同用例的运行结果划分的一个分类 ,具体包括 :
-
报错的用例
-
运行失败的用例
-
运行成功的用例
-
跳过的用例
-
未知的用例 。
(4)测试套
这里的测试套,并不是测试套件 ,它只是按照你项目测试用例的层级一层一层的组织展示的。比如我的代码层级为:
cases:
test_login.py
test_buy_flow.py
test_reg.py
# test_login.py中的代码为:
class TestLogin():
pass
# test_buy_flow.py中的代码为:
class TestBuyFlow():
pass
# test_reg.py中的代码为
class TestReg():
pass
以上的用例组织结构就变为下图的展示方式了 。
(5)图表
这个就是按照不同的维度进行了数据统计,包括:用例状态、优先级、耗时等。
(6)时间刻度
主要统计各个用例的运行时间 ,比如想知道那些用例运行花费的时间长,看这个数据就可以知道 。
(7)功能
在最开始我们介绍到了allure的装饰器函数 ,分别给每个用例都做了标记 ,那么所标记的结果就是从功能里查看 ,具体如下:
(8)包
此功能忽略中间层级 ,只展示测试方法,即测试用例 ,对于看测试具体结果来说更加直观。
(9)总结
通过上我们可以看到 ,整体来说还是以测试报告的展示为主 ,只不过他的展示维度不同。既然展示维度不同 ,那么查看时更多的结合实际场景来查看,具体可参考如下方式 :
-
(1)要看总体情况 ,先看总览,可以了解到编写了多少测试用例 ,有多少成功的、多少失败的。
-
(2)运行结果若出现用例运行失败的,报错的,可以查看类别 ,这里按照类别分类 ,查看时更加直观 ,帮助你更快的分析和定位问题。
-
(3)想查看哪些用例运行速度慢 ,可以看时间刻度,它可以帮你找出运行慢的用例 ,从而可以进行针对性的性能优化 。
-
(4)快速定位是那个用例运行失败的(要定位到测试方法的) ,可以查看包 ,这个能很直观的看到编写了哪些测试方法,那个成功、那个失败 ,结果一目了然 。
-
(5)若想核对你编写的测试用例情况(和测试用例文件核对) ,可以查看功能,因为它是按照项目层级展示,看起来更加直观 。
-
(6)若想从代码角度来看编写的测试用例情况,可以查看测试套 ,因为它就是按照代码层级所展示的 。
4.项目实践
在之前介绍的测试用例登录脚本中,我们并没有集成测试报告,接下来重写以下两个文件 ,包括 :
(1)登录测试用例 :test_login.py
import unittest
from api.login_demo_api import login
from utils.basic_utils import read_yaml, get_file_path
import allure
@allure.epic("vshop")
@allure.story("登录")
class TestLogin(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
yaml_path = get_file_path('login.yaml') # 获取login.yaml的全路径
result = read_yaml(yaml_path) # 转化为python对象
cls.login_data = result.get('login') # 获取字典中login的值
# case1 : 测试登录成功
@allure.title("输入正确的用户名和正确的密码进行登录")
@allure.description("预期结果:登录成功")
def test_login_success(self):
res = self.login_data[0] # 获取列表中第一个值
login_result = login(res.get('username'),res.get("password"))
self.assertEqual(res.get("code"), login_result.get('errno'))
self.assertEqual(res.get("message"), login_result.get('errmsg'))
# case2 : 测试密码错误
@allure.title("输入正确的用户名和错误的密码进行登录")
@allure.description("预期结果:用户帐号或密码不正确")
def test_password_is_wrong(self):
res = self.login_data[1] # 获取列表中第二个值
login_result = login(res.get('username'),res.get("password"))
self.assertEqual(res.get("code"), login_result.get('errno'))
self.assertEqual(res.get("message"), login_result.get('errmsg',login_result))
# case3 : 测试密码为空
@allure.title("输入正确的用户名和空的密码进行登录")
@allure.description("预期结果:参数不对")
def test_password_is_null(self):
res = self.login_data[2] # 获取列表中第三个值
login_result = login(res.get('username'),res.get("password"))
self.assertEqual(res.get("code"), login_result.get('errno'))
self.assertEqual(res.get("message"), login_result.get('errmsg',login_result))
(2) 运行入口脚本:runner.py
import pytest
import os
if __name__ == '__main__':
# 1. 使用pytest生成测试报告时需要传递一个列表
json_dir_path = 'result'
args_list = ['-s', '-v', 'cases', '--alluredir', json_dir_path]
pytest.main(args_list)
# 2. 使用allure命令生成测试报告 :allure generate 数据路径文件 -o html路径文件 -c
html_dir_path = 'report'
cmd = 'allure generate {} -o {} -c'.format(json_dir_path, html_dir_path)
os.system(cmd)
(3) 生成测试结果 :report文件夹,打开此文件夹,通过浏览器打开index.html文件 ,就会展示具体生成的测试报告 。