# 功能测试与逻辑验证参考 基于实际项目总结的测试模式和验证清单。 ## 关键测试矩阵 ### 多租户隔离测试 (P0) ```python # ============================================ # 来源: test_quality_detail.py — 真实项目必测项 # ============================================ class TestMultiUserIsolation: """验证用户 A 看不到用户 B 的数据""" async def test_multi_user_isolation(self, session): # Arrange: 创建两个用户及各自的数据 user_a = await create_user(session, "user_a") user_b = await create_user(session, "user_b") conv_a = await create_conversation(session, user_a.id, "用户A的对话") conv_b = await create_conversation(session, user_b.id, "用户B的对话") # Act: 用户 A 查询数据 result_a = await get_quality_detail(session, user_id=user_a.id) # Assert: 只返回用户 A 的数据 assert all(r.user_id == user_a.id for r in result_a) assert conv_b.id not in [r.conversation_id for r in result_a] ``` ### 集成测试: 定时任务生命周期 ```python # ============================================ # 来源: test_golden_lifecycle.py — 验证生命周期 job 实际效果 # ============================================ class TestGoldenLifecycleIntegration: """验证低转化率示例被 job 实际停用""" async def test_low_conversion_deactivation(self, session): # Arrange: 创建低转化率的 golden example example = await create_golden_example(session, conversion_rate=0.01) # Act: 执行生命周期 job with patch('app.services.get_async_session', return_value=session): await golden_lifecycle_job() # Assert: 示例被停用 await session.refresh(example) assert example.is_active is False ``` ### 服务层集成测试: 质量门控 ```python # ============================================ # 来源: test_quality_gate.py — 验证 LLM 质量评分写入 # ============================================ class TestQualityGateIntegration: """验证低质量 LLM 回复被正确标记""" async def test_low_quality_flagged(self, session): # Arrange: Mock LLM 返回低质量回复 with patch('app.llm.qwen_client.chat', return_value="不知道"): message = await handle_new_message(session, conversation_id, "你好") # Assert: quality_score 和 quality_flagged 正确写入 assert message.quality_score < 0.5 assert message.quality_flagged is True ``` ## 前端功能测试清单 ```markdown ### UI 交互测试 - [ ] 按钮防抖: 评分/提交/删除按钮是否有 loading 态防止双击重复提交 - [ ] 空态处理: 列表为空时是否显示友好的空态页面 - [ ] 加载态: 数据请求时是否显示 Skeleton/Spinner - [ ] 错误态: API 失败时是否有错误提示和重试机制 - [ ] 响应式: 移动端/平板/桌面端布局是否正确 ### 数据完整性 - [ ] 分页加载: 翻页后数据是否正确,是否有重复 - [ ] 筛选条件: 筛选后分页是否重置到第 1 页 - [ ] 表单验证: 必填字段、格式校验、长度限制 - [ ] 国际化: i18n 键是否全部存在,无 missing key 警告 ### 浏览器兼容性 - [ ] 缓存策略: Service Worker 缓存是否正确更新 - [ ] PWA: 离线页面是否正常显示 - [ ] Console: 无 JS 错误、无 unhandled promise rejection ``` ## API 逻辑验证清单 ```markdown ### 数据流完整性 - [ ] 创建 → 读取: 创建的数据能被正确查询 - [ ] 更新 → 刷新: 更新后 UI 是否同步反映 - [ ] 删除 → 清理: 删除后关联数据是否级联清理 - [ ] 并发 → 一致: 多个请求同时操作是否产生数据不一致 ### 业务规则验证 - [ ] 权限边界: 普通用户无法访问管理接口 - [ ] 状态机: 状态转换是否合法(如 pending → processing → completed) - [ ] 计算逻辑: 统计数据、费用计算、分页总数是否正确 - [ ] 时区处理: 时间戳是否统一使用 UTC 或固定时区(CST) ```