当前位置: 首页 > news >正文

使用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​ 模块提供了开箱即用的缓存抽象,但如何根据业务需求实现灵活、可靠的缓存方案&#xf…...

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…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

大数据学习栈记——Neo4j的安装与使用

本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...

基于Docker Compose部署Java微服务项目

一. 创建根项目 根项目&#xff08;父项目&#xff09;主要用于依赖管理 一些需要注意的点&#xff1a; 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件&#xff0c;否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数

高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

Spring AOP代理对象生成原理

代理对象生成的关键类是【AnnotationAwareAspectJAutoProxyCreator】&#xff0c;这个类继承了【BeanPostProcessor】是一个后置处理器 在bean对象生命周期中初始化时执行【org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization】方法时…...

【51单片机】4. 模块化编程与LCD1602Debug

1. 什么是模块化编程 传统编程会将所有函数放在main.c中&#xff0c;如果使用的模块多&#xff0c;一个文件内会有很多代码&#xff0c;不利于组织和管理 模块化编程则是将各个模块的代码放在不同的.c文件里&#xff0c;在.h文件里提供外部可调用函数声明&#xff0c;其他.c文…...

Qt/C++学习系列之列表使用记录

Qt/C学习系列之列表使用记录 前言列表的初始化界面初始化设置名称获取简单设置 单元格存储总结 前言 列表的使用主要基于QTableWidget控件&#xff0c;同步使用QTableWidgetItem进行单元格的设置&#xff0c;最后可以使用QAxObject进行单元格的数据读出将数据进行存储。接下来…...