2026-05-19 赛博日记
生成时间:2026-05-19 23:58
📝 今日概要
今日核心工作聚焦于 ysbaiautotest 项目多个关键问题的修复与 LLM-api-test-tool 项目的重大改造,完成测试用例停止功能、Chrome 配置保存、用例负责人显示、Docker 部署优化以及 Electron 打包问题的解决;同时推动 Coupon API 改造计划的落地,包含解析器防循环、Tag 筛选、鉴权注入、LLM 分批生成和自修复能力的技术选型。
🔍 核心技术进展
ysbaiiautotest 项目
测试用例停止按钮修复
- 问题:执行测试用例时点击停止按钮无法终断
- 根因:
runningTestcaseProcess仅在 Python 启动后赋值,步骤增强阶段停止会返回「没有正在运行的测试用例」;停止后close仍会等待步级裁判完成;前端stopRunCase未递增currentExecutionId,导致testcase:complete覆盖停止状态 - 解决:增加
testcaseRunSessionActive/testcaseRunAbortRequested状态标记;增强阶段可停止;停止后跳过裁判等待并快速结束 IPC;停止时currentExecutionId++;runTasks返回后若已停止则不再更新为成功/失败
Chrome 配置路径保存清空问题修复
- 问题:Chrome 可执行文件路径和用户数据目录保存后,再次打开会清空
- 根因:
settings.service.ts在加载配置时,若路径与旧版默认路径完全一致(如C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chrome.exe),会强制清空 - 解决:删除「每次加载都清空」的逻辑;保存 Web 设置时对 Chrome 路径相关字段统一按字符串写入;更新设置时做字符串规范化
Electron 打包快捷方式迁移(Squirrel → NSIS)
- 问题:从 Squirrel 安装器切换到 NSIS 后,升级时桌面快捷方式指向旧版本,新快捷方式无法继承历史版本
- 根因:不同安装器的快捷方式目标不同(Squirrel 指向
Update.exe --processStart,NSIS 直接指向 exe),升级时 NSIS 不会自动改写 Squirrel 创建的.lnk - 解决:创建
build/installer.nsh自定义安装脚本;在customInstall阶段删除桌面/开始菜单中名为「药师帮 AI 自动化测试」的旧快捷方式;对桌面快捷方式先调用WinShell::UninstShortcut解除固定,再删除;调用SHChangeNotify刷新桌面
Electron 打包产物分发规范化
- 澄清:
npm run package产物是绿色文件夹(约 765 MB),适合本机自测;正式分发应用应使用npm run make:bundle:win生成的 NSIS 安装包 - 问题:绿色文件夹发给别的电脑「不行」,多半是没整夹、没解压到本地、传不全或被安全软件拦截
- 指导:正式分发请使用 NSIS 安装包;若必须发绿色目录,需整夹打包 zip、解压到本地磁盘运行,不要在压缩包里直接双击
- 澄清:
用例负责人显示优化(中文映射 + 下拉选择)
- 需求:用例负责人显示为中文(当前显示 TAPD userid),且支持下拉选择,存储仍用 userid
- 实现:
- 使用
resources/userid.csv映射文件(表头userid/name) - 后端
normalizeCaseOwnerToUserid统一存 userid,界面显示中文名 - 下拉选项来自 CSV 中的姓名 + 数据库已有负责人(去重)
- 支持可选(首项为「不指定(可选)」)
- 使用
- Docker 部署修复:构建上下文改为仓库根目录,确保
resources/userid.csv能被打包进镜像;运行时通过环境变量TAPD_USERID_CSV=/app/resources/userid.csv指定路径;未找到文件时打印警告日志
LLM-api-test-tool 项目
Coupon API 改造计划(大型重构)
- 背景:88 个 POST 接口,7 个 tag,253 个 schema,大量循环
$ref - 阻塞项:解析器
SwaggerParser._resolve_schema遇循环$ref导致RecursionError - 技术选型:
- 解析器修复:引入引用栈 + 深度上限(
max_depth=8),遇到循环$ref时返回标记或部分信息 - Tag 筛选:实现
TagFilter组件,支持按 tag 筛选 endpoints - 鉴权注入:实现
CouponAuthInjector,支持BaseInModelAuth(appId/authCode/token)在请求体中注入 - 路径参数:实现
PathParamResolver,替换{version}等路径参数(从operation.description提取默认值) - LLM 分批生成:按 tag 分组多次调用 LLM,合并结果并重编号,避免单次调用超时
- Rule 模式 body 增强:基于 schema/example 生成请求体,替代占位
{} - 自修复能力:实现
CaseRepairer,失败用例根据 swagger 自修复 - pytest 报告:添加 HTML 报告生成,失败用例可点击查看完整日志弹窗
- 解析器修复:引入引用栈 + 深度上限(
- 背景:88 个 POST 接口,7 个 tag,253 个 schema,大量循环
前端体验优化
- Base URL 配置:从
.env改为前端配置,存储在localStorage,页面刷新不丢失 - 认证管理:从弹窗改为设置页,使用左右分栏布局,包含完整的 CRUD 功能(环境配置 Tab + 认证管理 Tab)
- 页面背景统一白色:将暗色主题改为白色背景(
.app-shell背景从radial-gradient改为#ffffff)
- Base URL 配置:从
合并推送 Skill
- 自动化流程:创建
.claude/skills/merge-push.md,封装「检查变更 → 自动生成 commit 消息 → 暂存并提交 → 推送当前分支 → 合并到 dev/main → 推送 → 切回原分支 → 输出汇总报告」流程 - 使用方式:在对话中输入
/merge-push或说「合并推送」即可自动执行
- 自动化流程:创建
💡 深度洞察与经验教训
- 洞察:Docker 构建上下文很重要。如果配置文件在仓库根目录,但构建上下文只有子目录,会导致文件未打包。构建上下文应包含所有需要打包的文件。
- 洞察:Electron 打包产物有
package(绿色文件夹)和make(安装包)两种,前者适合本机自测,后者适合正式分发。不同安装器(Squirrel/NSIS)的快捷方式目标不同,升级时需要迁移旧快捷方式。 - 洞察:Chrome 路径配置问题根因在「每次加载配置时,若路径与旧版默认路径完全一致,会强制清空」,而不是保存逻辑问题。这种「强制清空」逻辑容易误删用户自定义配置。
- 教训:配置管理应避免「硬编码路径匹配后强制清空」的逻辑,应该用户填什么就存什么,启动时原样加载。必要时可以在加载时做规范化(如字符串 trim),但不应该凭空清空。
- 教训:OpenAPI 解析器需要处理循环引用问题,引入引用栈和深度上限是有效方案,但需要权衡深度上限的值(太小可能导致解析不完整,太大可能导致栈溢出)。
- 教训:大规模接口文档可以按 tag 或接口数分批处理,避免单次 LLM 调用超时或失败。分批后需要合并结果并重编号,保证用例 ID 连续。
- 教训:鉴权注入逻辑使用
setdefault无法覆盖占位值,应该直接覆盖。需要检查用例的use_auth标记,确保鉴权只注入到需要鉴权的用例中。
🚀 未来行动设想
- 考虑将「合并推送」skill 推广到其他项目,提升开发效率
- Docker 部署时,可以将配置文件通过 ConfigMap 或 Secret 管理,提升安全性
- pytest 报告可以添加更多定制化选项,如失败截图、性能指标等
- OpenAPI 解析器可以进一步优化,支持更多 OpenAPI 版本和特性
- LLM 分批生成可以考虑并行化处理,提升生成速度
📊 自动化统计
- 捕获 Memory 数:2(2026-05-19.md + claude_2026-05-19.md)
- 笔记更新数:0(note-gen-sync 目录下最近24小时无 .md 文件更新)