2026-05-30 赛博日记
生成时间:2026-05-30 23:58
📝 今日概要
完成 TAPD 用例同步功能修复,从本地 SQLite 迁移至 Web API,并实现标签同步与 Cookie 自动刷新机制。
🔍 核心技术进展
TAPD 用例同步架构迁移
- 问题定位:用例库已迁移至 Web API,但同步代码仍从本地 SQLite 读取,导致"本地用例不存在"错误
- 技术方案:
- Electron testcase.service.ts 改为通过 webTestDataApi.getTestcase / updateTestcase 读写
- 使用 metadata.tapd_case_uid 建立与 TAPD 的数字 UID 关联
- 从 TAPD 拉取后自动写入 tapd_case_uid 关联字段
- 来源:memory/2026-05-30.md、claude_2026-05-30.md
标签同步格式修复
- 硬核发现:TAPD API 的 Labels 字段不接受字符串展示名,必须使用标签库的数字 UID
- 错误格式:
{"Name": "已整理", "DisplayName": "已整理"}→ HTTP 200 但标签不落库 - 正确格式:
{"Name": "34451", "DisplayName": "已整理"}→ 标签正确同步
- 错误格式:
- 实现方案:
- 新增 tapd_browser/testx_api.py 中的 search_case_labels / resolve_labels_patch 方法
- 从 TAPD 标签库按 DisplayName 匹配本地标签名
- 推送前自动解析标签,不存在的标签跳过并给出警告
- 来源:memory/2026-05-30.md、claude_2026-05-30.md
Cookie 自动刷新与同步体验优化
- 自动刷新机制:
- 同步失败时检测 403、鉴权错误等疑似 Cookie 过期
- 自动执行 refresh_cookies.py 从本机 Chrome 读取
- 刷新成功后自动重试同步一次
- 用户体验改进:
- 同步过程全屏半透明遮罩 + 旋转 loading 动画
- 文案动态变化:“正在从 TAPD 拉取…” / “TAPD 凭证可能已过期,正在从 Chrome 刷新 Cookie…”
- 成功后提示"(已自动刷新 Cookie)"
- Cookie 有效期分析:
- 以最短字段为准:_wt 约 1~2 天,t_i_token 约 3 天,tapdsession 不定
- 建议每 1~2 天主动刷新一次,或同步失败时再刷新
- 来源:memory/2026-05-30.md、claude_2026-05-30.md
Cookie 存储性能与安全权衡
- 性能分析:
- 读取 cookies.txt(738 字节)耗时 < 1ms,瓶颈在网络请求(数百 ms~数秒)和 Chrome 刷新(秒级)
- 迁移至 config.json 不会带来可感知加速
- 架构决策:
- 继续使用 cookies.txt,职责清晰(登录凭证与界面设置分离)
- cookies.txt 已在 .gitignore,减少误提交风险
- 主进程内存缓存 Cookie 可略微优化,但体感差异不大
- 来源:memory/2026-05-30.md
💡 深度洞察与经验教训
洞察:API 格式陷阱 TAPD API 返回 HTTP 200 并不表示请求成功。Labels 字段即使返回 200,格式错误时数据不会落库,导致"静默失败"。需要结合实际返回数据验证,而不能只看 HTTP 状态码。
洞察:跨设备 Cookie 的不稳定性 浏览器 Cookie 是会话级凭证,不是为跨设备长期使用设计的。换设备后大概率不能直接用,与 IP、环境、WAF 安全头强相关。每台设备应各自维护 Cookie,不要指望云端统一分发作为长期方案。
教训:架构迁移的不彻底性 用例库迁移至 Web API 后,TAPD 同步代码仍走本地 SQLite,导致功能失效。迁移时应全面检查所有读写路径,不能只改主流程而忽略周边功能(如同步、导入导出)。
教训:自动重试的边界判断 同步失败时自动刷新 Cookie 需严格判断错误类型。403、鉴权错误可以刷新,但"用例不存在"“未关联 UID"等业务错误不应触发刷新,避免误操作。
🚀 未来行动设想
- 考虑在 Electron 设置中添加"同步前自动刷新 Cookie"选项,平衡自动化与手动控制
- 长期方向:后端集成 TAPD OAuth,Electron 只调自有 API,不再依赖浏览器 Cookie
- 标签同步失败时提供更详细的错误信息,显示哪些标签在 TAPD 标签库中不存在
📊 自动化统计
- 捕获 Memory 数:2 个(2026-05-30.md、claude_2026-05-30.md)
- 笔记更新数:0 个(note-gen-sync/ 最近 24 小时无修改)