[Bug] Local browser test traces can exhaust disk space

该问题发生在本地未设置 CI 时运行 Web Browser Mode 与 Dify UI 基础组件测试,Playwright 追踪无条件使用 retain-on-failure ,大量失败用例会在 web/.vitest-browser/traces/ 下堆积体积惊人的 trace 数据。优先排查

快速结论:该问题发生在本地未设置 CI 时运行 Web Browser Mode 与 Dify UI 基础组件测试,Playwright 追踪无条件使用 retain-on-failure,大量失败用例会在 web/.vitest-browser/traces/ 下堆积体积惊人的 trace 数据。优先排查两处 Vite 配置中的 trace.mode 是否按 isCI 区分本地与 CI。

适用环境:本地 macOS 开发环境;Dify 仓库的 Web Browser Mode 测试与 Dify UI 基础组件测试,使用 Playwright Chromium(来自 Issue 正文)。

最快修复方案:在 web/vite.config.ts 与 packages/dify-ui/vite.config.ts 的 unit 项目中,把 trace 模式改为 isCI ? 'retain-on-failure' : 'off',两处配置文件中均已定义 isCI,可直接复用。

注意事项:tracesDir 保持不变;screenshotFailures: true 保留不动,失败截图与追踪是分开配置的。关闭追踪不会回收已存在的约 70 GiB 旧数据,需要自行判断是否手动清理。

问题场景

在本地运行 Dify 的 Web Browser Mode 测试和 Dify UI 基础组件测试(Playwright Chromium)时,如果未设置 CI 环境变量并遇到较多测试失败,追踪文件会持续写入磁盘。Issue 中记录一次本地运行产生了 3,264 个 trace 文件,在 web/.vitest-browser/traces/ 下约占 70 GiB,其中约 67.8 GiB 为 .network 文件。Dify UI 基础组件测试中也存在同样的无条件 retain-on-failure 设置。

报错原文

[Bug] Local browser test traces can exhaust disk space

原因分析

根本原因是 Playwright 的 trace 模式被固定为 retain-on-failure,没有根据运行环境区分:本地开发机跑大套件且失败较多时,每个失败用例都会保留完整追踪,.network 文件尤其占空间,最终导致磁盘被占用殆尽。预期行为是本地关闭自动追踪,只在 CI 保留失败追踪用于排查,同时继续保留失败截图。

环境排查

  • 确认运行测试时是否设置了 CI 环境变量,本地复现需保持未设置。
  • 检查 web/vite.config.ts 中 trace 是否为无条件的 retain-on-failure。
  • 检查 packages/dify-ui/vite.config.ts 的 unit 项目中是否同样是无条件 retain-on-failure。
  • 确认两处配置均已有 isCI 变量定义,可直接用于条件判断。
  • 确认 screenshotFailures 配置保持不变(Web 设在 browser project 上,Dify UI 设在共享 browser 配置中)。

解决步骤

  1. 打开 web/vite.config.ts,将 trace 配置改为:
    trace: {
      mode: isCI ? 'retain-on-failure' : 'off',
      tracesDir: './.vitest-browser/traces',
    },
  2. 打开 packages/dify-ui/vite.config.ts,在其 unit 项目中做同样的修改,保持 tracesDir 输出位置不变。
  3. 不要改动 screenshotFailures: true,确保本地与 CI 仍能捕获失败截图。
  4. 如需回收磁盘,另行检查 web/.vitest-browser/traces/ 下的历史 trace 文件并手动清理(Issue 未提供具体清理命令,请按需自行确认)。

验证方法

分别在两个项目中各触发一个失败测试:在未设置 CI 时运行,确认本地没有生成新的 trace 文件;在 CI=1 时运行,确认 CI 下仍保留失败追踪,并且两种情况都仍能生成失败截图。比较时应看新产生的产物,而不是目录总大小,因为关闭追踪不会回收已有的约 70 GiB 数据。

参考来源

langgenius/dify #46157

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 34571

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注