#!/bin/bash # MCP服务器测试运行器 # 自动运行所有MCP服务器测试脚本 set -e # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # 测试目录 TEST_DIR="/root/mgmt/tests/mcp_servers" REPORT_FILE="/root/mgmt/tests/test_results_$(date +%Y%m%d_%H%M%S).md" # 检查测试目录是否存在 if [ ! -d "$TEST_DIR" ]; then echo -e "${RED}错误: 测试目录 $TEST_DIR 不存在${NC}" exit 1 fi # 创建测试报告头部 cat > "$REPORT_FILE" << EOF # MCP服务器测试报告 - $(date '+%Y-%m-%d %H:%M:%S') ## 测试环境 - 测试时间: $(date '+%Y-%m-%d %H:%M:%S') - 测试目录: $TEST_DIR - 测试类型: 自动化批量测试 ## 测试结果概览 EOF echo -e "${YELLOW}开始运行MCP服务器测试套件...${NC}" echo -e "${YELLOW}测试报告将保存到: $REPORT_FILE${NC}\n" # 测试计数器 TOTAL_TESTS=0 PASSED_TESTS=0 FAILED_TESTS=0 # 运行Shell脚本测试 echo -e "${YELLOW}运行Shell脚本测试...${NC}" for test_script in "$TEST_DIR"/*.sh; do if [ -f "$test_script" ]; then TEST_NAME=$(basename "$test_script") echo -e "${YELLOW}运行测试: $TEST_NAME${NC}" # 运行测试脚本 if bash "$test_script" >> "$REPORT_FILE" 2>&1; then echo -e "${GREEN}✅ $TEST_NAME 通过${NC}" echo "- ✅ $TEST_NAME: 通过" >> "$REPORT_FILE" ((PASSED_TESTS++)) else echo -e "${RED}❌ $TEST_NAME 失败${NC}" echo "- ❌ $TEST_NAME: 失败" >> "$REPORT_FILE" ((FAILED_TESTS++)) fi ((TOTAL_TESTS++)) echo fi done # 运行Python脚本测试 echo -e "${YELLOW}运行Python脚本测试...${NC}" for test_script in "$TEST_DIR"/*.py; do if [ -f "$test_script" ]; then TEST_NAME=$(basename "$test_script") echo -e "${YELLOW}运行测试: $TEST_NAME${NC}" # 运行Python测试 if python3 "$test_script" >> "$REPORT_FILE" 2>&1; then echo -e "${GREEN}✅ $TEST_NAME 通过${NC}" echo "- ✅ $TEST_NAME: 通过" >> "$REPORT_FILE" ((PASSED_TESTS++)) else echo -e "${RED}❌ $TEST_NAME 失败${NC}" echo "- ❌ $TEST_NAME: 失败" >> "$REPORT_FILE" ((FAILED_TESTS++)) fi ((TOTAL_TESTS++)) echo fi done # 更新测试报告 cat >> "$REPORT_FILE" << EOF ## 测试统计 - 总测试数: $TOTAL_TESTS - 通过测试: $PASSED_TESTS - 失败测试: $FAILED_TESTS - 通过率: $((PASSED_TESTS * 100 / TOTAL_TESTS))% ## 详细测试输出 EOF # 显示测试结果摘要 echo -e "\n${YELLOW}=== 测试完成 ===${NC}" echo -e "总测试数: $TOTAL_TESTS" echo -e "通过测试: ${GREEN}$PASSED_TESTS${NC}" echo -e "失败测试: ${RED}$FAILED_TESTS${NC}" echo -e "通过率: $((PASSED_TESTS * 100 / TOTAL_TESTS))%" echo -e "详细报告: $REPORT_FILE" # 如果所有测试都通过,返回成功 if [ $FAILED_TESTS -eq 0 ]; then echo -e "\n${GREEN}所有测试均通过!${NC}" exit 0 else echo -e "\n${RED}部分测试失败,请查看详细报告。${NC}" exit 1 fi