Files
th-hotel-simple/docs/project/integrations/superagent-mcp/test-cases.md

5.8 KiB

TH Hotel SuperAgent MCP 联调测试用例

1. 文档信息

项目 内容
文档版本 0.1
日期 2026-07-09
状态 草案
适用范围 SuperAgent HTTP MCP endpoint 联调和回归测试

2. 测试前置条件

测试前应确认:

  • 后端 server/ 已部署并暴露 /mcp
  • SuperAgent 已拿到 MCP 层访问凭证。
  • 后端已配置 MCP_ENABLED=trueMCP_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 查询 hotel_id + group_code 返回成功 envelope
MCP-T01-002 按 confirmation 查询 hotel_id + confirmation_number 返回成功 envelope
MCP-T01-003 缺少查询 key 只有 hotel_id 返回 QUERY_KEY_REQUIRED
MCP-T01-004 缺少 hotel id 不传 hotel_id 返回 HOTEL_ID_REQUIRED

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_idsource_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 返回 HOTEL_ID_REQUIRED
MCP-T05-006 重复提交同一幂等任务 使用相同幂等信息 不重复创建业务任务

写入验证:

  • ai_task_results[] 顺序不能被 MCP endpoint 改变。
  • MCP endpoint 不能在日志输出完整 extracted_fields 中的敏感内容。
  • 失败响应应保留后端错误码和 message。

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 不丢失。
  • 任务结果写入成功和幂等重放正常。
  • provider/channel 隔离正常。
  • 受控正文不返回附件 URL。
  • MCP auth 失败不进入业务 Service。
  • REST HMAC 接口仍保持原有测试覆盖。