- Implement 5 core API endpoints (create task, get progress, get results, update decision, export Excel) - Add FulltextScreeningController with Zod validation (652 lines) - Implement ExcelExporter service with 4-sheet report generation (352 lines) - Register routes under /api/v1/asl/fulltext-screening - Create 31 REST Client test cases - Add automated integration test script - Fix PDF extraction fallback mechanism in LLM12FieldsService - Update API design documentation to v3.0 - Update development plan to v1.2 - Create Day 5 development record - Clean up temporary test files
525 lines
13 KiB
Markdown
525 lines
13 KiB
Markdown
# Week 4 功能快速测试指南
|
||
|
||
> **测试日期:** 2025-11-21
|
||
> **功能模块:** 初筛结果页面
|
||
> **预计测试时间:** 10分钟
|
||
|
||
---
|
||
|
||
## 🚀 一、快速开始(3步)
|
||
|
||
### Step 1: 获取测试项目ID
|
||
```bash
|
||
cd backend
|
||
node scripts/get-test-projects.mjs
|
||
```
|
||
|
||
**输出示例**:
|
||
```
|
||
🎯 推荐测试项目(有筛选结果):
|
||
项目ID: 55941145-bba0-4b15-bda4-f0a398d78208
|
||
文献数: 7
|
||
筛选结果数: 7
|
||
```
|
||
|
||
### Step 2: 复制测试URL并访问
|
||
|
||
**方式1:通过审核工作台(推荐)**
|
||
```
|
||
http://localhost:3000/literature/screening/title/workbench?projectId=55941145-bba0-4b15-bda4-f0a398d78208
|
||
```
|
||
然后点击右上角的 **"查看结果统计"** 按钮
|
||
|
||
**方式2:直接访问结果页**
|
||
```
|
||
http://localhost:3000/literature/screening/title/results?projectId=55941145-bba0-4b15-bda4-f0a398d78208
|
||
```
|
||
|
||
### Step 3: 测试所有功能
|
||
见下方详细测试清单
|
||
|
||
---
|
||
|
||
## 📋 二、详细测试清单
|
||
|
||
### 2.1 统计概览卡片 ✅
|
||
|
||
**测试项**:
|
||
- [ ] 总数是否显示正确?(应该=7或199)
|
||
- [ ] 已纳入数量和百分比是否正确?
|
||
- [ ] 已排除数量和百分比是否正确?
|
||
- [ ] 待复核数量是否正确?
|
||
- [ ] 如果有冲突,是否显示冲突数量?
|
||
|
||
**预期效果**:
|
||
```
|
||
┌───────┐ ┌───────┐ ┌───────┐ ┌───────┐
|
||
│ 总数 │ │ 已纳入│ │ 已排除│ │ 待复核│
|
||
│ 7 │ │ 2 │ │ 5 │ │ 0 │
|
||
│ 篇 │ │ 28.6% │ │ 71.4% │ │ 0% │
|
||
└───────┘ └───────┘ └───────┘ └───────┘
|
||
```
|
||
|
||
---
|
||
|
||
### 2.2 待复核提示 ✅
|
||
|
||
**测试项**:
|
||
- [ ] 当有冲突时,是否显示黄色提示框?
|
||
- [ ] 提示文字是否准确?
|
||
- [ ] "前往复核"按钮能否正常跳转?
|
||
|
||
**预期效果**:
|
||
```
|
||
⚠️ 有文献需要人工复核
|
||
还有 2 篇文献存在模型判断冲突,建议前往"审核工作台"进行人工复核
|
||
[前往复核] 按钮
|
||
```
|
||
|
||
**测试方法**:
|
||
- 点击"前往复核"按钮,应该跳转到审核工作台
|
||
|
||
---
|
||
|
||
### 2.3 PRISMA排除分析 ✅
|
||
|
||
**测试项**:
|
||
- [ ] 是否显示排除原因统计?
|
||
- [ ] 原因分类是否正确?
|
||
- P不匹配(人群)
|
||
- I不匹配(干预)
|
||
- C不匹配(对照)
|
||
- S不匹配(研究设计)
|
||
- 其他原因
|
||
- [ ] 数量和百分比是否正确?
|
||
- [ ] 柱状图是否按比例显示?
|
||
|
||
**预期效果**:
|
||
```
|
||
排除原因分析(PRISMA)
|
||
────────────────────────────────
|
||
P不匹配(人群) ████████ 3篇 (60%)
|
||
I不匹配(干预) ████ 2篇 (40%)
|
||
```
|
||
|
||
---
|
||
|
||
### 2.4 结果列表(混合方案)⭐ 重点测试
|
||
|
||
**测试项**:
|
||
- [ ] Tab是否正常切换?
|
||
- 全部(7)
|
||
- 已纳入(2)
|
||
- 已排除(5)
|
||
- 待复核(0)
|
||
- [ ] 表格是否有以下列?
|
||
- 序号
|
||
- 文献标题(可点击)
|
||
- AI共识(显示DS和QW是否一致)
|
||
- 排除原因(纳入显示"-")
|
||
- 人工决策(标注推翻AI或与AI一致)
|
||
- 状态(4种状态)
|
||
- 操作
|
||
|
||
**重点检查:逻辑矛盾是否解决**
|
||
|
||
#### 场景1:人工推翻AI(最重要)
|
||
```
|
||
AI共识:⊗ 排除 (DS✓ QW✓)
|
||
人工决策:✅ 纳入 (推翻AI)
|
||
排除原因:- ← 应该是"-",不是"P不匹配"
|
||
状态:🟠 已复核-推翻AI
|
||
```
|
||
|
||
#### 场景2:与AI一致
|
||
```
|
||
AI共识:✅ 纳入 (DS✓ QW✓)
|
||
人工决策:✅ 纳入 (与AI一致)
|
||
排除原因:-
|
||
状态:✅ 已复核-与AI一致
|
||
```
|
||
|
||
#### 场景3:未复核-AI一致排除
|
||
```
|
||
AI共识:⊗ 排除 (DS✓ QW✓)
|
||
人工决策:未复核
|
||
排除原因:P不匹配(人群) ← 应该显示AI提取的原因
|
||
状态:⬜ 待复核-AI一致
|
||
```
|
||
|
||
#### 场景4:未复核-AI冲突
|
||
```
|
||
AI共识:⚠️ 冲突
|
||
DS:纳入
|
||
QW:排除
|
||
人工决策:未复核
|
||
排除原因:P不匹配(人群) ← 显示排除一方的原因
|
||
状态:⚠️ 待复核-有冲突
|
||
```
|
||
|
||
---
|
||
|
||
### 2.5 展开行详情 ✅
|
||
|
||
**测试项**:
|
||
- [ ] 点击文献标题,图标是否从📕变为📖?
|
||
- [ ] 是否显示DeepSeek完整分析?
|
||
- 决策和置信度
|
||
- P/I/C/S判断和证据
|
||
- 排除理由
|
||
- [ ] 是否显示Qwen完整分析?
|
||
- [ ] 如果已复核,是否显示人工复核信息?
|
||
- 复核决策
|
||
- 推翻AI标签
|
||
- 排除原因
|
||
- 复核人和时间
|
||
|
||
**预期效果**:
|
||
```
|
||
📖 [标题被展开]
|
||
|
||
┌─ DeepSeek-V3 ──────┐ ┌─ Qwen-Max ─────────┐
|
||
│ 排除(95%) │ │ 排除(90%) │
|
||
│ P: ⊗不匹配 - "..." │ │ P: ⊗不匹配 - "..." │
|
||
│ I: ✓匹配 │ │ I: ✓匹配 │
|
||
│ C: ✓匹配 │ │ C: ✓匹配 │
|
||
│ S: ✓匹配 │ │ S: ✓匹配 │
|
||
└────────────────────┘ └───────────────────┘
|
||
|
||
👨⚕️ 人工复核
|
||
复核决策:✅ 纳入 [推翻AI建议]
|
||
复核人:张医生 | 时间:2025-11-21 14:00
|
||
```
|
||
|
||
---
|
||
|
||
### 2.6 批量选择与导出 ✅
|
||
|
||
**测试项**:
|
||
- [ ] Checkbox是否可以多选?
|
||
- [ ] "全选"、"反选"按钮是否正常?
|
||
- [ ] 选中后,是否显示"导出选中 (N)"按钮?
|
||
- [ ] "导出统计摘要"是否正常?(2个Sheet)
|
||
- [ ] "导出初筛结果"是否正常?
|
||
- [ ] "导出选中项"是否正常?
|
||
|
||
**测试步骤**:
|
||
|
||
#### 测试1:导出统计摘要
|
||
1. 点击"导出统计摘要"按钮
|
||
2. 检查下载的Excel文件
|
||
3. 应该有2个Sheet:
|
||
- Sheet1:统计摘要(总数、纳入、排除等)
|
||
- Sheet2:排除原因分析
|
||
|
||
#### 测试2:导出初筛结果(当前Tab)
|
||
1. 切换到"已排除"Tab
|
||
2. 点击"导出初筛结果"按钮
|
||
3. 检查下载的Excel文件
|
||
4. 应该只包含已排除的文献(5篇)
|
||
5. 文件名应包含"_excluded"
|
||
|
||
#### 测试3:导出选中项
|
||
1. 在"全部"Tab中,勾选前3篇文献
|
||
2. 点击"导出选中 (3)"按钮
|
||
3. 检查下载的Excel文件
|
||
4. 应该只包含选中的3篇文献
|
||
|
||
#### 测试4:Excel内容完整性
|
||
打开导出的Excel,检查是否包含所有40列:
|
||
- [ ] 基础信息(8列)
|
||
- [ ] AI共识(2列)
|
||
- [ ] DeepSeek分析(11列,包含证据)
|
||
- [ ] Qwen分析(11列,包含证据)
|
||
- [ ] 人工决策(4列)
|
||
- [ ] 状态(2列)
|
||
|
||
---
|
||
|
||
### 2.7 页面导航 ✅
|
||
|
||
**测试项**:
|
||
- [ ] 在审核工作台,筛选完成后,是否显示"查看结果统计"按钮?
|
||
- [ ] 点击按钮能否正确跳转到结果页?
|
||
- [ ] projectId是否正确传递?
|
||
- [ ] 左侧导航的"初筛结果"能否正常点击?
|
||
|
||
---
|
||
|
||
## 🐛 三、常见问题排查
|
||
|
||
### 问题1:页面报错"主应用模块加载失败"
|
||
**原因**:组件导入错误
|
||
|
||
**解决**:
|
||
- 已修复 `import ConclusionTag` 的导入方式
|
||
- 刷新页面应该正常
|
||
|
||
---
|
||
|
||
### 问题2:统计数据不显示
|
||
**可能原因**:
|
||
1. projectId参数缺失
|
||
2. 后端API未启动
|
||
3. 项目无筛选结果
|
||
|
||
**排查方法**:
|
||
1. 检查URL是否包含 `?projectId=...`
|
||
2. 打开浏览器控制台,查看网络请求
|
||
3. 确认后端服务在运行(http://localhost:3001)
|
||
4. 使用 `get-test-projects.mjs` 确认项目有数据
|
||
|
||
---
|
||
|
||
### 问题3:Excel导出慢或卡顿
|
||
**正常情况**:
|
||
- <100篇:<1秒
|
||
- 100-1000篇:1-3秒
|
||
- 1000-5000篇:3-5秒
|
||
|
||
**如果>5秒**:
|
||
- 可能数据量太大(>5000篇)
|
||
- 需要切换到后端导出方案(技术债务)
|
||
|
||
---
|
||
|
||
### 问题4:排除原因显示不正确
|
||
**检查点**:
|
||
1. 如果最终决策是"纳入",排除原因应该显示"-"
|
||
2. 如果最终决策是"排除",应该显示原因
|
||
3. 如果是人工复核,应该优先显示人工填写的原因
|
||
4. 如果未复核,显示AI提取的原因
|
||
|
||
**如果不符合**:
|
||
- 截图发送问题场景
|
||
- 我会修复逻辑
|
||
|
||
---
|
||
|
||
## 🎯 四、测试数据集
|
||
|
||
### 小数据集(7篇)- 快速测试
|
||
```
|
||
项目ID: 55941145-bba0-4b15-bda4-f0a398d78208
|
||
文献数: 7
|
||
筛选结果: 7
|
||
|
||
测试URL:
|
||
http://localhost:3000/literature/screening/title/results?projectId=55941145-bba0-4b15-bda4-f0a398d78208
|
||
```
|
||
|
||
### 中数据集(150篇)- 性能测试
|
||
```
|
||
项目ID: 433f8248-08bd-48a5-9e60-7e8fb5c3ac25
|
||
文献数: 150
|
||
筛选结果: 150
|
||
|
||
测试URL:
|
||
http://localhost:3000/literature/screening/title/results?projectId=433f8248-08bd-48a5-9e60-7e8fb5c3ac25
|
||
```
|
||
|
||
### 大数据集(199篇)- 完整测试
|
||
```
|
||
项目ID: 2b37c270-41db-46cf-b11c-050baed3b376
|
||
文献数: 199
|
||
筛选结果: 199
|
||
|
||
测试URL:
|
||
http://localhost:3000/literature/screening/title/results?projectId=2b37c270-41db-46cf-b11c-050baed3b376
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ 五、预期测试结果
|
||
|
||
### 页面应该显示
|
||
|
||
1. **统计概览**:4个卡片(总数、已纳入、已排除、待复核)
|
||
2. **待复核提示**:如果有冲突,显示黄色Alert
|
||
3. **PRISMA排除分析**:柱状图显示各原因占比
|
||
4. **结果列表**:
|
||
- 4个Tab(全部/已纳入/已排除/待复核)
|
||
- 7列表格(序号、标题、AI共识、排除原因、人工决策、状态、操作)
|
||
- Checkbox多选
|
||
5. **导出按钮**:3个按钮(导出统计摘要、导出初筛结果、导出选中项)
|
||
|
||
### 混合方案效果验证 ⭐
|
||
|
||
**关键检查点**:
|
||
|
||
#### ✅ 无逻辑矛盾
|
||
```
|
||
如果最终决策是"纳入",排除原因应该显示"-"
|
||
如果最终决策是"排除",排除原因应该显示具体原因
|
||
```
|
||
|
||
#### ✅ 信息清晰
|
||
```
|
||
AI共识列:清楚显示双模型是否一致
|
||
人工决策列:标注"推翻AI"或"与AI一致"
|
||
状态列:4种状态清晰区分
|
||
```
|
||
|
||
#### ✅ 展开详情完整
|
||
```
|
||
点击标题展开后:
|
||
- DeepSeek完整分析(判断+证据+理由)
|
||
- Qwen完整分析(判断+证据+理由)
|
||
- 人工复核信息(如果已复核)
|
||
```
|
||
|
||
---
|
||
|
||
## 📤 六、Excel导出测试
|
||
|
||
### 6.1 导出统计摘要
|
||
|
||
**操作**:点击"导出统计摘要"按钮
|
||
|
||
**预期结果**:
|
||
- 文件名:`项目[ID]_统计摘要_2025-11-21.xlsx`
|
||
- Sheet1:统计摘要(6行数据)
|
||
- Sheet2:排除原因分析(N行,N=排除原因种类)
|
||
|
||
**检查点**:
|
||
- [ ] 文件名是否正确?
|
||
- [ ] 是否有2个Sheet?
|
||
- [ ] 统计数据是否准确?
|
||
|
||
---
|
||
|
||
### 6.2 导出初筛结果(当前Tab)
|
||
|
||
**操作**:
|
||
1. 切换到"已排除"Tab
|
||
2. 点击"导出初筛结果"按钮
|
||
|
||
**预期结果**:
|
||
- 文件名:`项目[ID]_excluded_2025-11-21.xlsx`
|
||
- 只包含已排除的文献
|
||
- 共40列信息
|
||
|
||
**检查点**:
|
||
- [ ] 文件名包含"_excluded"?
|
||
- [ ] 只包含已排除的文献?
|
||
- [ ] 是否有40列?
|
||
|
||
**40列清单**:
|
||
```
|
||
基础信息(8列):
|
||
1. 序号
|
||
2. 文献标题
|
||
3. 摘要
|
||
4. 作者
|
||
5. 期刊
|
||
6. 发表年份
|
||
7. PMID
|
||
8. DOI
|
||
|
||
AI共识(2列):
|
||
9. AI共识
|
||
10. AI是否一致
|
||
|
||
DeepSeek分析(11列):
|
||
11. DeepSeek决策
|
||
12. DeepSeek置信度
|
||
13-16. DeepSeek-P/I/C/S判断
|
||
17-20. DeepSeek-P/I/C/S证据
|
||
21. DeepSeek排除理由
|
||
|
||
Qwen分析(11列):
|
||
22. Qwen决策
|
||
23. Qwen置信度
|
||
24-27. Qwen-P/I/C/S判断
|
||
28-31. Qwen-P/I/C/S证据
|
||
32. Qwen排除理由
|
||
|
||
人工决策(4列):
|
||
33. 人工决策
|
||
34. 人工排除原因
|
||
35. 复核人
|
||
36. 复核时间
|
||
|
||
状态(2列):
|
||
37. 状态
|
||
38. 冲突状态
|
||
|
||
(实际可能更多列)
|
||
```
|
||
|
||
---
|
||
|
||
### 6.3 导出选中项
|
||
|
||
**操作**:
|
||
1. 在表格中勾选3篇文献
|
||
2. 点击"导出选中 (3)"按钮
|
||
|
||
**预期结果**:
|
||
- 文件名:`项目[ID]_选中_2025-11-21.xlsx`
|
||
- 只包含选中的3篇文献
|
||
- 信息完整(40列)
|
||
|
||
**检查点**:
|
||
- [ ] 文件名包含"_选中"?
|
||
- [ ] 只有3篇文献?
|
||
- [ ] 信息是否完整?
|
||
|
||
---
|
||
|
||
## 🎨 七、UI/UX验证
|
||
|
||
### 7.1 视觉效果
|
||
- [ ] 统计卡片是否美观?
|
||
- [ ] 柱状图是否清晰?
|
||
- [ ] 表格列宽是否合适?
|
||
- [ ] Tag颜色是否区分明显?
|
||
- 绿色:纳入/已复核-与AI一致
|
||
- 灰色:排除/待复核-AI一致
|
||
- 橙色:已复核-推翻AI
|
||
- 黄色:待复核-有冲突
|
||
|
||
### 7.2 交互体验
|
||
- [ ] 点击文献标题能否流畅展开?
|
||
- [ ] Checkbox选择是否流畅?
|
||
- [ ] Tab切换是否有延迟?
|
||
- [ ] 导出Excel是否有进度提示?
|
||
|
||
### 7.3 信息清晰度 ⭐ 重点
|
||
- [ ] 能否一眼看出是AI决策还是人工决策?
|
||
- [ ] 能否清楚知道是否推翻了AI建议?
|
||
- [ ] 排除原因是否符合逻辑(纳入不显示原因)?
|
||
- [ ] 状态标签是否容易理解?
|
||
|
||
---
|
||
|
||
## 🚨 八、已知限制
|
||
|
||
### 8.1 Excel导出限制
|
||
- **当前方案**:前端生成,适用<5000条
|
||
- **如果卡顿**:需切换到后端导出+OSS(技术债务)
|
||
|
||
### 8.2 统计性能
|
||
- **当前性能**:199篇约200ms
|
||
- **如果>1000篇**:可能需要缓存优化
|
||
|
||
---
|
||
|
||
## 📞 九、反馈方式
|
||
|
||
测试中发现任何问题,请反馈:
|
||
|
||
1. **截图**:显示问题的具体界面
|
||
2. **描述**:问题的具体表现
|
||
3. **数据**:使用的projectId
|
||
4. **浏览器**:控制台错误信息(按F12查看)
|
||
|
||
---
|
||
|
||
**测试愉快!** 🎉
|
||
|
||
|
||
|
||
|
||
|