Allure 是一个开源的测试工具,可以生成自动化测试报告,它支持的测试框架非常广泛,其中就包括 pytest。
生成支持 Allure 的测试结果数据
插件 allure-pytest,可以生成支持 Allure 的测试结果数据。
安装:
pip install allure-pytest
使用:
在 cases/test_a.py 中编写测试用例:
def test_case():
assert True, "测试用例通过"
def test_case2():
assert False, "测试用例失败"
执行 python run.py --alluredir=./allure-results --clean-alluredir ,运行测试用例,allure-pytest 插件会生成测试结果数据。
-
参数
--alluredir=./allure-results: 会指定测试结果数据的存放目录为根目录 allure-result 目录(如果不存在,自动创建) 。 -
参数
--clean-alluredir: 删除历史测试结果数据。
查看 项目根目录/allure-results 存放的测试结果数据
- 现在可以看到
allure-result/目录下有一些 JOSN 文件,这些文件存放着测试用例的结果数据。不过现在的数据不直观,需要使用 Allure 生成直观的测试报告。或者自己解析生成更符合需求的测试报告文件。
上述参数可以在 pytest.toml 中声明,再执行 python run.py 会有一样的效果。
[pytest]
addopts = [
"--alluredir", "allure-results",
"--clean-alluredir"
]
安装 JDK
Allure 需要 JAVA 环境才可以使用,先安装一下 JDK。
Windows 平台安装:
点击JDK下载地址,下载最新版本(.zip),说是最兼容的版本是 JDK11,如果最新版本有任何问题,可以换成 JDK11。
下载后,解压,再移动 jdk-XX.X.X 目录到指定的目录下,记住这个目录。
JDK 需要配置环境变量,步骤如下:
配置JDK系统变量
-
右键此电脑-属性-高级系统设置-环境变量
-
系统变量-点击新建
-
变量名:JAVA_HOME
-
变量值:JDK 放置目录(比如:C:\tools\Java\jdk-24.0.1)
配置JDK的环境环境
-
环境变量中找到Path,选中后点击编辑
-
新建环境变量:%JAVA_HOME%\bin;
-
一路确定
验证 JAVA 环境变量
-
win + r,输入 cmd
-
命令行中执行:java -version
-
输出类似
java version "24.0.1" 2025-04-15,说明配置成功
Ubunto 平台安装:
输入 java -version,如果没有 JAVA 环境,会输出类似信息:
Command 'java' not found, but can be installed with:
sudo apt install openjdk-17-jre-headless # version 17.0.17+10-1~24.04, or
sudo apt install openjdk-21-jre-headless # version 21.0.9+10-1~24.04
sudo apt install default-jre # version 2:1.17-75
sudo apt install openjdk-19-jre-headless # version 19.0.2+7-4
sudo apt install openjdk-20-jre-headless # version 20.0.2+9-1
sudo apt install openjdk-22-jre-headless # version 22~22ea-1
sudo apt install openjdk-11-jre-headless # version 11.0.29+7-1ubuntu1~24.04
sudo apt install openjdk-25-jre-headless # version 25.0.1+8-1~24.04
sudo apt install openjdk-8-jre-headless # version 8u472-ga-1~24.04
输出信息中给出了仓库中可供安装的 JDK 各版本信息,按需选择即可。
比如安装 openjdk-21-jre-headless(headless 版本移除了 Java 的图形界面相关组件(如 AWT/Swing),体积更小,完全适配终端环境下运行 Allure(Allure 生成报告是命令行 / HTML 形式,无需图形界面)):
sudo apt install openjdk-21-jre-headless
输入密码后,随即安装,安装过程中如果需要确认,输入 y 即可。
最后输入 java -version,确定是否安装成功。
部署 Allure
访问 Allure 下载最新包(zip或者tar.gz)。
Windows 平台安装:
将压缩包解压到固定路径,记住这个目录。
配置 ALLURE 系统变量
-
右键此电脑-属性-高级系统设置-环境变量
-
系统变量-点击新建
-
变量名:ALLURE_HOME
-
变量值:ALLURE 放置目录(比如:C:\tools\allure-2.36.0)
配置 ALLURE 的环境环境
-
环境变量中找到 Path,选中后点击编辑
-
新建环境变量:%ALLURE_HOME%\bin
-
一路确定
验证 ALLURE 环境变量
-
win + r,输入 cmd
-
命令行中执行:
allure --version -
输出类似
2.24.1,说明配置成功
Ubunto 平台安装:
# 将压缩包解压到用户目录 ~/ 下
unzip allure-2.24.1.zip -d ~/
# 配置环境变量(永久生效)
echo 'export ALLURE_HOME="$HOME/allure-2.24.1"' >> ~/.bashrc
echo 'export PATH="$ALLURE_HOME/bin:$PATH"' >> ~/.bashrc
# 刷新环境变量
source ~/.bashrc
# 给 allure 文件添加执行权限(关键!)
chmod +x ~/allure-2.24.1/bin/allure
# 顺带确保 bin 目录有执行权限(进入目录需要)
chmod 755 ~/allure-2.24.1/bin/
最后验证:
allure --version
# 输出 类似2.24.1
使用 Allure 生成测试报告并查看
生成测试报告:
执行 allure generate allure-result --clean ,allure 包会根据测试结果数据生成测试报告,默认生成在当前目录下的 allure-report 目录
-
generate:是 Allure CLI 的一个子命令,表示生成报告。 -
allure-result:是输入源,即插件 allure-pytest 原始测试结果数据的目录。可以指定多个结果目录。 -
--clean:清空输出目录(allure-report)中的所有旧文件,再生成新报告。 -
补充:参数-o可以指定生成报告的输出目录。
执行 allure open allure-report,针对已生成的静态报告目录启动轻量本地服务,通过浏览器访问查看测试报告。
Starting web server...
Can not open browser because this capability is not supported on your platform. You can use the link below to open the report manually.
Server started at <http://127.0.0.1:40497>. Press <Ctrl+C> to exit
生成的 allure-result 目录可以压缩打包后,分发给任何有 Allure 环境的任何人或任何机器,进行查看。或者自己本地运行后,开放 40497 端口,让目标人员通过浏览器访问查看。
启动文件中编辑自动生成测试报告:
import logging
import sys
import argparse
import subprocess
from common.database import DatabaseConnectionPoolFactory
import pytest
from pytest import ExitCode
# 自定义日志格式
LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(module)s:%(lineno)d - %(message)s'
logging.basicConfig(level=logging.INFO, format=LOG_FORMAT)
logger = logging.getLogger(__name__)
# 运行测试
def run_tests(parser: argparse.ArgumentParser) -> int:
"""运行测试"""
# 解析自定义参数和 pytest 参数
customize_args, pytest_args = parser.parse_known_args()
# 如果用户请求帮助,则打印帮助信息并退出
if customize_args.help:
parser.print_help()
print("\n=== pytest 原生参数 help 信息 ===")
pytest.main(["-h"])
return 0
# 开始运行测试
try:
logger.info(f"开始运行测试,,pytest参数: {pytest_args}")
exit_code = pytest.main(pytest_args)
exit_code_value = exit_code.value if isinstance(exit_code, ExitCode) else exit_code
exit_messages = {
0: "✅ 全部测试用例通过",
1: "⚠️ 部分测试用例未通过",
2: "❌ 测试过程中有中断或其他非正常终止",
3: "❌ 内部错误",
4: "❌ 命令行参数错误",
5: "❌ 没有收集到任何测试用例"
}
logger.info(exit_messages.get(exit_code_value, f"❓ 未知的退出码: {exit_code_value}"))
return exit_code_value
except Exception:
logger.exception("运行测试时发生致命错误:")
return 1
# 构建参数解析器,传递 pytest 参数,后续根据需求创建自定义参数
def parse_arguments() -> argparse.ArgumentParser:
parser = argparse.ArgumentParser(
description="pytest 启动脚本(支持自定义参数 + pytest 参数)",
add_help=False # 隐藏默认帮助信息,避免与 pytest 的 -h 冲突
)
parser.add_argument(
"-h", "--help",
action="store_true",
help="显示帮助信息(包含自定义参数和pytest原生参数)"
)
return parser
def generate_allure_report():
try:
# Windows 平台改为 subprocess.run(["allure.bat", "generate", "allure-results", "--clean"], check=True)
subprocess.run(["allure", "generate", "allure-results", "--clean"], check=True)
logger.info("已生成Allure报告")
except subprocess.CalledProcessError as e:
logger.error(f"生成Allure报告失败: {e}")
# 主函数
def main():
mysql_connection = DatabaseConnectionPoolFactory.get_strategy(
database_type="mysql",
database_configuration_name="mysql")
logger.info("已创建MySQL数据库连接池")
redis_connection = DatabaseConnectionPoolFactory.get_strategy(
database_type="redis",
database_configuration_name="redis")
logger.info("已创建Redis数据库连接池")
parser = parse_arguments()
exit_code = run_tests(parser)
mysql_connection.close_pool()
logger.info("已关闭MySQL数据库连接池")
redis_connection.close_pool()
logger.info("已关闭Redis数据库连接池")
allure_report_path = generate_allure_report()
logger.info(f"测试报告已压缩至 {allure_report_path}")
sys.exit(exit_code)
if __name__ == "__main__":
main()
THEEND
© 转载需要保留原始链接,未经明确许可,禁止商业使用。CC BY-NC-ND 4.0