test-analysis.md 21 KB

财顾报告Agent MVP 测试分析文档

分析依据:

  • 《财顾报告智能化生成产品MVP版本需求文档.md》
  • 《财顾报告Agent-技术架构与选型.md》
  • 《财顾报告生成智能体后端及算法端功能模块描述及其实现思路.md》

1. 测试范围与不测范围

1.1 测试范围

┌─────────────────────────────────────────────────────────────────────────────┐
│                            本期测试范围                                      │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  【功能测试】                                                                │
│   ├── 任务管理:创建、查询、状态流转                                        │
│   ├── 大纲生成:L1生成、L2生成、JSON结构化输出                              │
│   ├── 大纲确认:树状展示、勾选/取消、排序、确认持久化                        │
│   ├── 数据准备:多源数据获取(工商/指标/RAG)、数据聚合                       │
│   ├── 数据确认:展示、文本补录、确认持久化                                  │
│   ├── 报告生成:逐段生成、顺序拼接、完整报告                                │
│   └── 结果导出:DOCX格式导出                                                │
│                                                                             │
│  【接口测试】                                                                │
│   ├── Java后端API:任务/大纲/数据/报告接口                                  │
│   ├── Java→Python契约:大纲生成/段落生成接口                                │
│   └── Python→模型:OpenAI兼容接口                                           │
│                                                                             │
│  【集成测试】                                                                │
│   ├── 前端→Java→Python端到端链路                                            │
│   ├── Java→行内数据源(工商/指标)                                            │
│   ├── Python→模型集群                                                       │
│   └── Python→向量库(RAG)                                                    │
│                                                                             │
│  【非功能测试】                                                              │
│   ├── 性能测试:核心接口响应时间、生成任务吞吐量                            │
│   ├── 并发测试:多租户隔离、并发任务执行                                    │
│   └── 安全测试:鉴权、租户隔离、敏感数据脱敏                                │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

1.2 不测范围

模块 说明 原因
配置端功能 知识体系配置页面 本期不建设,后台预置实现
数据资源配置 接口参数在线配置 本期不建设,代码绑定实现
段落级重生成 单段内容重新生成 本期不纳入,预留扩展
富文本编辑 报告在线精细编辑 本期简化,仅查看导出
复杂协同 多人协作、审核流 本期不纳入
浏览器兼容性 IE等非现代浏览器 聚焦Chrome/Edge最新版
移动端适配 手机端页面 聚焦桌面端

2. 测试策略

2.1 测试金字塔

                    ▲
                   /  \
                  / E2E \              端到端测试 (10%)
                 / 测试  \              - 完整链路验证
                /─────────\             - 用户场景模拟
               /           \
              /   集成测试   \          集成测试 (30%)
             /               \          - 模块间接口
            /─────────────────\         - 外部系统集成
           /                   \
          /      单元测试        \       单元测试 (60%)
         /                       \       - 核心业务逻辑
        /─────────────────────────\      - 工具函数
       /                           \
      ─────────────────────────────

2.2 分阶段测试策略

阶段 测试类型 目标 执行时机
开发自测 单元测试 代码质量保障,快速反馈 开发过程中
联调测试 接口+集成测试 模块间协作正常 模块开发完成后
系统测试 功能+E2E测试 完整功能可用 联调完成后
回归测试 冒烟+核心流程 新改动不影响已有功能 每次合并前/发布后
验收测试 业务场景测试 满足业务需求 上线前

2.3 自动化策略

自动化优先级:
  P0(必须自动化):
    - 任务状态机流转
    - 大纲生成API契约
    - 租户隔离核心用例
    - 完整链路冒烟测试
  
  P1(建议自动化):
    - 数据准备多源聚合
    - 报告生成段落拼接
    - 导出功能
  
  P2(可手工):
    - UI交互细节
    - 复杂边界场景
    - 模型输出质量评估

自动化工具:
  Java单元测试: JUnit 5 + Mockito
  Python单元测试: pytest
  API测试: REST Assured / pytest-requests
  E2E测试: Playwright / Cypress

