本页面涵盖了 MCP 客户端在不同传输机制下的测试策略和实用工具。它记录了用于验证客户端功能、传输层行为和错误处理场景的测试模式。
有关 MCP 服务器测试的信息,请参阅服务器测试。有关测试中使用的模拟服务器实现,请参阅模拟服务器实现。
MCP Go SDK 提供了全面的测试实用工具,用于验证客户端在多个传输层上的行为。测试架构将传输层测试与高级客户端测试分开,支持单元测试和集成测试方法。
来源: client/sse_test.go1-334 client/stdio_test.go1-308 client/transport/stdio_test.go1-488
为了测试 SSE 和 HTTP 传输,SDK 使用 server.NewTestServer 创建一个具有预定义功能和工具的测试服务器
测试服务器设置包括
WithResourceCapabilities(true, true))WithPromptCapabilities(true))WithToolCapabilities(true))对于 stdio 传输测试,会动态编译一个模拟服务器二进制文件
编译过程处理平台特定要求,并创建一个用于测试的临时二进制文件。
来源: client/stdio_test.go18-59 client/transport/stdio_test.go17-58
SSE 客户端测试侧重于
关键测试模式包括
| 测试用例 | 目的 | 关键断言 |
|---|---|---|
“可以创建客户端” | 验证客户端实例化 | 传输基本 URL 不为空 |
“可以初始化并发出请求” | 完整的请求生命周期 | 服务器信息、ping、工具操作 |
“使用自定义标头调用工具” | 标头处理 | 来自标头的上下文值 |
“正确处理错误” | 错误条件 | 初始化前请求失败 |
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
GetStderr 函数支持从基于 stdio 的服务器捕获日志
来源: client/stdio_test.go64-86 client/stdio_test.go290-306
测试用例始终使用基于上下文的超时管理
5 * time.Second200 * time.Millisecond来源: client/sse_test.go97-98 client/stdio_test.go89-90 client/transport/stdio_test.go129-147
SSE 传输通过 WithHeaders 和 WithHeaderFunc 选项支持自定义标头注入
来源: client/sse_test.go282-332 client/sse_test.go68-73
这种测试方法确保自定义标头在请求管道中正确流动,并在服务器端工具处理程序中可访问。