菜单

测试与持续集成

相关源文件

本文档记录了 Uptime Kuma 中的测试基础设施和持续集成 (CI) 工作流。它为希望了解测试结构、如何在本地运行它们以及自动化测试如何集成到开发工作流中的开发人员提供了技术指导。

有关贡献指南的信息,请参阅贡献指南。有关 Docker 开发信息,请参阅Docker 开发

目录

概述

Uptime Kuma 采用自动化测试和持续集成来维护代码质量并防止回归。所有拉取请求在合并之前都会经过自动化测试。测试基础设施旨在跨多个操作系统和 Node.js 版本验证功能,确保跨不同环境的兼容性。

来源:.github/workflows/auto-test.yml1-94 CONTRIBUTING.md578-583

测试类型

Uptime Kuma 使用几种类型的测试来确保代码质量

后端测试

后端测试使用 Node.js 内置的测试框架来验证服务器端功能。这些测试侧重于各个组件及其集成,包括:

  • 数据库操作
  • API 端点
  • 监控功能
  • 通知系统

运行命令:npm run test-backend

来源:.github/workflows/auto-test.yml38-41 CONTRIBUTING.md578-583

端到端测试

端到端测试从用户界面到后端验证整个应用程序堆栈。这些测试使用 Playwright 自动化浏览器交互,模拟真实用户行为。

运行命令:npm run test-e2e

来源:.github/workflows/auto-test.yml79-94

Linters(代码检查工具)

代码检查工具可强制执行一致的代码风格并在代码进入生产环境之前捕获潜在问题。Uptime Kuma 使用 ESLint 进行 JavaScript/TypeScript 代码检查。

运行命令:npm run lint:prod

来源:.github/workflows/auto-test.yml65-77 CONTRIBUTING.md467-469

持续集成工作流

Uptime Kuma 使用 GitHub Actions 进行持续集成。CI 工作流会在拉取请求和推送到受保护分支时自动运行。

CI 工作流执行以下步骤:

  1. 代码检查:验证代码风格和质量
  2. 后端测试:在多个平台和 Node.js 版本上运行后端测试
  3. ARMv7 测试:执行简单的安装测试以确保 ARMv7 兼容性
  4. 端到端测试:使用 Playwright 执行基于浏览器的测试

在合并拉取请求之前,所有测试都必须通过。

来源:.github/workflows/auto-test.yml1-94 CONTRIBUTING.md325-327

在本地运行测试

开发人员在提交拉取请求之前应在本地运行测试,以确保他们的更改不会破坏现有功能。

先决条件

运行测试前,请确保已安装以下软件:

  • Node.js 18 或 20
  • npm 9+
  • Git

来源:CONTRIBUTING.md477-483

设置

克隆仓库并安装依赖项

运行后端测试

运行后端测试:

来源:CONTRIBUTING.md578-583 .github/workflows/auto-test.yml36-41

运行端到端测试

运行端到端测试:

来源:.github/workflows/auto-test.yml90-93

运行代码检查

验证代码风格和质量:

来源:.github/workflows/auto-test.yml77

编写测试

在为 Uptime Kuma 做贡献时,为你的更改编写测试有助于维护代码质量并防止回归。

后端测试指南

后端测试应:

  1. 测试单个函数及其集成
  2. 覆盖成功和失败两种情况
  3. 在适当的时候模拟外部依赖项
  4. 放置在 test 目录中
  5. 遵循现有的测试模式

端到端测试指南

端到端测试应:

  1. 测试关键用户流程
  2. 验证 UI 元素和交互
  3. 在不同浏览器中正常工作
  4. 可靠且不依赖于时序
  5. 放置在适当的测试文件中

来源:CONTRIBUTING.md273-274

CI 配置

CI 工作流在 GitHub Actions 工作流文件中配置。本节详细介绍了工作流配置。

工作流触发器

CI 工作流在以下情况下运行:

  • 推送到 master1.23.X 分支(不包括 .md 文件更改)
  • 拉取请求到 master1.23.X 分支(不包括 .md 文件更改)
on:
  push:
    branches: [ master, 1.23.X ]
    paths-ignore:
      - '*.md'
  pull_request:
    branches: [ master, 1.23.X ]
    paths-ignore:
      - '*.md'

测试矩阵

工作流在以下环境进行测试:

操作系统Node.js 版本
macOS18, 20
Ubuntu18, 20
Windows18, 20
ARM6418, 20
ARMv718, 20 (有限支持)

任务依赖

工作流包含以下带依赖项的任务:

  • check-linters:无依赖项,首先运行
  • auto-test:依赖于 check-linters
  • armv7-simple-test:无依赖项,并行运行
  • e2e-test:无依赖项,并行运行

工作流要成功,所有任务都必须通过。

环境变量

后端测试使用以下环境变量:

  • HEADLESS_TEST:设置为 1 以在无头模式下运行测试
  • JUST_FOR_TEST:用于测试身份验证的秘密值

来源:.github/workflows/auto-test.yml1-94

拉取请求(PR)要求

要接受拉取请求,它必须:

  1. 通过所有 CI 检查
  2. 为新功能包含测试
  3. 不破坏现有测试
  4. 符合代码风格指南

拉取请求模板包含一个清单,用于验证这些要求。

来源:.github/PULL_REQUEST_TEMPLATE.md67-80 CONTRIBUTING.md325-327