Skip to main content
Glama

MemOS-MCP

by qinshu1109
Apache 2.0
3
  • Linux
  • Apple
test_official_api.py15.4 kB
""" MemOS官方API测试脚本 全面测试API功能、性能和错误处理 """ import asyncio import time import json import requests from typing import Dict, Any, List from datetime import datetime class MemOSAPITester: """MemOS API测试器""" def __init__(self, base_url: str = "http://localhost:8000"): self.base_url = base_url self.headers = { "Content-Type": "application/json", "Accept": "application/json" } self.test_results = [] def log_test(self, test_name: str, success: bool, message: str, duration: float = 0): """记录测试结果""" result = { "test_name": test_name, "success": success, "message": message, "duration": duration, "timestamp": datetime.now().isoformat() } self.test_results.append(result) status = "✅" if success else "❌" print(f"{status} {test_name}: {message} ({duration:.3f}s)") def test_health_check(self) -> bool: """测试健康检查""" start_time = time.time() try: response = requests.get(f"{self.base_url}/health", headers=self.headers, timeout=10) duration = time.time() - start_time if response.status_code == 200: data = response.json() if data.get("success"): self.log_test("健康检查", True, f"系统状态: {data['data']['api_status']}", duration) return True else: self.log_test("健康检查", False, f"API返回失败: {data.get('message')}", duration) return False else: self.log_test("健康检查", False, f"HTTP错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("健康检查", False, f"请求异常: {str(e)}", duration) return False def test_system_status(self) -> bool: """测试系统状态""" start_time = time.time() try: response = requests.get(f"{self.base_url}/status", headers=self.headers, timeout=10) duration = time.time() - start_time if response.status_code == 200: data = response.json() if data.get("success"): status_data = data["data"] self.log_test("系统状态", True, f"模式: {status_data['mode']}, 模型: {status_data['model']}", duration) return True else: self.log_test("系统状态", False, f"获取失败: {data.get('message')}", duration) return False else: self.log_test("系统状态", False, f"HTTP错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("系统状态", False, f"请求异常: {str(e)}", duration) return False def test_create_memory(self) -> str: """测试创建记忆""" start_time = time.time() try: test_content = f"这是API测试记忆 - {datetime.now().strftime('%H:%M:%S')}" data = { "content": test_content, "tags": ["API测试", "自动化"], "metadata": {"test_type": "api_test"} } response = requests.post( f"{self.base_url}/memories", headers=self.headers, json=data, timeout=30 ) duration = time.time() - start_time if response.status_code == 200: result = response.json() if result.get("success"): self.log_test("创建记忆", True, f"记忆已创建: {result['data']['content_preview']}", duration) return test_content else: self.log_test("创建记忆", False, f"创建失败: {result.get('message')}", duration) return "" else: self.log_test("创建记忆", False, f"HTTP错误: {response.status_code}", duration) return "" except Exception as e: duration = time.time() - start_time self.log_test("创建记忆", False, f"请求异常: {str(e)}", duration) return "" def test_search_memory(self, query: str) -> List[Dict[str, Any]]: """测试搜索记忆""" start_time = time.time() try: data = { "query": query, "top_k": 5, "use_reranker": True, "use_feedback_boost": True } response = requests.post( f"{self.base_url}/memories/search", headers=self.headers, json=data, timeout=30 ) duration = time.time() - start_time if response.status_code == 200: result = response.json() if result.get("success"): results = result["data"]["results"] self.log_test("搜索记忆", True, f"找到 {len(results)} 条记忆", duration) return results else: self.log_test("搜索记忆", False, f"搜索失败: {result.get('message')}", duration) return [] else: self.log_test("搜索记忆", False, f"HTTP错误: {response.status_code}", duration) return [] except Exception as e: duration = time.time() - start_time self.log_test("搜索记忆", False, f"请求异常: {str(e)}", duration) return [] def test_memory_feedback(self, memory_id: str) -> bool: """测试记忆反馈""" start_time = time.time() try: data = { "memory_id": memory_id, "feedback_type": "thumbs_up" } response = requests.post( f"{self.base_url}/memories/feedback", headers=self.headers, json=data, timeout=10 ) duration = time.time() - start_time if response.status_code == 200: result = response.json() if result.get("success"): self.log_test("记忆反馈", True, f"反馈已保存: {result['data']['feedback_emoji']}", duration) return True else: self.log_test("记忆反馈", False, f"反馈失败: {result.get('message')}", duration) return False else: self.log_test("记忆反馈", False, f"HTTP错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("记忆反馈", False, f"请求异常: {str(e)}", duration) return False def test_performance_metrics(self) -> bool: """测试性能指标""" start_time = time.time() try: response = requests.get(f"{self.base_url}/metrics", headers=self.headers, timeout=10) duration = time.time() - start_time if response.status_code == 200: data = response.json() if data.get("success"): metrics = data["data"] self.log_test("性能指标", True, f"添加时间: {metrics['memory_add_avg_time']:.3f}s, " f"检索时间: {metrics['memory_search_avg_time']:.3f}s", duration) return True else: self.log_test("性能指标", False, f"获取失败: {data.get('message')}", duration) return False else: self.log_test("性能指标", False, f"HTTP错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("性能指标", False, f"请求异常: {str(e)}", duration) return False def test_capacity_report(self) -> bool: """测试容量报告""" start_time = time.time() try: response = requests.get(f"{self.base_url}/capacity/report", headers=self.headers, timeout=10) duration = time.time() - start_time if response.status_code == 200: data = response.json() if data.get("success"): report = data["data"] health = report.get("system_health", "unknown") self.log_test("容量报告", True, f"系统健康: {health}", duration) return True else: self.log_test("容量报告", False, f"获取失败: {data.get('message')}", duration) return False else: self.log_test("容量报告", False, f"HTTP错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("容量报告", False, f"请求异常: {str(e)}", duration) return False def test_system_optimization(self) -> bool: """测试系统优化""" start_time = time.time() try: response = requests.post(f"{self.base_url}/system/optimize", headers=self.headers, timeout=30) duration = time.time() - start_time if response.status_code == 200: data = response.json() if data.get("success"): self.log_test("系统优化", True, "优化完成", duration) return True else: self.log_test("系统优化", False, f"优化失败: {data.get('message')}", duration) return False else: self.log_test("系统优化", False, f"HTTP错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("系统优化", False, f"请求异常: {str(e)}", duration) return False def test_error_handling(self) -> bool: """测试错误处理""" start_time = time.time() try: # 测试无效的记忆创建请求 invalid_data = {"invalid_field": "test"} response = requests.post( f"{self.base_url}/memories", headers=self.headers, json=invalid_data, timeout=10 ) duration = time.time() - start_time if response.status_code == 422: # 验证错误 self.log_test("错误处理", True, "正确处理了验证错误", duration) return True else: self.log_test("错误处理", False, f"未正确处理错误: {response.status_code}", duration) return False except Exception as e: duration = time.time() - start_time self.log_test("错误处理", False, f"请求异常: {str(e)}", duration) return False def run_comprehensive_test(self) -> Dict[str, Any]: """运行综合测试""" print("🚀 开始MemOS官方API综合测试") print("=" * 60) total_start_time = time.time() # 基础功能测试 print("\n📋 基础功能测试:") health_ok = self.test_health_check() status_ok = self.test_system_status() # 记忆管理测试 print("\n🧠 记忆管理测试:") test_content = self.test_create_memory() search_results = [] if test_content: search_results = self.test_search_memory("API测试") # 反馈机制测试 print("\n👍 反馈机制测试:") feedback_ok = False if search_results: memory_id = search_results[0]["memory"]["id"] feedback_ok = self.test_memory_feedback(memory_id) # 性能监控测试 print("\n📊 性能监控测试:") metrics_ok = self.test_performance_metrics() capacity_ok = self.test_capacity_report() # 系统优化测试 print("\n⚡ 系统优化测试:") optimization_ok = self.test_system_optimization() # 错误处理测试 print("\n❌ 错误处理测试:") error_handling_ok = self.test_error_handling() total_duration = time.time() - total_start_time # 统计结果 passed_tests = sum(1 for result in self.test_results if result["success"]) total_tests = len(self.test_results) success_rate = (passed_tests / total_tests) * 100 if total_tests > 0 else 0 summary = { "total_tests": total_tests, "passed_tests": passed_tests, "failed_tests": total_tests - passed_tests, "success_rate": success_rate, "total_duration": total_duration, "test_results": self.test_results } print("\n" + "=" * 60) print("📊 测试结果汇总:") print(f" 总测试数: {total_tests}") print(f" 通过测试: {passed_tests}") print(f" 失败测试: {total_tests - passed_tests}") print(f" 成功率: {success_rate:.1f}%") print(f" 总耗时: {total_duration:.3f}s") if success_rate >= 80: print("✅ API测试整体通过!") else: print("❌ API测试存在问题,请检查失败的测试项") return summary def save_test_report(self, summary: Dict[str, Any], filename: str = "api_test_report.json"): """保存测试报告""" with open(filename, 'w', encoding='utf-8') as f: json.dump(summary, f, indent=2, ensure_ascii=False) print(f"\n📄 测试报告已保存到: {filename}") if __name__ == "__main__": # 运行API测试 tester = MemOSAPITester() try: summary = tester.run_comprehensive_test() tester.save_test_report(summary) except KeyboardInterrupt: print("\n\n⏹️ 测试被用户中断") except Exception as e: print(f"\n❌ 测试过程中发生错误: {e}") import traceback traceback.print_exc()

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/qinshu1109/memos-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server