# 晨风书屋测试报告

> 应用版本：V2.3.0<br>
> 备份 schema：2.2.0<br>
> 日期：2026-07-12<br>
> 结论：服务器数据同步、批量修正、补封面、条件备份、兼容性与桌面/手机浏览器验收均纳入自动化门禁

## 1. 测试范围

本轮覆盖旧版数据兼容、服务器数据事务、书架位置并发保护、分类分批核对、服务器封面查询与事务保存、L9 标签跨设备同步、22:00 条件备份、手机摄像头扫码流程、移动端完整操作、深浅双主题、管理员认证和服务器端 DeepSeek 代理。写入型自动化测试使用本地临时 SQLite，不修改生产数据库。

## 2. 自动化结果

| 检查 | 结果 | 覆盖内容 |
|:---|:---|:---|
| JavaScript 数据兼容测试 | 通过 | V1 CSV、V2 JSON、IndexedDB 包装、ISBN-10/13 checksum |
| Flask API 测试 | 14/14 通过 | 认证、导入快照、失败回滚、位置约束、批量重排、封面事务、L9 标签、服务器封面源、DeepSeek |
| Python 编译检查 | 通过 | Blueprint 与本地隔离测试服务 |
| 页面内联 JavaScript 语法 | 通过 | 两段内联脚本通过 `node --check` |
| Shell 与恢复测试 | 通过 | 发布脚本、整站备份、条件备份首次创建/无变化跳过/变化创建/解压恢复 |
| Playwright 浏览器测试 | 6/6 通过 | 登录、真实旧数据、分类与封面持久化、L9 标签、移动布局、扫码与降级 |

## 3. 真实旧版备份回归

本地通过环境变量选择桌面旧名备份，真实数据不写入仓库：

```text
文件：晨风书舍_2026-07-12.csv
SHA-256：ee28b121e8166b52be9d2ad44fbe14a140b935744d5d9d9ae2a156cf6dec4a36
记录数：912
```

验证结果：

- 管理员登录后可选择旧 CSV。
- 页面预检识别 912 条，全部位置有效。
- 本地临时 SQLite 成功导入 912 条。
- 导出按钮实际产生 schema 2.2.0 JSON 下载，包含 912 本书和服务器收藏标签。
- 测试结束后临时数据库自动销毁，没有导入生产。

## 4. 手机扫码回归

Playwright 模拟原生 `BarcodeDetector`、后置摄像头媒体流和有效 ISBN `9780306406157`：

1. 扫码后自动填充 ISBN、书名、作者、出版社和 CLC。
2. 页面显示“请核对信息后点击确认录入”。
3. 用户点击确认前，`POST /api/home-library/books` 调用次数为 0。
4. 识别完成后摄像头轨道调用 `stop()`。
5. 首次保存模拟 `location_conflict`，页面刷新服务器数据并只重试一次。
6. 第二次请求返回服务器正式 `id`，总藏书数增加 1，表单清空。
7. 浏览器不支持 `BarcodeDetector` 时显示明确提示，并保留手工 ISBN 输入。

## 5. 移动端与主题

在 390 x 844 视口验证：

- 访客只能浏览、搜索和统计；登录管理员后导出、录入和扫码入口可操作。
- 错误管理员密码保持锁定且不写入 `sessionStorage`，正确密码经服务器确认后才显示管理功能。
- 服务器新增/删除测试书后刷新页面分别显示最新数量，书目 API 返回 `Cache-Control: no-store`。
- 管理员工具区可横向滑动访问完整功能。
- 录入弹窗不超过视口，字段可滚动，底部确认按钮可见。
- 无 ISBN 题名搜索进入人工确认状态，不启动自动保存倒计时。
- 浅色/深色主题切换后刷新页面仍保持选择。
- 两种主题的三级文字与卡片背景对比度均不低于 4.5:1。
- 顶部不再显示“已用层”和“每层 15 本”，footer 显示“晨风书屋 v2.3.0”。
- 左上角不显示容易被误解为扫描枪状态的“已连接”，顶部右侧明确显示网站服务器状态，footer 只保留固定信息。
- 1440 x 900 浅色桌面和 390 x 844 深色手机截图检查无重叠或裁切。

## 6. 仍需实体设备验证

以下项目不能由浏览器模拟替代，部署前或灰度阶段必须实测：

- Android Chrome 与 iPhone Safari 的实际摄像头权限、对焦速度和弱光识别率。
- 生产 HTTPS 下 `BarcodeDetector` 的浏览器覆盖；不支持的 iPhone/Safari 将按设计降级为手动输入，后续是否引入扫码库需基于实体测试决定。
- 连续扫描 20 本以上时的发热、耗电、相机释放和网络失败恢复。
- 两台真实设备同时录入同一分类时的 409 提示与最终书架位置。
- 线上国图、豆瓣及备用书目源的实时可用率与响应耗时。
- 已安装服务器 DeepSeek Key 后的代表性分类质量、额度消耗、超时和长期稳定性。

## 7. 发布门禁

发布必须继续执行本地优先、服务器备份和隔离同步。正式脚本在发布前生成最新 SQLite 一致性快照并记录数量，发布后重新执行完整性检查；藏书总数低于发布前基线时拒绝通过。生产部署后的在线认证和数据数量结果记录在根部署日志中。

每天 22:00 的条件任务计算书目和服务器设置的逻辑指纹。测试证明：首次运行创建备份，第二次无数据变化不产生归档，修改书目后创建新归档；归档 SHA-256、数据库 SHA-256、`PRAGMA integrity_check` 和恢复后记录内容均通过。
