当前位置: 首页 > 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…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)

HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...

Leetcode 3576. Transform Array to All Equal Elements

Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到&#xf…...

PHP和Node.js哪个更爽?

先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

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

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

Rust 异步编程

Rust 异步编程 引言 Rust 是一种系统编程语言,以其高性能、安全性以及零成本抽象而著称。在多核处理器成为主流的今天,异步编程成为了一种提高应用性能、优化资源利用的有效手段。本文将深入探讨 Rust 异步编程的核心概念、常用库以及最佳实践。 异步编程基础 什么是异步…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 &#x1f4dd; 在上一篇文章中&#xff0c;我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源&#xff0c;方便后续将资源打包到一个可执行文件中。 2.embed介绍 &#x1f3af; Go 1.16 引入了革命性的 embed 包&#xff0c;彻底改变了静态资源管理的…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...