介绍了Allure的安装,环境配置;Allure命令,配置pytest.ini文件,利用allure工具生成html报告;最后,讲了Allure的应用实例。
Allure
快速入门
安装
- 安装allure的python插件
pip install allure-pytest -i https://mirrors.aliyun.com/pypi/simple/
或者写入requirements.txt
allure-pytest==2.8.18
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
- allure工具的安装 allure的python插件(而且生成的不是html格式的文件)依赖allure工具,所以需要先安装allure工具:
allure需要有jdk环境,所以需要先安装jdk。
sudo apt-get update
sudo apt-get install openjdk-8-jdk
sudo update-alternatives --set java /usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java # 设置环境变量
java -version # 显示版本信息表示安装成功
安装Allure
方法一:
sudo apt-get install allure
# 查看安装路径
whereis allure
# allure: /usr/share/allure
# 配置软连接或者环境变量
sudo ln -s /usr/share/allure /usr/bin/allure
上述安装方式使用allure – version时候报:allure: command can not found ,需要设置allure的bin放到PATH里边。 若whereis allure找不到allure,换下边方式安装。
方法二:
curl -O https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/2.13.8/allure-commandline-2.13.8.tgz # 下载allure,文件会下载到当前目录;curl命令是linux下的下载工具,windows下可以用wget
sudo tar -zxvf allure-commandline-2.13.8.tgz -C /opt/ # -C指定解压目录,这里解压到/opt/allure-2.13.8;一般来说,/opt目录下的文件都是安装软件的.
sudo ln -s /opt/allure-2.13.8/bin/allure /usr/bin/allure
allure --version # 查看版本信息以及是否安装成功
配置环境(软连接好像不起作用):
vi /etc/profile
# 在PATH后追加以下内容,保存
export PATH=$PATH:/home/allure-2.13.8/bin
# 使环境变量生效
source /etc/profile
最后,配置好环境变量后记得重启下ide(很重要)!!! 其他下载地址: https://repo.maven.apache.org/maven2/io/qameta/allure/allure-commandline/
https://github.com/allure-framework/allure2/releases
使用
首先要配置pytest.ini文件,告诉pytest使用allure插件;添加allure代码;运行;最后,利用allure工具生成html报告。
addopts = -s --alluredir ./report/result
添加allure代码,在testcase文件夹下面创建t_allure文件夹,新建test_allure.py文件,添加如下代码:
import pytest
def test_1():
print("test 1")
def test_2():
print("test 2")
def test_3():
print("test 3")
if __name__ == '__main__':
pytest.main(["allure_demo.py"])
运行代码,可以看到在同级report文件夹下生成了result文件夹,里边有allure相关的文件。
最后,点击terminal,在终端中输入allure generate ./report/result -o ./report/html –clean,生成html报告。
# 进入文件夹
cd testcase/t_allure/
ls
# 生成html报告
allure generate ./report/result -o ./report/html --clean
# --clean表示清除之前的报告 -o表示输出的文件夹
# 打开html报告,可以找到index.html文件,也可以使用allure open命令打开
allure open ./report/html
Allure 命令
Title
可以自定义用例标题,标题默认为函数名。@allure.title(“用例标题”)
Description
可以添加测试的详细说明,支持Markdown语法。@allure.description(“用例详细描述”)
Feature
功能,可以理解为模块。@allure.feature(“功能模块”)
Story
Story,可以理解为子模块。@allure.story(“子模块”)
Severity
定义用例的严重程度,分为blocker、critical、normal、minor、trivial。@allure.severity(allure.severity_level.CRITICAL)
默认为normal。
只运行指定级别的用例:
pytest -s -q --alluredir=./report/result --allure-severities=critical # -s表示打印日志 -q表示简化输出;--allure-severities=critical表示只运行严重级别为critical的用例;
Allure.dynamic
可以动态添加测试步骤,支持Markdown语法,可以使用函数体内的数据动态生成.
@allure.dynamic.description(“测试步骤”)
@pytest.mark.parametrize("case",["case1","case2"])
def test_4(self,case):
print(case)
allure.dynamic.title(case)
Allure应用
Allure测试用例
打开data文件集下面的testcase.xlsx文件,查看测试数据的具体信息,根据这个信息,对allure报告的内容进行如下设置:
sheet名称 feature 一级标签
模块 story 二级标签
用例ID+接口名称 title
请求URL 请求类型 期望结果 实际结果描述
import allure
#allure
#sheet名称 feature 一级标签
allure.dynamic.feature(sheet_name)
#模块 story 二级标签
allure.dynamic.story(case_model)
#用例ID+接口名称 title
allure.dynamic.title(case_id+case_name)
#请求URL 请求类型 期望结果 实际结果描述
desc = "<font color='red'>请求URL: </font> {}<Br/>" \
"<font color='red'>请求类型: </font>{}<Br/>" \
"<font color='red'>期望结果: </font>{}<Br/>" \
"<font color='red'>实际结果: </font>{}".format(url,method,expect_result,res)
allure.dynamic.description(desc)
设置完成之后,每次都需要allure generate ./report/result -o ./report/html –clean来手动生成html报告,可以使用Subprocess来实现自动化生成报告。
Subprocess是Python中的一个模块,用于创建新进程,连接到它们的输入/输出/错误管道,并获取它们的返回代码。
方法:
- Subprocess.call():父进程等待子进程,返回退出信息(returncode,相当于linux exit code);0表示正常退出,非0表示异常退出。
- shell=True:表示使用shell执行命令,否则默认使用cmd执行命令;支持命令以字符串的形式传入,不需要再使用列表的形式传入。
import subprocess
res = subprocess.call(["ls","-l"])
print(res) # 0代表正常退出,非0代表异常退出
subprocess.call("ls -l",shell=True) # shell=True,支持命令以字符串的形式传入
输出结果:
总用量 4
-rw-rw-r-- 1 hugo hugo 0 1月 30 10:00 __init__.py
-rw-rw-r-- 1 hugo hugo 138 1月 30 10:06 subprocess_demo.py
0
总用量 4
-rw-rw-r-- 1 hugo hugo 0 1月 30 10:00 __init__.py
-rw-rw-r-- 1 hugo hugo 138 1月 30 10:06 subprocess_demo.py
总用量 4
-rw-rw-r-- 1 hugo hugo 0 1月 30 10:00 __init__.py
-rw-rw-r-- 1 hugo hugo 138 1月 30 10:06 subprocess_demo.py
0
总用量 4
-rw-rw-r-- 1 hugo hugo 0 1月 30 10:00 __init__.py
-rw-rw-r-- 1 hugo hugo 138 1月 30 10:06 subprocess_demo.py
进程已结束,退出代码0
Allure项目运行
在common文件夹下面的Base.py文件中,添加如下代码:(运用我们上一节学习的subprocess模块)
def allure_report(report_path,report_html):
"""
生成allure 报告
:param report_path:
:param report_html:
:return:
"""
#执行命令 allure generate
allure_cmd ="allure generate %s -o %s --clean"%(report_path,report_html)
#subprocess.call
log.info("报告地址")
try:
subprocess.call(allure_cmd,shell=True)
except:
log.error("执行用例失败,请检查一下测试环境相关配置")
raise