使用GitLink个人建站服务部署Allure在线测试报告
更多技术文章,访问软件测试社区
文章目录
- 🚀前言
- 🔑开通GitLink个人建站服务
- 1. 前提条件
- 2. 登录GitLink平台(https://www.gitlink.org.cn/login)
- 3. 进入设置>个人建站>我的站点
- 4. 新建站点
- 5. 去仓部进行部署
- 6. 安装Bot"个人建站自动部署"
- 💻推送Allure HTML报告到个人建站服务仓库
- ✅查看测试报告
🚀前言
在实际工作中,我们常常需要将测试报告发送给相关方。然而,使用Allure报告存在一定的操作门槛。例如,用户需要先安装Allure程序,再通过特定命令才能查看报告。对于非技术人员来说,这一过程不够友好,不仅增加了使用成本,还降低了工作效率。
为了解决这一问题,我们可以通过GitLink个人建站服务来托管Allure报告。借助这种方式,相关方只需点击一个链接,即可直接查看报告,无需安装任何工具或执行复杂命令。这不仅极大提升了报告的易用性和访问效率,还简化了操作流程,降低了使用门槛,使报告分享变得更加便捷。
🔑开通GitLink个人建站服务
1. 前提条件
- 拥有一个GitLink平台的账号,可通过如下链接进行注册:https://www.gitlink.org.cn/register
- GitLink平台账号已完成实名认证。
2. 登录GitLink平台(https://www.gitlink.org.cn/login)
3. 进入设置>个人建站>我的站点
如果用户未完成实名认证审核,将提示“您尚未通过实名认证,无法使用此服务,如需使用,请先进行实名认证。”, 可点击“前往验证”完成实名认证。
4. 新建站点
实名认证审核通过后,按照要求新建站点即可。
站点新建成功后, 会生成一个对应的仓库,仓库名格式参考如下:{平台登录的login}.gitlink.net。同时部署的服务的网址格式如下:http://{平台登录的login}.gitlink.net/
5. 去仓部进行部署
点击“去仓库”,可以查看到刚刚构建的个人建站服务仓库。
正常流程下:将allure html报告的文件推送到仓库,在"服务tab>个人建站服务”,点击部署即可成功部署Allure测试报告在线服务。
这里我们将使用Bot自动部署服务。
6. 安装Bot"个人建站自动部署"
Bot地址:https://www.gitlink.org.cn/softbot/10039
点击“安装此Bot”将Bot安装到个人建站服务的仓库。
安装完成后,在个人建站服务仓库可以查看到已安装的Bot。 Bot检测到仓库有代码推送会自动部署个人建站服务,无需手动点击部署。
💻推送Allure HTML报告到个人建站服务仓库
我们需要把Allure生成的HTML报告全部推送到个人建站服务仓库。具体参考如下:
推送的方式各异,我这里是自动化测试运行结束后,调用了方法push_allure_report
将Allure生成的HTML报告全部推送到个人建站服务仓库。
大家可以参考我的写法。
push_allure_report.py
文件具体内容:
# 第三方模块
from loguru import logger
# 标准库导入
import subprocess
import shutil
import os"""
subprocess.run: 用于执行系统命令。check=True 表示如果命令执行失败会抛出异常。-C 参数用于指定Git命令的工作目录。"""
def copy_all_files(src_dir, dst_dir):"""将源目录中的所有文件和子目录复制到目标目录中。参数:src_dir (str): 源目录路径。dst_dir (str): 目标目录路径。"""try:# 确保目标目录存在os.makedirs(dst_dir, exist_ok=True)# 遍历源目录中的所有文件和子目录for item in os.listdir(src_dir):src_item = os.path.join(src_dir, item) # 源文件/目录的完整路径dst_item = os.path.join(dst_dir, item) # 目标文件/目录的完整路径if os.path.isfile(src_item):# 如果是文件,直接复制shutil.copy2(src_item, dst_item)print(f"复制文件: {src_item} -> {dst_item}")elif os.path.isdir(src_item):# 如果是目录,递归复制shutil.copytree(src_item, dst_item, dirs_exist_ok=True)print(f"复制目录: {src_item} -> {dst_item}")except Exception as e:print(f"复制失败: {e}")def push_allure_report(allure_report_dir: str, remote_url: str, username: str, password: str, branch: str = "master",message: str = "update report"):"""将本地生成的 Allure HTML 报告推送到指定的 GitLink 仓库。:param allure_report_dir : 本地生成的 Allure HTML 报告目录路径。:param remote_url: 远程仓库的HTTP地址, 需要带有.git, 例如:https://gitlink.org.cn/floraachy/floraachy.gitlink.net.git。:param branch: 远程仓库的分支。:param username: 登录远程仓库的用户名。:param password: 登录远程仓库的密码。:param message: 提交更改的说明信息。"""repo_name = remote_url[:-4].split("/")[-1]repo_path = os.path.join(os.path.dirname(allure_report_dir), repo_name)print(f"本地仓库地址:{repo_path}")logger.info(f"本地仓库地址:{repo_path}")try:# 检查目录是否存在if os.path.exists(repo_path):print(f"目录已存在,正在删除: {repo_path}")logger.info(f"目录已存在,正在删除: {repo_path}")shutil.rmtree(repo_path) # 删除目录及其内容# 重新创建目录os.makedirs(repo_path)logger.info(f"目录已重新创建: {repo_path}")print(f"目录已重新创建: {repo_path}")except Exception as e:logger.error(f"操作失败: {e}")print(f"操作失败: {e}")try:# -------------初始化本地仓库并提交代码 -----------------subprocess.run(["git", "-C", repo_path, "init"], check=True)print("初始化本地仓库成功")logger.info("初始化本地仓库成功")auth_remote_url = f"https://{username}:{password}@{remote_url.split("//")[-1]}"print(f"添加远程仓库: {auth_remote_url}")logger.info(f"添加远程仓库: {auth_remote_url}")subprocess.run(["git", "-C", repo_path, "remote", "add", "origin", auth_remote_url], check=True)print("复制 Allure HTML报告所有文件到本地仓库")logger.info("复制 Allure HTML报告所有文件到本地仓库")copy_all_files(src_dir=allure_report_dir, dst_dir=repo_path)print("将更改添加到暂存区")logger.info("将更改添加到暂存区")subprocess.run(["git", "-C", repo_path, "add", "."], check=True)print("提交更改")logger.info("提交更改")subprocess.run(["git", "-C", repo_path, "commit", "-m", message], check=True)print("强制推送代码")logger.info("强制推送代码")subprocess.run(["git", "-C", repo_path, "push", "--force", "origin", branch], check=True)print("Allure 报告推送成功!")logger.success("Allure 报告推送成功!")except subprocess.CalledProcessError as e:print(f"Git 操作失败: {e}")logger.error(f"Git 操作失败: {e}")
然后在run.py
中调用方法push_allure_report
,按照要求传入指定参数,例如:
push_allure_report(allure_report_dir="\report\allure_html", remote_url="http:xxxxxxx.git",username="xxxxx", password="xxxxx"])
✅查看测试报告
当Allure HTML最新报告推送到个人建站仓库后,会自动触发Bot"个人建站自动部署"自动部署最新代码。部署完成后访问网站地址即可查看最新报告。
相关文章:

使用GitLink个人建站服务部署Allure在线测试报告
更多技术文章,访问软件测试社区 文章目录 🚀前言🔑开通GitLink个人建站服务1. 前提条件2. 登录GitLink平台(https://www.gitlink.org.cn/login)3. 进入设置>个人建站>我的站点4. 新建站点5. 去仓部进行部署6. 安…...
Linux 上离线安装 python3
在Linux系统上进行离线安装 Python3,通常是因为目标机器没有网络连接。以下是一个通用的步骤指南,帮助你在这种情况下成功安装Python 3: 下载安装包 选择一台有网络连接的机器:这台机器的操作系统应该尽可能与目标机器相同或相似…...
js操作字符串的常用方法
1. 查找和截取 1.1 indexOf 作用:查找子字符串在字符串中首次出现的位置。 是否改变原字符串:不会改变原字符串。 返回值:如果找到子字符串,返回其起始索引(从 0 开始);如果未…...

自动化学习-使用git进行版本管理
目录 一、为什么要学习git 二、git是什么 三、git如何使用 1、git的下载安装和配置 2、git常用的命令 3、gitee远程仓库的使用 (1)注册 (2)创建仓库 (3)配置公钥(建立电脑和git…...

GCC RISCV 后端 -- GCC Passes 注释
在前面文章提到,当GCC 前端完成对C源代码解析完成后,就会使用 处理过程(Passes)机制,通过一系列的处理过程,将 GENERIC IR 表示的C程序 转步转换成 目标机器的汇编语言。过程描述如下图所示: 此…...

Ollama存在安全风险的情况通报及解决方案
据清华大学网络空间测绘联合研究中心分析,开源跨平台大模型工具Ollama默认配置存在未授权访问与模型窃取等安全隐患。鉴于目前DeepSeek等大模型的研究部署和应用非常广泛,多数用户使用Ollama私有化部署且未修改默认配置,存在数据泄露、算力盗…...
IDEA Generate POJOs.groovy 踩坑小计 | 生成实体 |groovy报错
一、无法生成注释或生成的注释是null 问题可能的原因: 1.没有从表里提取注释信息,修改def calcFields(table)方法即可 def calcFields(table) {DasUtil.getColumns(table).reduce([]) { fields, col ->def spec Case.LOWER.apply(col.getDataType().…...

阿里云云监控资源告警常用模板
阿里云云监控资源告警常用模板 {"HostAvailabilityTemplate": [],"Description": "","SystemEventTemplates": [],"AlertTemplatesJson": {"kvstore_standard": [{"displayName": "Connection usa…...
Tailwind CSS 问题:npm error could not determine executable to run
问题与处理策略 问题描述 npx tailwindcss init -p在使用 Tailwind CSS 的前端项目中,执行上述指令,即初始化 Tailwind CSS 时,报如下错误 npm error could not determine executable to run# 报错npm 错误无法确定要运行的可执行文件问题…...
vue基本功
watchEffect和watch watchEffect默认 immdiate 是 true,而且自动收集依赖 watch需要手动写依赖,immdiate 默认是 false toRef和toRefs toRef: 复制 reactive 里的单个属性并转成 ref toRefs: 复制 reactive 里的所有属性并转成 ref vue3中使用vuex import { useStore } f…...

.NET10 - 预览版1新功能体验(一)
.NET 10 首个预览版已经在前两天发布,该版本在 .NET Runtime、SDK、libraries、C#、ASP.NET Core、Blazor 和 .NET MAUI 等多个方面都有重大改进和增强。其中C# 14 预览版也伴随着.NET 10预览版一起发布了,今天就和大家一起体验一下.NET 10 和 C# 14 。 …...

java下载多个网络文件并压缩成压缩包保存到本地
背景 开发票的时候远程会返回发票的url,现在客户端需要下载发票;因为一个订单可能不止一张发票,因此需要通过网络把远程的文件下载回来并压缩成压缩文件进行返回。 实现 本文的例子直接基于java.net包下面的类实现。(因为是基于…...

23种设计模式之单例模式(Singleton Pattern)【设计模式】
文章目录 一、简介二、关键点三、实现单例模式的步骤四、C#示例4.1 简单的单例模式4.2 线程安全的单例模式(双重检查锁定)4.3 静态初始化单例模式 五、单例模式优缺点5.1 优点5.2 缺点 六、适用场景七、示例的现实应用 一、简介 单例模式(Si…...

[项目]基于FreeRTOS的STM32四轴飞行器: 四.LED控制
基于FreeRTOS的STM32四轴飞行器: 四.LED控制 一.配置Com层二.编写驱动 一.配置Com层 先在Com_Config.h中定义灯位置的枚举类型: 之后定义Led的结构体: 定义飞行器状态: 在Com_Config.c中初始化四个灯: 在Com_Config.h外部声明…...
使用 dynamic-datasource-spring-boot-starter 实现多数据源动态切换
目录 在实际开发中,我们经常会遇到需要在一个项目中连接多个数据源的场景。例如,一个应用可能需要同时访问多个数据库,或者根据业务需求动态切换数据源。dynamic-datasource-spring-boot-starter 是一个基于 Spring Boot 的轻量级多数据源动态…...
springboot中注解有什么用
注解(Annotation)是 Java 的一个重要特性,我用几个具体例子来解释: 1、标记功能 Service // 告诉Spring这是一个服务类 public class UserService { }Data // 告诉Lombok自动生成getter/setter public class User {private…...

Spring Boot 缓存最佳实践:从基础到生产的完整指南
Spring Boot 缓存最佳实践:从基础到生产的完整指南 引言 在现代分布式系统中,缓存是提升系统性能的银弹。Spring Boot 通过 spring-boot-starter-cache 模块提供了开箱即用的缓存抽象,但如何根据业务需求实现灵活、可靠的缓存方案…...

Linux网络相关内容与端口
网络相关命令 ping命令测试连接状态 wget命令:非交互式文件下载器,可以在命令行内下载网络文件 使用ctrlc可以中止下载 curl命令:可以发送http网络请求,用于文件下载、获取信息等 其实和浏览器打开网站一样,cu…...
Python Flask框架学习汇编
1、入门级: 《Python Flask Web 框架入门》 这篇博文条理清晰,由简入繁,案例丰富,分十五节详细讲解了Flask框架,强烈推荐! 《python的简单web框架flask【附例子】》 讲解的特别清楚,每一步都…...
GitHub CI流水线
GitHub CI流水线 build.yml 路径:.github/workflows/build.yml name: Docker Image CIon:workflow_dispatch:jobs:build:runs-on: ubuntu-lateststeps:- uses: actions/checkoutv4- name: Set up JDK 8uses: actions/setup-javav4with:java-version: 8distributi…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)
服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...