3. 核心测试用例矩阵

3.1 功能测试用例

TC-任务管理

用例ID 用例名称 前置条件 测试步骤 预期结果 优先级
TC-TASK-001 创建项目融资报告任务 已登录 1.选择项目融资
2.填写必填字段
3.提交
任务创建成功,返回taskId,状态=PENDING_OUTLINE P0
TC-TASK-002 创建资产管理报告任务 已登录 同上,选择资产管理 同上 P0
TC-TASK-003 创建并购重组报告任务 已登录 同上,选择并购重组 同上 P0
TC-TASK-004 必填字段缺失 已登录 不填写必填字段直接提交 返回明确错误提示,任务未创建 P0
TC-TASK-005 查询任务列表 存在任务 调用查询接口 返回租户下任务列表,分页正确 P1
TC-TASK-006 查询任务详情 任务存在 调用详情接口 返回完整任务信息,含当前状态 P0

TC-大纲生成

用例ID 用例名称 前置条件 测试步骤 预期结果 优先级
TC-OUT-001 生成一级大纲 任务已创建 调用L1生成接口 返回JSON,含chapter_results和overall_logic P0
TC-OUT-002 一级大纲JSON结构校验 - 验证返回JSON字段 字段完整,类型正确,无缺漏 P0
TC-OUT-003 协议金额约束验证 - 测试<50万、50-100万、100-500万、>=500万 各档位返回合理的paragraph_count_enum分布 P1
TC-OUT-004 生成二级大纲 L1已完成 调用L2生成接口 返回完整章节编号树 P0
TC-OUT-005 二级大纲批次展开 存在批次处理型章节 提供多个集团板块 按对象正确展开子章节 P0
TC-OUT-006 大纲生成超时处理 - 模拟模型超时 返回超时错误,状态不异常 P1
TC-OUT-007 大纲生成失败重试 - 模拟模型返回格式错误 触发重试,最终返回错误或成功 P1

TC-大纲确认

用例ID 用例名称 前置条件 测试步骤 预期结果 优先级
TC-CFM-001 确认默认选中 二级大纲已生成 不做调整直接确认 保存最终知识单元清单,状态推进 P0
TC-CFM-002 取消勾选知识单元 - 取消部分已勾选 确认结果不包含取消项 P0
TC-CFM-003 新增勾选知识单元 - 勾选未选中的 确认结果包含新增项 P0
TC-CFM-004 调整知识单元顺序 - 拖拽调整顺序 确认结果顺序正确 P1
TC-CFM-005 尝试新增未配置单元 - 尝试添加体系外单元 系统拒绝,给出提示 P0
TC-CFM-006 确认后状态推进 - 确认提交 状态变为PENDING_DATA_PREPARE P0

TC-数据准备

用例ID 用例名称 前置条件 测试步骤 预期结果 优先级
TC-DATA-001 获取工商数据 大纲已确认 调用数据准备 返回工商接口数据 P0
TC-DATA-002 获取指标平台数据 - - 返回指标数据 P0
TC-DATA-003 RAG召回 已上传材料 - 返回相关文本片段 P0
TC-DATA-004 多源数据聚合 - - 各知识单元数据正确组织 P0
TC-DATA-005 数据获取失败处理 接口故障 模拟接口失败 记录失败,可继续文本补录 P1
TC-DATA-006 文本补录 数据已获取 添加补录文本 补录内容与自动数据合并 P0

TC-报告生成

用例ID 用例名称 前置条件 测试步骤 预期结果 优先级
TC-GEN-001 单段生成 数据已确认 调用段落生成 返回段落文本,Token使用正常 P0
TC-GEN-002 整篇报告生成 - 执行完整生成 按顺序拼接所有段落 P0
TC-GEN-003 四类模板生成 - 分别测试四种模板类型 输出符合各自约束 P1
TC-GEN-004 单段生成失败 - 模拟模型失败 可重试或跳过,记录失败 P1
TC-GEN-005 生成进度展示 - 执行长报告生成 前端能看到进度更新 P1
TC-GEN-006 生成后状态 - 完成生成 状态变为COMPLETED P0

