
可观测性运维后端【免费下载链接】PulseReal-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with smart alerts and AI patrols that catch silent failures.项目地址https://gitcode.com/gh_mirrors/pulse27/Pulse点击查看免费下载本文面向需要在本仓库Pulse 实时监控平台中快速搭建并运行更新集成测试Update Integration Tests的开发者。文章以tests/integration/QUICK_START.md为骨架结合仓库中真实的脚本、Compose 编排、Mock 服务源码与 CI 工作流完整讲解一次性环境初始化、全量与分场景测试运行、交互式调试、Docker 手工控制、测试服务访问、报告查看、故障排查、CI 接入以及新增测试用例的规范流程。读完本文你将能够独立在本地或 CI 中跑通 Pulse 的 Playwright E2E 套件并理解 Mock GitHub 更新源如何可控地注入校验和错误、网络故障、限流与过期版本等异常场景。前置条件运行这套集成测试前请确认本机满足以下条件脚本会逐一校验Docker 与 Docker Compose用于启动docker-compose.test.yml中定义的三容器测试栈scripts/setup.sh会同时兼容docker-compose命令与docker compose子命令两种形式。Node.js 24 与 npmPlaywright 及全部集成测试工具链基于 Node.js 运行setup.sh会检查node -v的主版本号是否为 24不满足则直接退出。Go 1.25用于构建 Mock GitHub 更新服务器tests/integration/mock-github-server。注意setup.sh对 Go 只给出警告而非硬性失败——Go is not installed. Mock server build may fail.——因为真正的硬性校验发生在构建 Mock 镜像阶段。从源码结构看这套环境本质上是一个三体测试架构Playwright浏览器 UI→ Pulse Server被测实例→ Mock GitHub API可控响应三者通过 Docker 网络串联这与 tests/integration/README.md 中记录的架构图完全一致。一次性环境初始化在仓库根目录下执行cd tests/integration ./scripts/setup.shsetup.shtests/integration/scripts/setup.sh实际完成三件事安装 npm 依赖优先使用npm ci存在package-lock.json时保证依赖版本与锁文件严格一致否则回退到npm install。安装 Playwright 浏览器npx playwright install chromium下载 Chromium随后npx playwright install-deps chromium安装浏览器运行所需的操作系统级动态库。构建 Docker 测试镜像docker build -t pulse-mock-github:test ./mock-github-server构建 Mock GitHub 更新服务器镜像回到仓库根目录执行docker build -t pulse:test --build-arg GO_BUILD_TAGS -f Dockerfile .构建 Pulse 被测服务镜像。注释明确说明测试镜像会去掉 release 构建标签GO_BUILD_TAGS 置空使套件可以在没有 demo entitlement 的情况下启用 Mock fixtures。镜像构建只选用 Dockerfile 中的e2e_runtime阶段见 tests/integration/scripts/run-tests.sh 中ensure_test_images的--target e2e_runtime因为最终阶段是依赖release_payload上下文的预构建 agent不适合测试。运行全部测试初始化完成后在tests/integration目录下执行npm test这里的npm test并非直接调用npx playwright test而是包装为node ./scripts/run-playwright.mjs见 tests/integration/package.json。从 tests/integration/scripts/run-playwright.mjs 源码可以看到它串联了三步生命周期为本次调用生成唯一的PULSE_E2E_RUN_IDrun-时间戳-pid-随机串与PULSE_E2E_RUNTIME_STATE_PATH避免并行运行互相污染依次执行scripts/pretest.mjs安装浏览器、启动 Docker Compose 栈、等待/api/health健康检查通过、校验 bootstrap token、应用 entitlement profile与npx playwright test ...无论成败在finally中执行scripts/posttest.mjs做环境清理。底层 Playwright 配置见 tests/integration/playwright.config.ts值得注意的默认值workers: 1、fullyParallel: false——更新测试会修改全局状态因此串行执行单个用例timeout: 60000expect断言超时10000CI 下retries: 1吸收偶发 flake、maxFailures: 20环境损坏时提前中止并保留报告三个浏览器项目chromiumDesktop Chrome、mobile-chromePixel 5、mobile-safariiPhone 12输出 HTML、list、JUnit 三类报告。运行指定测试场景QUICK_START.md给出了按场景运行的形式# Happy path only ./scripts/run-tests.sh happy # Bad checksums ./scripts/run-tests.sh checksums # Rate limiting ./scripts/run-tests.sh rate-limit # Network failures ./scripts/run-tests.sh network # Stale releases ./scripts/run-tests.sh stale # Frontend validation ./scripts/run-tests.sh frontend需要说明的适用前提这些场景名对应的是以 Mock 环境变量注入异常的测试思路即通过MOCK_CHECKSUM_ERROR、MOCK_NETWORK_ERROR、MOCK_RATE_LIMIT、MOCK_STALE_RELEASE四个开关让 Mock GitHub 服务器返回坏校验和、模拟网络故障、启用激进限流、标记过期版本。而当前仓库中 tests/integration/scripts/run-tests.sh 实际支持的 suite 名已演化为all、diagnostic、core、perf、visual、multi-tenant、retired-trial-acquisition、cloud-hosting、cloud-lifecycle、demo-contract、evals、updates-api。其中all模式会依次跑诊断冒烟、核心 E2E、多租户、过期试用获取、云托管、云计费生命周期、公共 Demo 契约、导航性能、主题视觉回归与更新 API 集成任一失败都会汇总到最终 Test Summary 并以非零码退出。交互式调试模式# 打开 Playwright UI可视化选择并逐步执行用例 npm run test:ui # 调试模式进入 Inspector可单步、查看定位器 npm run test:debug # 有头浏览器模式肉眼观察浏览器执行过程 npm run test:headedDocker 测试栈手工控制package.json暴露了四个运维脚本均基于 tests/integration/docker-compose.test.yml# 启动测试环境 npm run docker:up # 跟踪查看各服务日志 npm run docker:logs # 停止并清除环境含数据卷 npm run docker:down # 强制重新构建镜像并启动 npm run docker:rebuildCompose 栈由三个服务组成服务作用关键配置seed-bootstrap-token向共享数据卷写入确定性的 48 位十六进制 bootstrap token默认0123456789abcdef...可用PULSE_E2E_BOOTSTRAP_TOKEN覆盖供首次运行设置向导 E2E 使用校验长度与字符集文件权限 600umask 077、chmod 700 /datamock-githubMock GitHub API 更新源监听 8080环境变量MOCK_CHECKSUM_ERROR/MOCK_NETWORK_ERROR/MOCK_RATE_LIMIT/MOCK_STALE_RELEASEwget 健康检查pulse-test被测 Pulse 实例监听 7655UI/API与 7656agent-ingest 独立端口PULSE_UPDATE_SERVERhttp://mock-github:8080、PULSE_MOCK_MODE默认 true、PULSE_DATA_DIR/data、PULSE_LOG_LEVELdebug、PULSE_ALLOW_DOCKER_UPDATEStrue、PULSE_UPDATE_STAGE_DELAY_MS250pulse-test通过depends_on等待seed-bootstrap-token成功退出、mock-github健康后才启动并自带/api/health的 wget 健康检查。extra_hosts中的host.docker.internal:host-gateway允许 webhook 类 E2E 将 Pulse 指向宿主机的捕获监听器。访问测试服务测试环境运行期间可以访问以下地址Pulse 测试 UI内嵌前端http://localhost:7655Mock GitHub APIhttp://localhost:8080健康检查http://localhost:7655/api/healthhttp://localhost:8080/health这里有一个容易混淆的细节QUICK_START.md特别强调:7655是 Docker 环境内由后端提供的测试 UI而不是规范的 hot-dev 浏览器壳。若想在仓库根目录使用受管开发运行时应执行npm run dev并访问http://127.0.0.1:5173。这一约定在 tests/integration/tests/runtime-defaults.ts 中同样可见preferredBrowserBaseURL()的解析优先级是PLAYWRIGHT_BASE_URL→PULSE_BASE_URL→ runtime-state 文件 → 运行中的 hot-dev5173→http://localhost:7655兜底。查看测试结果# 打开 HTML 报告 npm run test:report报告与产物默认落盘位置playwright-report/HTML 报告含用例树、步骤、断言与错误堆栈test-results/失败用例的截图、录屏、Tracetrace: on-first-retry、screenshot: only-on-failure、video: retain-on-failure。JUnit 结果输出到test-results/junit.xmlCI 中用于机器可读的失败归因。当使用 worktree-safe shell runner 时报告目录会被隔离为playwright-report/RUN_ID与test-results/RUN_ID见run-tests.sh中的PULSE_E2E_REPORT_DIR/PULSE_E2E_RESULTS_DIR导出避免多个并发调用互相覆盖。测试场景说明QUICK_START.md重点介绍了两类核心场景仓库中的实现可以逐一对号入座1. 诊断冒烟测试tests/00-diagnostic.spec.ts目标确保容器化测试栈能够启动、UI 能够渲染。从源码看tests/integration/tests/00-diagnostic.spec.ts它远比能打开页面严格是一个fail-closed 的发布排练就绪诊断断言GET /api/health返回 200 且status healthydependencies.monitor、dependencies.scheduler、dependencies.websocket三个依赖全部为true等待 SPA 挂载#root非空并渲染出 Welcome 标题根据/api/security/status的分支校验渲染表面首次运行显示 Setup Wizard 与 bootstrap token 输入框、本地登录Username/Password/Sign in 按钮或 SSO 登录Continue with provider按钮并检查控件真实可见且非透明逐级累乘opacity的effectiveRenderedOpacity全程监听 console error、pageerror 与 requestfailed任一出现即判失败该用例默认test.skip需要显式设置PULSE_E2E_DIAGNOSTIC1才会执行且强制retries: 0——就绪失败必须保持红色不能被 CI 重试策略洗白。2. 核心 E2E 流程tests/01-core-e2e.spec.ts覆盖真实用户的关键路径tests/integration/tests/01-core-e2e.spec.ts首次运行设置向导全新实例进入 Setup Wizard、粘贴 bootstrap token、创建管理员账号完成后落地/infrastructurev6 默认落地页或/proxmox/overview兼容分支登录/登出 认证状态登出后重新登录并验证/api/state可访问告警阈值创建/删除在/alerts/thresholds中为虚拟化主机编辑 CPU 阈值覆盖/api/alerts/config的 overrides 增删保存后断言 override 出现、revert 后消失并在刷新后验证持久化用例还会把外部通知开关恢复原状避免对真实实例留下副作用设置跨刷新持久化套件通过刷新页面验证配置不丢失添加/删除 Proxmox 节点仅测试专用默认被PULSE_E2E_ALLOW_NODE_MUTATION1门控关闭状态直接test.skip开启后通过/settings/pve的表单真实创建e2e-pve-时间戳节点并在 finally 中通过DELETE /api/config/nodes/{id}清理。故障排查测试无法启动# 确认 Docker 守护进程在运行 docker ps # 重新构建镜像源码变更后镜像可能过期 npm run docker:rebuild # 查看服务日志 npm run docker:logs端口冲突测试栈固定使用 7655Pulse与 8080Mock GitHub若被占用# 定位并结束占用进程 lsof -i :7655 lsof -i :8080需要注意这一固定端口约定仅适用于npm test/setup.sh/ 手写 Compose 命令。worktree-safe shell runnerscripts/run-tests.sh会忽略固定端口——它把PULSE_E2E_PORT、PULSE_E2E_AGENT_PORT、PULSE_E2E_MOCK_GITHUB_PORT置为 0让 Docker 在 loopback 上动态分配端口启动成功后再通过compose port service 端口反向解析出真实绑定地址。干净重置# 移除全部测试容器与数据卷 docker-compose -f docker-compose.test.yml down -v # 清理 Docker 残留 docker system prune -f # 重新执行一次性初始化 ./scripts/setup.shCI 集成完整的 Playwright 套件含更新流用例tests/79-update-flow.spec.ts通过 .github/workflows/test-e2e.yml 在每次 push 与 PR 中运行触发路径限定为以下变更域避免无关改动浪费 CI 资源internal/**frontend-modern/**tests/integration/**DockerfileCI 工作流还包含值得学习的工程细节stable / probation 双档位通过PULSE_E2E_TIERstable|probation见 tests/integration/e2e-tiering.mjs将套件拆为门禁档与非门禁档stable 是e2e-verdict的硬门槛probation 在continue-on-error下运行其失败不污染 main但会重置10 次连续绿色晋升计数。八分片并行e2ejob 用matrix.shard: [1..8]分片执行npm test -- --shardn/8每片独立报告。源绑定镜像test-imagesjob 通过scripts/e2e_test_images.py一次构建本次提交精确对应的测试镜像并上传 artifact各分片下载后先做manifest-sha256校验再加载。夹具准入分片跑正式套件前先执行fixture-readiness.config.ts一次性准入默认 Mock 库存与历史避免共享夹具故障在 8 个分片上重复消耗 47 分钟。成功标准QUICK_START.md明确列出了这套测试体系需要持续满足的成功标准✅ 所有测试场景可靠通过✅ 测试能捕获校验和校验问题例如历史上 v4.28.0 的同类缺陷✅ 前端 UX 回归被拦截视觉回归、交互契约类用例✅ 每个相关 PR 都在 CI 中运行测试。更新流测试架构与 Mock GitHub 服务器原理更新流测试是整个套件中最有代表性的部分其架构为Playwright 通过真实浏览器调用 Pulse 的/api/updates/*接口Pulse 的后端更新器则把PULSE_UPDATE_SERVER指向 Mock GitHub 服务器从而在不触碰真实网络的情况下完成端到端验证。Mock GitHub 服务器的实现位于 tests/integration/mock-github-server/main.go其行为完全由环境变量控制环境变量注入的异常底层实现细节MOCK_CHECKSUM_ERRORtrue返回无效校验和将所有版本的 checksum 覆盖为全零哈希MOCK_NETWORK_ERRORtrue模拟网络故障/repos/.../releases先time.Sleep(5s)再返回 503MOCK_RATE_LIMITtrue激进限流每 IP 每分钟仅放行 3 次超出返回 429 Retry-After: 60MOCK_STALE_RELEASEtrue标记过期版本下载 tarball 时附加X-Release-Status: stale与X-Release-Warning头服务器内置三组哨兵发布版本v99.0.0最新稳定版24 小时前发布、v98.5.0上一版、v99.1.0-rc.1预发布版并为每个版本动态生成伪 tarball内含可执行pulse脚本与VERSION文件及其真实 SHA-256 校验和。资产命名刻意保留真实 Pulse 发布的前导v如pulse-v6.0.4-linux-amd64.tar.gz因为应用内更新器会从 URL 推断目标版本且只识别 v 前缀版本。对应的更新流 E2E 用例tests/integration/tests/79-update-flow.spec.ts验证了四条关键契约stable 通道返回最新稳定版而非预发布版rc 通道返回更新的预发布版/api/updates/plan在 mock 模式下报告确定性模拟执行计划instructions含 Simulated update flow (mock mode)且canAutoUpdate、rollbackSupport、readiness.status为真stable 通道拒绝应用预发布版下载 URL返回 409body 含prerelease未签名工件在签名校验处 fail-closed由于 v6 强制要求对发布工件做 SSHSIG 校验实现见 internal/updates/signature.go通过ssh-keygen -Y verify完成对 Mock 的未签名 tarball 执行 apply 最终必须以error状态结束且错误信息含signature——若出现completed状态反而意味着未签名工件被安装属于测试失败。用例还会临时创建agent:report作用域的 API token 以满足生产级更新就绪契约并在 finally 中删除。编写新的测试用例QUICK_START.md给出的新增用例流程如下将测试文件添加到tests/目录复用 tests/integration/tests/helpers.ts 中提供的辅助函数遵循既有测试模式test.describe.serial、ensureAuthenticated、apiRequest、waitForAppShell等若需要新的环境配置同步更新run-tests.sh必要时更新 CI 工作流。helpers.ts是这套套件的公共工具箱几个高频辅助值得了解E2E_CREDENTIALS默认admin/adminadminadminPulse 强制密码最短 12 位bootstrap token 默认0123456789abcdef0123456789abcdef0123456789abcdef均可通过环境变量PULSE_E2E_USERNAME、PULSE_E2E_PASSWORD、PULSE_E2E_BOOTSTRAP_TOKEN覆盖waitForPulseReady(page)轮询GET /api/health直至就绪waitForAppShell(page)等待 SPA 挂载#root出现子节点避免对裸 HTML 壳做过早断言ensureAuthenticated(page)/ensureFirstRunExperience(page)自动处理首次运行设置向导含 API 兜底POST /api/security/quick-setup与登录态建立。一个典型的示例用例import { test, expect } from playwright/test; import { ensureAuthenticated, navigateToSettings } from ./helpers; test(my new test, async ({ page }) { await ensureAuthenticated(page); await navigateToSettings(page); // Your test logic here });说明QUICK_START.md示例中的navigateToSettings属于示意性辅助函数实际可用函数以helpers.ts中的导出为准写新用例时请先阅读该文件的真实签名与既有用例的调用方式。Worktree-safe shell runner 的隔离语义QUICK_START.md最后专门强调了一个容易踩坑的边界scripts/run-tests.sh是worktree 安全的隔离运行器与npm test的默认行为不同它为每次调用构建唯一镜像标签pulse:RUN_ID、pulse-mock-github:RUN_ID使用唯一 Compose 项目名与容器名RUN_ID-server、RUN_ID-mock、RUN_ID-seed因此同一 checkout 的多次并发调用互不干扰宿主端口由 Docker 在 loopback 上动态分配并在启动后探测不遵循固定端口或 base-URL 覆盖EXIT/INT/TERM/HUP 信号处理只清理本次调用的栈、数据卷与镜像标签若进程被 SIGKILL 或宿主机故障会遗留资源打印出的pulse-e2e-…项目名即用于定位手工清理该隔离只适用于 shell runner不适用于npm test、setup.sh或手写 Compose 命令它们保留旧版固定端口默认值因此做 checkout 级资质认证时不要与这些默认方式并发使用。另外从 tests/integration/scripts/run-tests.sh 开头可以看到runner 实际通过python3 scripts/owned-run.py以--owned-run方式自我托管supervisor 依赖 Linux child-subreaper 与/proc等待孤儿浏览器写入进程非 Linux 平台会 fail-closed 拒绝运行而非假装清理成功Cookie 状态以目录 0700 权限私有化并在完成时移除报告与视频同样按调用隔离。获取帮助更完整的场景清单、CI 档位与受管运行时managed local backend、hot-dev runtime用法见 tests/integration/README.md参考tests/下既有测试文件作为编写范例服务异常时先查 Docker 日志npm run docker:logs测试栈使用的依赖与脚本命令一览见 tests/integration/package.json。小结Pulse 的更新集成测试体系把浏览器端到端 可控 Mock 更新源 Docker 容器化被测实例三者有机结合setup.sh一次性初始化环境npm test与run-tests.sh提供全量与分场景入口docker-compose.test.yml定义确定性的测试栈与 bootstrap token 播种Mock GitHub 服务器通过四个环境变量开关可控注入四类更新异常而 CI 中的 stable/probation 双档位与分片机制保证了套件既能守门又能观察。对于需要为更新流程、前端交互或异常注入场景新增验证的开发者本文覆盖了从环境准备到用例编写、再到 CI 接入的完整链路。赞分享可观测性运维后端【免费下载链接】PulseReal-time monitoring dashboard for Proxmox VE, PBS, Docker, Kubernetes, TrueNAS and vSphere. Self-hosted, with smart alerts and AI patrols that catch silent failures.项目地址https://gitcode.com/gh_mirrors/pulse27/Pulse点击查看免费下载相关推荐Ionic Framework E2E 测试实战用 Playwright 运行浏览器测试、搭建 Docker 环境与截图基线管理Ionic Framework E2E 测试实战用 Playwright 运行浏览器测试、搭建 Docker 环境与截图基线管理 本篇指南基于 Ionic F前端移动开发跨平台Lynx 集成测试执行环境搭建指南基于 Lynx-E2E 与 Appium 的端到端测试环境配置Lynx 集成测试执行环境搭建指南基于 Lynx E2E 与 Appium 的端到端测试环境配置 本指南完整讲解 Lynx 仓库中集成测试Integrati跨平台移动开发前端桌面应用freeCodeCamp 如何对 Docker 本地环境运行 Playwright E2E 测试freeCodeCamp 如何对 Docker 本地环境运行 Playwright E2E 测试 freeCodeCamp 仓库的端到端测试放在 e2e/ 目前端后端教育创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
拿不准这条消息跟你有没有关系?
工种不同、批次不同,要求可能差很多。打电话把你的情况说清楚,我们按信阳、平顶山本地的口径给你捋一遍。