README
🚀 MCP协议自动化测试工具
mcp-autotest 是专门用于测试 MCP 协议实现的自动化测试工具。MCP 协议作为模型上下文交互的通信协议,该工具能助力开发者快速验证服务是否契合 MCP 协议规范。
🚀 快速开始
安装与运行
MCP 协议(Model Context Protocol)是一种用于模型上下文交互的通信协议。mcp-autotest 是一个专为测试 MCP 协议实现而设计的自动化测试工具,能够帮助开发者快速验证其服务是否符合 MCP 协议规范。
📦 安装指南
1. 安装工具
npx mcp-autotest
💻 使用示例
基础用法
2. 创建测试用例
编辑 testdata 文件夹中的 YAML 测试文件:
case: List tools
in_list_tools: {"jsonrpc":"2.0","method":"tools/list","id":1}
out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!re "list-[a-z]+" } ]},"id":1}
3. 执行测试
运行以下命令启动测试:
npx mcp-autotest run testdata -- npx -y @modelcontextprotocol/server-postgres localhost:5432
高级用法
动态匹配
在某些情况下,您可能需要处理动态值(如时间戳或 UUID),此时可以使用正则表达式进行匹配。工具支持两种模式:
-
全量正则表达式: 使用
!!re标签将整个字符串视为正则表达式。out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!re "list-[a-z]+" } ]},"id":1} -
嵌入式正则表达式: 使用
!!ere标签在字符串中嵌入正则表达式片段。out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!ere "list-/[a-z]+/-tool" } ]},"id":1}
注意事项:
- 除正则表达式部分外,其余字符需转义为实际值(使用
\\)。 - 正则表达式匹配不区分大小写。
测试 PostgreSQL 服务
请参考项目中的 PostgreSQL 示例,了解如何编写针对具体服务的测试用例。
输出示例
2025/03/31 22:23:39 实际 JSON 与期望不匹配,
得到:'{"id":1,"jsonrpc":"2.0","result":{"tools":[{"description":"Run a read-only SQL query","inputSchema":{"properties":{"sql":{"type":"string"}},"type":"object"},"name":"query"}]}}'
与预期比较:
"result": {
"tools": {
"0": {
"description": {
^ 字符串值不匹配,
期望字符串:'Run a read-only SQL query 2',
实际字符串:'Run a read-only SQL query'
测试失败
动态匹配示例
假设工具返回的描述字段为动态值,您可以使用以下方式编写测试用例:
case: List tools
in_list_tools: {"jsonrpc":"2.0","method":"tools/list","id":1}
out_list_tools: {"jsonrpc":"2.0","result":{"tools":[ { "name": !!ere "list-/[a-z]+/-tool" } ]},"id":1}
此示例中:
"list-"和"-tool"为固定字符串。/[a-z]+/是嵌入的正则表达式,匹配任意小写字母序列。
这样可以避免因版本号等动态值导致测试失败的问题。
总结
mcp-autotest 是一个功能强大的自动化测试工具,能够帮助开发者高效验证 MCP 协议实现。通过灵活的配置和正则表达式支持,您可以轻松应对各种场景下的测试需求。
Scan to join WeChat group