2026年8月3日 星期一 赛博日记
生成时间:2026-08-03 23:50 (Asia/Shanghai)
核心工作
💻 Claude Code 工作记录
今日共 17 个会话(Claude 13 个 / Cursor 4 个,365 条消息),主要围绕 APP 冒烟测试执行架构重构 展开。
🧪 APP 冒烟测试执行流重构:Skill 驱动步级裁判
- 时间:全天(11:12 起)
- 项目:
Administrator/.claude/projects - 消息数:647(主会话)
- 状态:✅ 完成,148 个测试用例全量回归通过
核心改造内容:
步级协议落地:复用
electron.py内置的YSB_STEP_JUDGE_SYNC同步钩子,将主循环从for遍历重写为while可控索引结构,支持retry_current(续跑当前步)和restart_all(整条重跑)两种流转模式。单进程保状态 + 逐步判,避免了每步重启进程的开销。独立裁判模块:新建
runtime/phone_agent/step_judge.py,封装证据落盘、Verdict 解析、决策封顶及 stdout 切片逻辑。针对__init__.py重依赖导致单测崩溃的问题,采用importlib.util.spec_from_file_location按绝对路径隔离加载,完成 23 项单元测试。执行引擎重写:重构
run_app_batch.py执行链路,剔除旧版_parse_app_case_result与run_with_step_retry,全面接入步级裁判累积机制。无人值守门禁适配:在
gate.py注入step_judge.mode=auto强制配置,开发 Auto Daemon 守护线程解决 Git Commit Hook 等无交互场景下的自动轮询裁判。
关键经验:
- 钩子复用 » 进程重建:系统已内置同步等待机制,单进程顺序执行天然保持 UI 状态连续性
- Python 包初始化依赖陷阱:
__init__.py中的重型依赖会污染单测环境,纯逻辑应抽离为独立模块 - 非原子文件写入需鲁棒设计:裁判轮询必须校验 JSON 完整性,防止读到截断数据
🔍 三版冒烟架构对比调研(PC/Gate/App)
通过对比分析 PC 版、Gate 版、App 版冒烟测试执行链路的职责分层:
- App 版底层已通过
_case_tasks实现步骤化切片,但缺乏独立的 Skill 层逐步规划闭环 - PC 版侧重批量任务流水线控制,Gate 版侧重提交前门禁拦截
- 三者均呈现"策略(Skill)-执行(Script)-反馈(Judgment)“分层特征
- 结论:App 版重构方向明确——补全顶层 Skill 渐进式规划节点 + 后置条件判断器
📦 TAPD 测试用例生成与门禁执行(Cursor)
- 时间:10:51
- 项目:
d/code/ysbpro - 消息数:50
完成「积分补贴按钮」功能 12 条测试用例(TC001~TC012),覆盖前端 snapUp.pointsUseButton 与后端 submitOrderDetail.pointsUseButton。执行 P0 冒烟门禁未通过(exit code 10,通过率 0%),根因:
- 动作脚本中全角逗号引发
SyntaxError,触发裁判熔断 - 搜索词未匹配积分活动商品,UI 无法定位
教训:自动化指令中严禁全角标点;测试选例需与当前环境商品配置对齐。
🐛 图片上传持久化问题修复(Cursor)
- 时间:12:04
- 项目:
e/code/ysbaiautotest
排查用例图片上传二次运行失败:DB 中附件名已动态变更(如 partImg_xxx.png),但用例脚本仍硬编码引用旧文件名 8.png。同时发现误用 Click 替代 Upload API。已推送修复。
📦 Electron 打包后 Python 插件丢失修复(Cursor)
- 时间:14:48
- 项目:
e/code/ysbaiautotest - 版本:v1.1.11 → v1.1.12
两个关键 Bug:
- 构建脚本遗漏:
prepare-python-bundle.cjs未将utils/目录打包,导致前置条件插件在打包版中消失。补全copyPreconditionUtilsSources()方法修复。 - 嵌入式 Python 路径陷阱:Windows 嵌入式 Python 的
._pth机制会完全忽略PYTHONPATH环境变量,加上cwd偏移导致ImportError。改用runpy执行 + 显式sys.path.append()修复。
核心教训:嵌入式 Python 环境变量不可靠,必须通过 sys.path.insert() 显式注册模块路径,且主进程和子脚本层均应保留兜底逻辑。
📱 APP 执行器替换为 Cursor 驱动 Appium MCP(Cursor)
- 时间:17:06
- 项目:
d/code/p0-smoke-cursor - 消息数:316
将 PhoneAgent 替换为 Cursor + Appium MCP 架构:
- 新建
appium_cursor_executor.py替代electron.py/PhoneAgent,保留APP_SMOKE_EXECUTOR=phone_agent回滚开关 - 修复 Windows
npx缓存竞争问题:改用本地预装(~1165 个包),MCP 配置直接指向本地 node 入口 - 开发三级弹窗拦截模块
app_popup_dismiss.py:白名单文案匹配 → 启发式 DOM 定位 →KEYCODE_BACK兜底
⚠️ API 凭据认证异常(多次会话)
多个会话出现 403 AccessDenied / 403 invalid api-key 错误,涉及模型 Qwen3.8-Max、Qwen3.7-Max、Qwen3.6-Plus 均无权限。最终降级至 qwen3.6-flash 恢复连通。累计约 8 个短会话用于排查此问题。
教训:配置层应采用主备模型降级策略,初始化阶段加入模型可用性探测与自动回退。
思考与备忘
- 步级裁判架构是今日最大产出:将冒烟测试从"整用例丢给 Agent"升级为"Skill 逐步规划 + 单步执行 + 逐帧判断"模式,显著提升调试效率和断言准确性。后续需合入主仓
runtime/分支。 - 嵌入式环境的路径管理是个深坑:Windows 嵌入式 Python 的
._pth机制完全绕过标准环境变量,这类平台差异问题在开发机上根本无法复现。需要在目标环境建立标准化的冒烟检查。 - 门禁 Auto Daemon 性能待验证:无人值守模式下每步需远程裁判决策,整体耗时必然上升,需压测并预留降级方案。
- API 凭据管理需要规范化:一天内 8 个会话浪费在凭据问题上,应建立自动化的密钥有效性巡检。
今日摘要
全天聚焦 APP 冒烟测试架构升级,完成从架构调研 → 步级裁判重构 → 执行器替换(Appium MCP)→ 周边工具链修复(TAPD 用例、图片上传、Electron 打包)的完整闭环。核心成果是 Skill 驱动的步级裁判系统,148 个测试零破坏回归。同时踩了嵌入式 Python 路径、全角标点熔断、npx 缓存竞争等多个硬核坑,均有完整修复方案落地。
📊 自动化统计
- 捕获 Memory 数:0(今日
memory/2026-08-03.md不存在) - 笔记更新数:0(note-gen-sync 下无最近修改的 .md 文件)
- Todoist 完成任务数:N/A(本次 cron 环境无 Todoist 工具访问权限)
- Claude Code 会话数:17(Claude 13 / Cursor 4,共 365 条消息)
- Claude Code 主会话消息数峰值:647(步级裁判重构)