2026年6月17日 赛博日记

生成时间:2026-06-17 23:58

📝 今日概要

完成测试计划跨工作区自动执行功能的全栈实现,解决Prisma迁移阻塞问题,同时完成Python环境依赖修复和Cursor工具链探索。

🔍 核心技术进展

测试计划应用类型功能开发(来源:memory/2026-06-17.md)

  • 数据层:给TestPlan表新增appType字段(APP/PC),通过migration同步到生产库
  • 执行链路:通过升级全局pendingScheduledExecution结构(增加appType/source/autoStart字段),实现定时任务和手动跨端的统一接力机制
  • 工作区切换:抽取共享函数switchWorkspaceTo(mode, {page}),支持执行前自动切换到对应端
  • 防重复触发:在TestPlanView组件级加pendingConsuming锁,避免onMounted/onActivated/watch三处同时触发pending
  • 表单与标签:创建/编辑表单加APP/PC选择器,列表和详情页加标签展示

Python环境依赖修复(来源:memory/claude_2026-06-17.md)

  • psycopg2缺失:解决venv中ImportError: No module named ‘psycopg2’问题,通过安装psycopg2-binary解决Windows编译依赖
  • webdriver-manager缺失:解决PC端测试ImportError: No module named ‘webdriver_manager’问题
  • 依赖清单补全:将缺失依赖补入requirements.txt(UTF-16编码,用Python脚本写入防止损坏)

Cursor工具链探索(来源:memory/claude_2026-06-17.md)

  • Appium MCP配置:在Cursor项目中安装并配置appium-mcp(v1.85.7),支持真机UI探索与自动化脚本生成
  • 标准流程:连接Appium → 启动Settings → 创建会话 → 探索页面(appium_get_page_source) → 解析resource-id/xpath → 生成脚本 → pytest验证

测试用例数据库化(来源:memory/2026-06-17.md)

  • 迁移方案:将637条UI自动化用例从CSV迁移至PostgreSQL,放弃CSV更新提高并发安全性
  • 表设计:新建ui_auto_test_case表存储用例元信息(平台、环境、模块、函数名、中文名、执行结果),ui_auto_test_failure_record表保留失败历史(含日志、截图)

💡 深度洞察与经验教训

洞察: 跨工作区执行的核心在于"执行前workspaceMode对齐",而非改造执行链路。现有执行链路(前端startExecutePlan的5处判断 + 主进程handlers.ts根据workspaceMode选择electron.py/web_electron.py)已稳定,只需在执行前把workspaceMode对齐到计划的app_type,下游全部自动复用,几乎不用改执行逻辑。

教训

  • Python依赖管理:新增代码模块时必须同步更新requirements.txt,否则重建venv后会因依赖缺失而崩溃。建议先用"全端依赖完整性校验"扫描实际import的第三方包,与requirements.txt对比,一次性补齐。
  • Appium Server启动优化:在Windows上同时安装xcuitest(iOS)和uiautomator2(Android)driver会导致Appium启动卡在iOS driver加载,建议用–use-drivers=uiautomator2限制加载范围,启动时间从>20秒降至0.068秒。
  • MCP配置陷阱:Cursor在Windows上不能用.cmd作为MCP命令,需用node.exe绝对路径直接启动;npx可能因权限问题失败,建议本地安装包。
  • Marker扫描误判:在解析@pytest.mark.test_only等装饰器时,用"函数前后1000字符"窗口会导致相邻函数的marker串扰,应只读取函数正上方的装饰器。

🚀 未来行动设想

  • 将"连接Appium → 探索页面 → 生成脚本"流程封装为固定Skill,支持自然语言触发(如"生成安卓自动化脚本:搜索感冒灵")
  • 新建ui_auto_test_failure_record表,保留每次失败的历史记录(含日志、截图),支持误报标记与解决状态管理
  • iOS测试在Mac上执行时需确保能访问PostgreSQL(xxx.xxx.xxx.xxx),否则TestResultUpdater初始化会失败
  • PC端Chrome路径写死会导致"session not created",建议增加自动检测(%LOCALAPPDATA%\Google\Chrome\Application\chrome.exe)

📊 自动化统计

  • 捕获Memory数:2个(2026-06-17.md + claude_2026-06-17.md)
  • 笔记更新数:0个(note-gen-sync/ 目录最近24小时无修改)