TC-结果导出

用例ID 用例名称 前置条件 测试步骤 预期结果 优先级
TC-EXP-001 在线查看报告 报告已生成 打开查看页面 正确显示章节段落结构 P0
TC-EXP-002 导出DOCX - 点击导出 下载DOCX文件,格式正确 P0
TC-EXP-003 大报告导出 报告很长 执行导出 异步处理,完成后通知 P1

3.2 接口测试用例

Java后端API

接口 方法 测试场景 预期结果
/api/v1/tasks POST 正常创建 201, 返回taskId
/api/v1/tasks POST 参数缺失 400, 错误信息明确
/api/v1/tasks POST 无权限 403
/api/v1/tasks/{id} GET 正常查询 200, 完整任务信息
/api/v1/tasks/{id} GET 跨租户访问 404/403
/api/v1/tasks/{id}/outline/l1 POST 触发一级生成 202, 异步处理
/api/v1/tasks/{id}/outline/confirm POST 确认大纲 200, 状态推进
/api/v1/tasks/{id}/data GET 获取数据 200, 按知识单元组织
/api/v1/tasks/{id}/data/confirm POST 确认数据 200, 状态推进
/api/v1/tasks/{id}/generate POST 触发生成 202, 异步处理
/api/v1/tasks/{id}/report GET 查看报告 200, 报告内容
/api/v1/tasks/{id}/export POST 导出报告 202/200, 文件下载

Java→Python契约

接口 测试重点 检查项
POST /v1/outline/l1 请求完整性 所有必需字段存在
响应格式 JSON结构符合契约
枚举值 paragraph_count_enum只能是P0-P4
POST /v1/outline/l2 批次展开 batch类型正确展开
章节编号 编号格式正确,连续无跳号
POST /v1/section 模板类型 四类模板正确路由
数据注入 占位符正确替换

4. 边界与异常场景

4.1 边界场景

场景 描述 预期行为
超大协议金额 >=500万,需要40-50段 系统正确处理,不超模型上下文
超多集团板块 10+业务板块需要批次展开 正确展开所有板块,编号连续
超长报告 50+知识单元 异步生成,进度可查询
空知识单元清单 用户取消所有章节 给出提示,无法进入下一阶段
全P0一级大纲 模型判断全部不呈现 给出提示,人工介入

4.2 异常场景

异常 触发条件 预期处理
模型调用超时 模型响应超过阈值 返回超时错误,可重试,状态不变
模型返回格式错误 JSON解析失败 重试3次,仍失败则返回错误
模型拒绝服务 429/503错误 指数退避重试,降级到备用模型
行内接口超时 工商/指标接口慢 超时后返回部分数据,可补录
行内接口故障 接口返回5xx 记录失败,继续其他数据源
数据库连接失败 数据库不可用 返回500,不丢失已生成数据
并发冲突 同一任务多操作 分布式锁保护,后操作被拒绝
跨租户访问 A租户访问B租户任务 404处理,日志记录

4.3 模型输出质量边界

# 模型输出质量检查点
def validate_model_output(output: str, expected_type: str) -> ValidationResult:
    checks = {
        "json_valid": is_valid_json(output),
        "schema_match": validate_json_schema(output, expected_type),
        "no_analysis_words": not contains_words(output, ["因此", "可以看出"]),  # 信息陈述型
        "no_comparison": not contains_words(output, ["更适合", "优于"]),  # 对象分析型
        "data_only": not contains_attribution(output),  # 指标数据描述型
        "no_new_decision": not contains_new_proposal(output),  # 综合判断型
    }
    return ValidationResult(passed=all(checks.values()), details=checks)

5. 非功能测试要点

5.1 性能测试

指标 目标值 测试方法
任务创建 <500ms JMeter 100并发
一级大纲生成 <30s 单用户,模型实际调用
二级大纲生成 <60s 单用户,多章节
单段生成 <30s 单用户,不同模板
整篇报告生成(30段) <5min 单用户,端到端
页面加载 <2s Lighthouse
并发任务数 10+ 10租户各1任务并行

