2026-07-06 赛博日记
生成时间:2026-07-06 23:58
📝 今日概要
自动化测试大面积失败并完成系统性修复:Android 端口泄漏、PC Token 失效、隐私弹窗用例稳定性问题全部解决,代码已合并到 main 分支。
🔍 核心技术进展
Android 自动化测试修复
- 端口泄漏根因定位(来源:Claude Code 会话)
- 失败截图新建 session 且从不 quit() → 每次失败泄漏一个 82xx 端口
- Appium 服务停止不清理 adb forward → 端口永久占用
- 未配置固定 systemPort → 完全依赖 8200–8299 自动分配
- 全局 capabilities 被原地修改 →
noReset=True污染后续用例
- 修复措施(来源:memory/2026-07-06.md + claude 会话)
- 修改
conftest.py:失败截图改为 try/finally 确保 quit() keep_loginfixture 改为 yield + finally: driver.quit()- 新增
cleanup_adb_forwards()函数,session 开始/结束时清理 adb forward create_android_driver使用 dict 副本避免污染全局- 新增
check_adb_device_ready()预检设备授权状态 - 调整 session 超时配置:35 → 120 秒
- 修改
Android 环境切换机制调研(来源:Claude Code 会话)
- 两层环境含义
- 脚本层:
run.bat的ENV=TEST只标记跑哪套用例、DB 回写、报告归档 - App 层:通过
change_app_environment()在登录前置用例中 UI 切换环境
- 脚本层:
- 切换流程
- 进入「我的消息」
- 连点右上角 9 次打开隐藏调试入口
- 再进「我的消息」→ 点关于我们 Logo
- 选择目标环境文案
activate_app重启 App 使配置生效
- 后续用例保持环境
- 登录用例用
android_driver_factory(清数据重装) - 后续用例用
android_driver_keep_login(noReset=True)
- 登录用例用
PC Token 失效排查(来源:Claude Code 会话 + memory)
- 现象
- 134 条用例仅 33 通过,101 失败 + 29 错误
- 大批量失败截图在登录页
- 错误信息:
AssertionError: 无法正常进入页面
- 根因
- 硬编码 Token 过期(测试服 Token 会失效)
- 跑机残留
TOKEN环境变量(调试时写入 Windows 用户变量)
- 解决
- 清 Windows 用户变量
TOKEN - 换有效 token 并单条用例验证
- 清 Windows 用户变量
隐私弹窗用例稳定性加固(来源:Claude Code 会话)
- 问题
check_protocol固定 sleep 10 秒 → session 空闲期间可能被--session-override清掉check_dialog超时仅 2 秒 → 批量跑时 UI 更慢易失败- session 中途失效 →
InvalidSessionIdException
- 修复
check_protocol去掉 sleep,改为主动等待弹窗check_dialog超时从 2 → 10 秒- 每条用例结束后 force-stop UiAutomator2
- 创建 driver 失败重试 1 次
InvalidSessionId等错误跳过失败截图
✅ 今日待办完成
(Todoist 工具不可用,暂无记录)
💡 深度洞察与经验教训
洞察
- 资源泄漏的隐蔽性:端口泄漏不是"业务需要 100 个并发进程",而是多次跑测累积的
adb forward未清理 - 两步验证的重要性:本地 MCP 探索 + pytest 验证能区分"UI 改版"和"环境不稳定"
- session 生命周期:
with上下文能保证正常结束时的 quit(),但异常中断、强杀、fixture 已建 driver 但用例未进with等场景仍会泄漏
教训
- 失败截图是高危操作:失败时再建 session 必须保证
driver.quit(),否则端口永久泄漏 adb kill-server的副作用:清端口时会重置 USB 调试信任关系,需重新在手机上授权- 全局配置污染:
default_option = ANDROID_CAPABILITIES直接修改会永久改全局 dict,应用dict()副本 - Appium 服务停止不等于清理:
appium_service.stop()不会移除adb forward,需手动执行adb forward --remove-all - PC Token 硬编码陷阱:测试服 Token 会过期,需定期更新或改用动态获取
🚀 未来行动设想
- 恢复 PC 动态登录取 Token(避免硬编码过期)
- 固定
systemPort或 session 级递增,便于排查 - 跑机首次跑测前执行
adb kill-server && adb start-server确保端口清空 - 考虑将 Todoist 任务同步到 memory,实现更完整的记录
📊 自动化统计
- 捕获 Memory 数:1 条
- Claude Code 工作记录:183 条消息
- 笔记更新数:0 条(其他 .md 文件不在最近 24 小时修改)
- Todoist 完成任务数:0(工具不可用)