菜单

客户端测试

相关源文件

本页面涵盖了 MCP 客户端在不同传输机制下的测试策略和实用工具。它记录了用于验证客户端功能、传输层行为和错误处理场景的测试模式。

有关 MCP 服务器测试的信息,请参阅服务器测试。有关测试中使用的模拟服务器实现,请参阅模拟服务器实现

测试架构概述

MCP Go SDK 提供了全面的测试实用工具,用于验证客户端在多个传输层上的行为。测试架构将传输层测试与高级客户端测试分开,支持单元测试和集成测试方法。

来源: client/sse_test.go1-334 client/stdio_test.go1-308 client/transport/stdio_test.go1-488

测试服务器设置模式

HTTP/SSE 测试服务器设置

为了测试 SSE 和 HTTP 传输,SDK 使用 server.NewTestServer 创建一个具有预定义功能和工具的测试服务器

测试服务器设置包括

  • 资源能力 (WithResourceCapabilities(true, true))
  • 提示能力 (WithPromptCapabilities(true))
  • 工具能力 (WithToolCapabilities(true))
  • 用于标头处理的自定义上下文函数

来源: client/sse_test.go22-75

Stdio 测试服务器设置

对于 stdio 传输测试,会动态编译一个模拟服务器二进制文件

编译过程处理平台特定要求,并创建一个用于测试的临时二进制文件。

来源: client/stdio_test.go18-59 client/transport/stdio_test.go17-58

特定传输测试

SSE 传输测试

SSE 客户端测试侧重于

  • 客户端创建和配置
  • 请求/响应生命周期
  • 自定义标头处理
  • 错误条件处理

关键测试模式包括

测试用例目的关键断言
“可以创建客户端”验证客户端实例化传输基本 URL 不为空
“可以初始化并发出请求”完整的请求生命周期服务器信息、ping、工具操作
“使用自定义标头调用工具”标头处理来自标头的上下文值
“正确处理错误”错误条件初始化前请求失败

来源: client/sse_test.go77-333

Stdio 传输测试

Stdio 传输测试涵盖高级客户端操作和低级传输行为

来源: client/stdio_test.go88-307 client/transport/stdio_test.go72-487

通用测试模式

请求/响应验证

测试框架验证 JSON-RPC 消息的完整性

来源: client/transport/stdio_test.go76-127 client/transport/stdio_test.go326-383

错误条件测试

全面的错误测试涵盖

错误类型测试场景预期行为
预初始化Initialize() 之前发出请求返回错误
无效命令不存在的可执行文件启动失败
上下文取消已取消的上下文context.Canceled 错误
关闭后的请求Close() 之后发出请求连接错误
服务器错误无效方法调用JSON-RPC 错误响应

来源: client/sse_test.go196-216 client/transport/stdio_test.go386-487

并发测试

测试套件验证并发请求处理

来源: client/transport/stdio_test.go199-287

测试实用工具和辅助函数

Stdio 客户端的日志捕获

GetStderr 函数支持从基于 stdio 的服务器捕获日志

来源: client/stdio_test.go64-86 client/stdio_test.go290-306

上下文和超时管理

测试用例始终使用基于上下文的超时管理

  • 标准超时:大多数操作为 5 * time.Second
  • 短超时:错误条件测试为 200 * time.Millisecond
  • 上下文取消测试,用于处理中断的请求

来源: client/sse_test.go97-98 client/stdio_test.go89-90 client/transport/stdio_test.go129-147

自定义配置测试

标头自定义

SSE 传输通过 WithHeadersWithHeaderFunc 选项支持自定义标头注入

来源: client/sse_test.go282-332 client/sse_test.go68-73

这种测试方法确保自定义标头在请求管道中正确流动,并在服务器端工具处理程序中可访问。