5.2 并发与隔离测试

┌─────────────────────────────────────────────────────────────────────────────┐
│                       并发测试场景                                           │
├─────────────────────────────────────────────────────────────────────────────┤
│                                                                             │
│  场景1: 同租户并发                                                           │
│   ├── 同一用户同时创建多个任务                                               │
│   └── 预期: 各任务独立,状态不干扰                                           │
│                                                                             │
│  场景2: 多租户并发                                                           │
│   ├── 不同租户同时执行任务                                                   │
│   └── 预期: 数据严格隔离,无串扰                                             │
│                                                                             │
│  场景3: 同任务并发操作                                                       │
│   ├── 同一任务同时触发多次生成                                               │
│   └── 预期: 分布式锁保护,后操作被拒绝                                       │
│                                                                             │
│  场景4: 资源竞争                                                             │
│   ├── 多个任务同时请求Python服务                                             │
│   └── 预期: 队列处理或优雅降级                                               │
│                                                                             │
└─────────────────────────────────────────────────────────────────────────────┘

5.3 安全测试

测试项 测试方法 预期结果
未授权访问 不带Token访问API 401拒绝
Token过期 使用过期Token 401拒绝
跨租户访问 修改tenantId访问其他租户数据 404/403
SQL注入 输入SQL特殊字符 参数化查询,无注入
XSS 输入脚本标签 转义输出,无执行
敏感数据泄露 检查Python请求 脱敏字段不下传
OSS权限 直接访问OSS路径 需预签名URL

6. 质量风险与测试数据需求

6.1 质量风险

风险ID 风险描述 可能性 影响 缓解措施
QR-001 模型输出不稳定导致验收不通过 增加人工确认卡点,预留调优时间
QR-002 行内接口不稳定影响数据准备 Mock数据准备,降级策略
QR-003 多租户隔离缺陷导致数据泄露 极高 自动化测试覆盖,代码审查
QR-004 大报告生成超时影响用户体验 异步化+进度推送
QR-005 段落风格不一致影响报告质量 Prompt模板统一,业务验收
QR-006 RAG召回质量差导致生成错误 召回结果人工确认

6.2 测试数据需求

数据类型 数据内容 数量 来源
任务输入 不同协议金额、企业类型、行业类型的任务参数 20+ 手工构造
知识体系 项目融资类一级/二级章节结构 1套完整 业务提供
模拟工商数据 企业基本信息、股东信息 10条 Mock服务
模拟指标数据 财务指标、经营指标 10条 Mock服务
测试文档 PDF/Word上传材料 5份 业务提供
预期大纲 不同输入对应的预期大纲结构 10套 业务提供
模型输出样本 L1/L2/Section的模型原始输出 各20+ 实际调用收集

6.3 Mock服务

# Mock服务清单
mocks:
  行内数据源:
    - 工商接口: 返回企业基本信息、股东结构
    - 风险接口: 返回风险事件列表
    - 指标平台: 返回财务报表指标
  
  模型服务:
    - 正常响应: 按预期格式返回JSON
    - 超时响应: 延迟30秒后返回
    - 格式错误: 返回非JSON内容
    - 拒绝服务: 返回429/503
  
  OSS:
    - 本地MinIO模拟OSS服务

6.4 测试环境需求

环境 用途 配置
开发环境 开发自测 各开发者本地
测试环境 功能/集成测试 与生产同配置(缩容)
预发布环境 回归/验收测试 与生产同配置
压测环境 性能测试 与生产同配置

7. 测试交付物

交付物 说明 交付时间
测试计划 本文档 Sprint开始
测试用例 详细的测试用例文档(Excel/禅道) 开发完成前
自动化脚本 单元/接口/E2E自动化脚本 持续交付
测试报告 功能/性能/安全测试报告 上线前
缺陷报告 缺陷跟踪与修复验证 持续更新
验收报告 业务验收签字 上线前

文档版本:MVP阶段 最后更新:2026-03-31