2026年05月13日 赛博日记
生成时间:2026-05-15 00:30:00
📝 今日概要
今日核心状态:Web 自动化测试框架重大重构。实现了计划级单次进程串行执行,从根本上解决了每条用例重复初始化环境的性能瓶颈,同时修复了 5 个关键 Bug。
🔍 核心技术进展
- 计划级单次进程实现 [Claude Code / Cursor]:新增
run_web_plan_batch函数,让测试计划中所有用例在一个 Python 进程中串行执行,避免每条用例重新初始化 LLM + 浏览器- 核心文件:
runner.py、web_electron.py、web-agent.service.ts、TestPlanView.vue - 一次 LLM 初始化 + 一次浏览器启动,按用例顺序执行
- 支持
stop_on_first_case_fail失败策略 - 输出
YSB_PLAN_CASE_BOUNDARY和YSB_PLAN_CASE_RESULT便于日志解析
- 核心文件:
- 5 个关键 Bug 修复:
- keep_alive 问题:第一条用例失败后后续用例不执行 → 设置
keep_alive_between_agent_runs=True - 回调误判:
register_should_stop_callback在多 Agent 共享 BrowserSession 时误读上一条用例状态 → 计划批量场景禁用该回调 - Windows 管道警告:asyncio Proactor 在事件循环结束后
ValueError: I/O operation on closed pipe→ 添加 0.28s 延迟 - 日志分栏混乱:所有用例日志混在一起 → 按
YSB_PLAN_CASE_BOUNDARY切分 - 错误分类不准:非 0 退出码直接归为异常 → 优先匹配 stdout 关键字(超时、连接失败等)
- keep_alive 问题:第一条用例失败后后续用例不执行 → 设置
💡 深度洞察与经验教训
- 洞察:browser-use 框架的
Agent.close()会触发browser_session.kill(),在计划批量场景需要用keep_alive保持浏览器存活。子串匹配命中率低是因为 TAPD 预期是长文本而模型输出是总结,需要空白规整和按句分段匹配。 - 教训:退出码语义需要精心设计——计划批量正常完成(即使有用例失败)应返回 0,避免误导上层调用者。错误分类要区分"进程异常退出"和"步骤执行不通过"。
🚀 未来行动设想
- 考虑实现常驻进程模式,Electron 通过管道下发任务
- 增加环境变量开关控制 Judge 通过后是否跳过字面匹配
- 测试计划失败策略(continue/stop)与用例内步骤失败策略独立控制
📊 自动化统计
- 捕获 Memory 数:2(memory/2026-05-13.md + claude_2026-05-13.md)
- 笔记更新数:0