import asyncio
import time
from mcp_center.servers.oe_cli_mcp_server.client.client import MCPClient
CLIENT_NUM = 10
PRESSURE_TIME = 600
MCP_URL = "http://0.0.0.0:12555/sse"
MCP_HEADERS = {}
TOOL_PARAMS = {"info_types": ["cpu", "mem", "disk", "os"]}
async def init_single_client(client_id):
"""初始化1个客户端并返回实例"""
try:
client = MCPClient(MCP_URL, MCP_HEADERS)
await client.init()
print(f"客户端{client_id} 初始化成功")
return client
except Exception as e:
print(f"客户端{client_id} 初始化失败:{e}")
return None
async def single_client_pressure(client_id, client):
"""1个客户端持续压测,直到达到时长"""
if not client:
return
start_time = time.time()
req_count = 0
print(f"客户端{client_id} 开始压测")
while time.time() - start_time < PRESSURE_TIME:
try:
await client.call_tool("sys_info_tool", TOOL_PARAMS)
req_count += 1
except Exception as e:
print(f"客户端{client_id} 请求失败:{e}")
print(f"客户端{client_id} 压测结束,总请求数:{req_count}")
async def main():
print(f"开始初始化 {CLIENT_NUM} 个客户端...")
clients = []
for i in range(1, CLIENT_NUM + 1):
client = await init_single_client(i)
if client:
clients.append((i, client))
if len(clients) < CLIENT_NUM:
print(f"仅 {len(clients)} 个客户端初始化成功,开始压测...")
else:
print(f"{CLIENT_NUM} 个客户端全部初始化成功,开始压测(持续{int(PRESSURE_TIME/60)}分钟)...")
pressure_tasks = []
for client_id, client in clients:
task = asyncio.create_task(single_client_pressure(client_id, client))
pressure_tasks.append(task)
await asyncio.gather(*pressure_tasks)
print("所有客户端压测结束!")
if __name__ == "__main__":
asyncio.run(main())