验证日期:2026-09-10。系统:Windows。Python:3.12.6。本次使用机器现有 Python 环境,未安装或修改全局依赖。requirements.txt 保留此前锁定版本;本次未重新安装该锁定环境,实际使用版本见下表。
在仓库根目录运行:
python -m pytest -q examples/test_main.py
41 passed in 21.89s
python -m pip check
No broken requirements found.
覆盖健康检查与 OpenAPI、商品 CRUD 与 Location、q/is_active 组合筛选、默认 10 条限制、名称与查询参数、PUT 四个字段必填、统一 404/422、请求头与环境变量、CORS、SSE 帧和特殊字符、WebSocket echo/ping/重连。
价格专门验证:省略时默认为 0;0、1990、2147483647 保持整数分;负数、小数、字符串、布尔值、null 与超出 INT 上限的值均返回 422。非法创建或替换后原商品保持不变。描述验证 16000 字符边界,过长描述不会写入。
HTTPX 使用 MockTransport 验证上游成功、读取超时 504、HTTP 失败 502、连接失败 502,并检查 lifespan 关闭共享客户端。上游故障测试不访问网络。
API 入门与 API + 数据库课件中的 4 组 ProductCreate 模型也已实际执行价格边界验证,涵盖完整替换缺失价格、PATCH 显式 null 拒绝。此 API 验证记录不覆盖数据库结构与集成实验。数据库商品表与分类表的新建结构和约束已另行通过 MySQL 8.4.11 验证,范围见根 README;ORM CRUD、迁移和故障演练未在本次运行,代码语法检查不能替代这些集成验证。
另外启动隐藏的 Uvicorn 子进程,绑定 localhost 的独立临时端口,通过真实 TCP 和 WebSocket 调用。验证结束后已关闭子进程。
| 核验 | 实测结果 |
|---|---|
| 健康检查、文档、商品创建 / 读取 / 替换 / 删除、Location、价格、is_active 筛选 | 通过 |
/private 正确密钥与漏传密钥 |
200 / 401 |
/generate 完整结果到达 |
请求开始后 1.216 秒 |
| 三个 SSE token 到达时间 | 请求开始后 0.418 / 0.821 / 1.225 秒 |
| 完整文本与 done 事件 | 准备导出商品清单:catalog。导出进度演示完成。,通过 |
| 客户端中途关流后健康检查 | 200 |
| 商品咨询文本的 WebSocket echo、ping、关闭连接 | 通过 |
同时请求四个 /slow?delay=1 |
全部 200,总耗时 1.019 秒 |
耗时是本次本机实测值,不是性能保证。SSE 到达时间来自真实 HTTP 流,未使用 TestClient 测量。导出接口只模拟进度文本,未生成实际清单文件;咨询接口只回显消息。
| 依赖 | 版本 |
|---|---|
| FastAPI | 0.115.0 |
| Pydantic | 2.10.2 |
| Starlette | 0.38.6 |
| Uvicorn | 0.32.1 |
| websockets | 16.1.1 |
| HTTPX | 0.28.1 |
| pytest | 8.4.2 |
| AnyIO | 4.6.2.post1 |
这些版本与 requirements.txt 的此前基线锁定版本不同;本记录只声明上面实际运行环境的结果。