9.1 KiB
9.1 KiB
TH Hotel SuperAgent MCP 联调测试用例
1. 文档信息
| 项目 | 内容 |
|---|---|
| 文档版本 | 0.1 |
| 日期 | 2026-07-09 |
| 状态 | 草案 |
| 适用范围 | SuperAgent HTTP MCP endpoint 联调和回归测试 |
2. 测试前置条件
测试前应确认:
- 后端
server/已部署并暴露/mcp。 - SuperAgent 已拿到 MCP 层访问凭证。
- 后端已配置
MCP_ENABLED=true和MCP_AUTH_TOKEN。 - 后端
server/dev/test 环境可访问。 - 测试数据不包含真实客户隐私、生产 Token、附件 URL 或支付信息。
3. 工具发现测试
| 用例 ID | 场景 | 期望结果 |
|---|---|---|
| MCP-T00-001 | SuperAgent 连接 /mcp 并获取工具列表 |
能看到 5 个 TH Hotel tools |
| MCP-T00-002 | 未携带 MCP auth token | 返回 MCP 鉴权失败 |
| MCP-T00-003 | 使用错误 MCP auth token | 返回 MCP 鉴权失败,不调用后端 |
| MCP-T00-004 | 请求体不是合法 JSON | 返回 JSON-RPC parse error |
4. th_hotel_query_case_context
| 用例 ID | 场景 | 输入要点 | 期望结果 |
|---|---|---|---|
| MCP-T01-001 | 按 group code 查询 | group_code,hotel_id 可选 |
返回成功 envelope |
| MCP-T01-002 | 按 confirmation 查询 | confirmation_number,hotel_id 可选 |
返回成功 envelope |
| MCP-T01-003 | 缺少查询 key | 不传 group_code 和 confirmation_number |
返回 QUERY_KEY_REQUIRED |
| MCP-T01-004 | 缺省 hotel id | 不传 hotel_id,传 group_code |
后端按系统唯一 ACTIVE 酒店查询并返回成功 envelope |
| MCP-T01-005 | hotel id 不一致 | 传非系统酒店 hotel_id |
返回 HOTEL_ACCESS_DENIED 或 HOTEL_ID_MISMATCH |
5. th_hotel_query_object_detail
| 用例 ID | 场景 | 输入要点 | 期望结果 |
|---|---|---|---|
| MCP-T02-001 | 查询存在的订单对象 | object_id=ORDER:{order_id} |
返回对象详情 |
| MCP-T02-002 | 查询不存在对象 | 不存在的 object_id |
返回 OBJECT_NOT_FOUND |
| MCP-T02-003 | 缺少 object id | 只传 hotel_id |
返回请求参数错误 |
6. th_hotel_list_message_conversation_tasks
| 用例 ID | 场景 | 输入要点 | 期望结果 |
|---|---|---|---|
| MCP-T03-001 | 按外部会话 ID 查询任务 | external_conversation_id |
返回任务列表 |
| MCP-T03-002 | 按外部 source message id 锚点查询 | source_message_id |
返回该邮件所属会话任务 |
| MCP-T03-003 | 同 conversation id 不同 provider 隔离 | source_provider=AGENTBUS |
不返回其他 provider 的任务 |
| MCP-T03-004 | 会话不存在 | 不存在的 external_conversation_id |
返回 MESSAGE_CONVERSATION_NOT_FOUND |
| MCP-T03-005 | 缺少查询 key | 不传 external_conversation_id 和 source_message_id |
返回 MESSAGE_CONVERSATION_QUERY_KEY_REQUIRED |
排序验证:
- 任务先按邮件接收时间正序。
- 同一封邮件下按任务创建时间正序。
- 时间相同时按任务 ID 正序。
7. th_hotel_list_message_conversation_messages
| 用例 ID | 场景 | 输入要点 | 期望结果 |
|---|---|---|---|
| MCP-T04-001 | 按 source message id 查询邮件链正文 | source_message_id |
返回受控正文 |
| MCP-T04-002 | 按 external conversation id 查询邮件链正文 | external_conversation_id |
按接收时间正序返回正文 |
| MCP-T04-003 | 正文含图片和附件 URL | 测试 HTML 含 src/href |
响应不包含附件 URL 和图片 URL |
| MCP-T04-004 | 正文含原始 HTML | 后端有原文 HTML | 响应只包含 html_body_sanitized |
| MCP-T04-005 | 读取正文审计 | 调用正文工具 | 后端写入原文访问审计 |
禁止项验证:
- 响应不得包含
attachments。 - 响应不得包含
inline_images。 - 响应不得包含
external_url。 - 响应不得包含附件 URL。
- 响应不得包含原始未清洗 HTML。
8. th_hotel_submit_task_results
| 用例 ID | 场景 | 输入要点 | 期望结果 |
|---|---|---|---|
| MCP-T05-001 | 提交单个 normal task | ai_task_results 1 条 |
返回 accepted_count=1 |
| MCP-T05-002 | 提交 manual review | result_type=manual_review |
写入人工复核任务 |
| MCP-T05-003 | 提交 informational message | result_type=informational_message |
写入提示类信息 |
| MCP-T05-004 | source message 不存在 | 不存在的外部 source_message_id |
返回 SOURCE_MESSAGE_NOT_FOUND |
| MCP-T05-005 | 缺省 hotel id | 不传 hotel_id,source message 属于系统酒店 |
后端按系统唯一 ACTIVE 酒店写入成功 |
| MCP-T05-006 | 重复提交同一幂等任务 | 使用相同幂等信息 | 不重复创建业务任务 |
| MCP-T05-007 | hotel id 不一致 | 显式传非系统酒店 hotel_id |
返回 HOTEL_ID_MISMATCH |
| MCP-T05-008 | source message 入库渠道为 OUTLOOK | 不传 source_channel,只传外部 source_message_id |
后端按真实 Inbox 渠道写入成功 |
| MCP-T05-009 | source message 多渠道重复 | 同一酒店存在相同外部 source_message_id 的多条 Inbox |
返回 SOURCE_MESSAGE_AMBIGUOUS |
| MCP-T05-010 | V3 Parent split 使用 Agent 内部事件 ID | message_events[].source_event_index=E_CHILD_1/E_CHILD_2/E_PARENT |
MCP adapter 按数组顺序映射为 1/2/3,返回 accepted_count=3 |
| MCP-T05-011 | V3 缺失 source message id | source_message.source_message_id 缺失 |
返回既有 MISSING_SOURCE_MESSAGE_ID typed infrastructure error |
| MCP-T05-012 | V3 多事件关系悬空 | related_source_event_indices 引用不存在的事件 ID |
返回 MCP_SUBMIT_PAYLOAD_INVALID,不写 AI batch、订单或任务 |
| MCP-T05-013 | V3 多事件关系重复 | related_source_event_indices=["E_CHILD_1","E_CHILD_1"] |
返回 MCP_SUBMIT_PAYLOAD_INVALID,不写 AI batch、订单或任务 |
| MCP-T05-014 | V3 根节点未知字段 | 根节点存在 unexpected_root |
返回 MCP_SUBMIT_PAYLOAD_INVALID,不调用业务写入 Service |
| MCP-T05-015 | V3 跨 Child Trace | Trace event 关联全部 Child event | related_source_event_indices[] 保留全量关系并映射为真实索引,不压缩到第一个 Child |
| MCP-T05-016 | V3 缺失整个 source_message | 业务根或 S10/S99 没有 source_message |
返回既有 MISSING_SOURCE_MESSAGE_ID typed infrastructure error |
| MCP-T05-017 | V2 item 缺必填字段 | ai_task_results[] item 缺 task_type 等必填字段 |
返回 MCP_SUBMIT_PAYLOAD_INVALID,不调用业务写入 Service |
| MCP-T05-018 | V3 event 业务契约错误 | event_type unsupported 但 transport 字段完整 | MCP adapter 不整批拒绝,业务入站层保存 adapter_contract_error transition |
| MCP-T05-019 | V3 S10 入口通知 | route_code=S10 |
通过 MCP 写入只读 SOURCE_MESSAGE_ONLY 任务 |
| MCP-T05-020 | V3 S99 入口通知 | route_code=S99 且 manual_review 完整 |
通过 MCP 写入只读 SOURCE_MESSAGE_ONLY 任务 |
写入验证:
ai_task_results[]顺序不能被 MCP endpoint 改变。- V3
message_events[]顺序是source_event_index的唯一基准,MCP endpoint 不能重排。 E1/E2/E_PARENT等 Agent 内部事件 ID 只能由 MCP adapter 转换,不能作为本系统最终source_event_index。- MCP endpoint 不能在日志输出完整
extracted_fields中的敏感内容。 - 失败响应应保留后端错误码和 message。
- MCP adapter 校验失败时不进入业务写入 Service,且不自动重试。
- V3 成功响应返回
mapping_diagnostics.source_event_index_mapping[],但 AI transition 业务 payload 不包含该诊断字段。 - V3
relationship_type可在 event 根节点透传,也可在extracted_fields中作为业务关系字段;MCP adapter 不据此派生业务含义。
9. MCP 鉴权和开关测试
| 用例 ID | 场景 | 期望结果 |
| --- | --- |
| MCP-AUTH-001 | MCP_ENABLED=false | /mcp 不暴露或不可调用 |
| MCP-AUTH-002 | 未携带 Bearer token | 返回 MCP_AUTH_INVALID |
| MCP-AUTH-003 | Bearer token 错误 | 返回 MCP_AUTH_INVALID |
| MCP-AUTH-004 | MCP_ENABLE_SUBMIT_TASK_RESULTS=false | 写入 tool 返回 MCP_TOOL_DISABLED |
| MCP-AUTH-005 | 请求体超过 MCP_MAX_BODY_BYTES,默认 10MB | 返回 MCP_REQUEST_BODY_TOO_LARGE |
10. 协议和内部异常测试
| 用例 ID | 场景 | 期望结果 |
| --- | --- |
| MCP-PROTO-001 | 调用不存在的 MCP method | 返回 MCP_METHOD_NOT_FOUND |
| MCP-PROTO-002 | 调用不存在的 tool | 返回 MCP_TOOL_NOT_FOUND |
| MCP-PROTO-003 | tool arguments 不合法 | 返回 MCP_TOOL_ARGUMENTS_INVALID |
| MCP-PROTO-004 | 发送 notifications/initialized | 返回 202 空响应体 |
11. 回归测试清单
每次 MCP endpoint 或 REST 契约变更后,至少回归:
- 5 个工具均能被发现。
- 5 个工具正常成功调用。
- 查询接口错误 envelope 不丢失。
- 任务结果写入成功和幂等重放正常。
- V3 submit payload adapter 的事件索引映射、mapping 诊断、悬空关系拒绝、重复关系拒绝和未知字段拒绝正常。
- V2
ai_task_results[]item schema 和 adapter 校验正常。 - S10/S99 结构化入口通知可通过 MCP 写入工具。
- provider/channel 隔离正常。
- 受控正文不返回附件 URL。
- MCP auth 失败不进入业务 Service。
- REST HMAC 接口仍保持原有测试覆盖。