2026年05月13日 赛博日记

生成时间:2026-05-15 00:30:00

📝 今日概要

今日核心状态:Web 自动化测试框架重大重构。实现了计划级单次进程串行执行,从根本上解决了每条用例重复初始化环境的性能瓶颈,同时修复了 5 个关键 Bug。

🔍 核心技术进展

  • 计划级单次进程实现 [Claude Code / Cursor]:新增 run_web_plan_batch 函数,让测试计划中所有用例在一个 Python 进程中串行执行,避免每条用例重新初始化 LLM + 浏览器
    • 核心文件:runner.pyweb_electron.pyweb-agent.service.tsTestPlanView.vue
    • 一次 LLM 初始化 + 一次浏览器启动,按用例顺序执行
    • 支持 stop_on_first_case_fail 失败策略
    • 输出 YSB_PLAN_CASE_BOUNDARYYSB_PLAN_CASE_RESULT 便于日志解析
  • 5 个关键 Bug 修复
    1. keep_alive 问题:第一条用例失败后后续用例不执行 → 设置 keep_alive_between_agent_runs=True
    2. 回调误判register_should_stop_callback 在多 Agent 共享 BrowserSession 时误读上一条用例状态 → 计划批量场景禁用该回调
    3. Windows 管道警告:asyncio Proactor 在事件循环结束后 ValueError: I/O operation on closed pipe → 添加 0.28s 延迟
    4. 日志分栏混乱:所有用例日志混在一起 → 按 YSB_PLAN_CASE_BOUNDARY 切分
    5. 错误分类不准:非 0 退出码直接归为异常 → 优先匹配 stdout 关键字(超时、连接失败等)

💡 深度洞察与经验教训

  • 洞察: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