Skip to main content
Glama

Mnemosyne MCP

by MumuTW
test_sprint3_demo.py7.12 kB
""" Sprint 3 端到端 Demo 測試 驗證混合檢索和影響力分析的完整工作流程。 """ import time class TestSprint3Demo: """Sprint 3 Demo 測試類別""" def test_demo_1_hybrid_search_workflow(self): """Demo 1: 混合檢索展示""" print("\n=== Demo 1: 混合檢索展示 ===") # 模擬搜索查詢 query = "authentication login function" print(f"🔍 搜索查詢: '{query}'") # 模擬搜索執行 start_time = time.time() search_result = self._simulate_hybrid_search(query) end_time = time.time() search_time_ms = (end_time - start_time) * 1000 # 驗證搜索結果 assert len(search_result["relevant_nodes"]) > 0 assert search_time_ms < 500 print(f"✅ 找到 {len(search_result['relevant_nodes'])} 個相關節點") print(f"📊 摘要: {search_result['summary']}") print(f"💡 建議下一步: {search_result['suggested_next_step']}") print(f"⚡ 搜索時間: {search_time_ms:.2f}ms (< 500ms SLA)") print("✅ Demo 1 完成:混合檢索功能正常運作\n") def test_demo_2_impact_analysis_workflow(self): """Demo 2: 影響力分析展示""" print("\n=== Demo 2: 影響力分析展示 ===") # 模擬影響力分析 function_name = "login" print(f"🔬 分析函數: '{function_name}'") # 模擬分析執行 start_time = time.time() impact_result = self._simulate_impact_analysis(function_name) end_time = time.time() analysis_time_ms = (end_time - start_time) * 1000 # 驗證分析結果 assert impact_result["function_name"] == function_name assert analysis_time_ms < 500 print(f"📋 分析摘要: {impact_result['summary']}") print(f"⚠️ 風險等級: {impact_result['risk_level']}") print(f"👥 影響節點數: {impact_result['impact_nodes_count']}") print(f"📞 呼叫者數量: {impact_result['callers_count']}") print(f"🔗 依賴數量: {impact_result['dependencies_count']}") print(f"📊 風險評分: {impact_result['risk_score']:.2f}") print(f"⚡ 分析時間: {analysis_time_ms:.2f}ms (< 500ms SLA)") print("✅ Demo 2 完成:影響力分析功能正常運作\n") def test_demo_3_end_to_end_workflow(self): """Demo 3: 端到端工作流程展示""" print("\n=== Demo 3: 端到端工作流程展示 ===") # 場景:開發者想要修改 login 函數 print("📝 場景:開發者計劃修改 login 函數") # 步驟1:搜索相關函數 print("\n🔍 步驟1:搜索相關的認證函數") search_result = self._simulate_hybrid_search("authentication login security") print(f" 找到 {len(search_result['relevant_nodes'])} 個相關函數") # 步驟2:分析修改影響 print("\n🔬 步驟2:分析修改 login 函數的影響") impact_result = self._simulate_impact_analysis("login") print(f" 風險等級: {impact_result['risk_level']}") # 步驟3:基於分析結果提供建議 print("\n💡 步驟3:基於分析結果的建議") recommendations = self._generate_recommendations(impact_result["risk_level"]) for rec in recommendations: print(f" - {rec}") # 步驟4:驗證整體性能 print("\n⚡ 步驟4:性能驗證") total_time = search_result["time_ms"] + impact_result["time_ms"] print(f" 總執行時間: {total_time:.2f}ms") # 驗證 assert total_time < 1000 assert len(recommendations) > 0 print("\n✅ Demo 3 完成:端到端工作流程驗證成功") print("🎉 Sprint 3 所有核心功能都正常運作!") def test_demo_4_performance_validation(self): """Demo 4: 性能驗證展示""" print("\n=== Demo 4: 性能驗證展示 ===") # 測試多個並發請求 print("🚀 測試並發性能...") start_time = time.time() # 模擬並發請求 search_results = [] impact_results = [] for i in range(3): search_results.append(self._simulate_hybrid_search(f"test query {i}")) impact_results.append(self._simulate_impact_analysis(f"test_function_{i}")) end_time = time.time() total_time_ms = (end_time - start_time) * 1000 print(f" 並發執行時間: {total_time_ms:.2f}ms") print(f" 搜索請求: {len(search_results)} 個成功") print(f" 分析請求: {len(impact_results)} 個成功") # 驗證並發性能 assert total_time_ms < 1000 assert len(search_results) == 3 assert len(impact_results) == 3 print("✅ 並發性能測試通過") print("✅ Demo 4 完成:性能驗證成功") def _simulate_hybrid_search(self, query): """模擬混合搜索""" time.sleep(0.08) # 模擬 80ms 搜索時間 return { "relevant_nodes": [ {"node_id": "func1", "type": "Function", "name": "login"}, {"node_id": "func2", "type": "Function", "name": "authenticate"}, {"node_id": "file1", "type": "File", "name": "auth.py"}, ], "summary": f"Found 3 relevant code elements for query: {query}", "suggested_next_step": "Review the function implementations and their relationships", "time_ms": 80.0, } def _simulate_impact_analysis(self, function_name): """模擬影響力分析""" time.sleep(0.07) # 模擬 70ms 分析時間 callers_count = 5 dependencies_count = 3 risk_score = 0.4 return { "function_name": function_name, "summary": f"Function '{function_name}' has {callers_count} callers and {dependencies_count} dependencies. Risk level: MEDIUM", "risk_level": "MEDIUM", "impact_nodes_count": callers_count + dependencies_count, "callers_count": callers_count, "dependencies_count": dependencies_count, "risk_score": risk_score, "time_ms": 70.0, } def _generate_recommendations(self, risk_level): """生成建議""" base_recommendations = ["執行完整的單元測試", "監控部署後的系統行為"] if risk_level == "HIGH": return [ "⚠️ 高風險變更,建議:", "建立全面的單元測試", "執行完整的整合測試", "考慮分階段部署", ] + base_recommendations elif risk_level == "MEDIUM": return [ "⚡ 中等風險變更,建議:", "檢查所有呼叫者函數", "確保向後相容性", "執行回歸測試", ] + base_recommendations else: return ["✅ 低風險變更,建議:"] + base_recommendations

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/MumuTW/Mnemosyne-mcp'

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