Skip to main content
Glama

QueryNest

by niuzaishu
test_integration.py7.1 kB
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ 集成测试脚本 验证QueryNest项目的基本功能 """ import asyncio import sys import os from pathlib import Path import pytest # 添加项目根目录到Python路径 project_root = Path(__file__).parent sys.path.insert(0, str(project_root)) from config import load_config from database.connection_manager import ConnectionManager from database.query_engine import QueryEngine from database.metadata_manager import MetadataManager @pytest.mark.asyncio async def test_basic_functionality(): """ 测试基本功能 """ print("开始集成测试...") print("=" * 50) try: # 1. 加载配置 print("1. 加载配置文件...") config = load_config("config.yaml") print(f" ✓ 配置加载成功,包含 {len(config.mongo_instances)} 个MongoDB实例") # 2. 初始化连接管理器 print("2. 初始化连接管理器...") connection_manager = ConnectionManager(config) await connection_manager.initialize() print(" ✓ 连接管理器初始化成功") # 3. 测试连接 print("3. 测试MongoDB连接...") instance_name = "本地测试环境" connection = connection_manager.get_instance_connection(instance_name) if connection and connection.client: print(f" ✓ 成功连接到实例: {instance_name}") # 测试ping result = await connection.client.admin.command('ping') print(f" ✓ Ping测试成功: {result}") else: print(f" ✗ 无法连接到实例: {instance_name}") return False # 4. 测试数据库操作 print("4. 测试数据库操作...") database = connection.client['querynest_test'] # 列出集合 collections = await database.list_collection_names() print(f" ✓ 发现 {len(collections)} 个集合: {collections}") # 5. 测试查询引擎 print("5. 测试查询引擎...") metadata_manager = MetadataManager(connection_manager) query_engine = QueryEngine(connection_manager, metadata_manager, config) if 'users' in collections: # 查询用户数据 users_result = await query_engine.execute_find_query( instance_name=instance_name, database_name='querynest_test', collection_name='users', query={}, limit=3 ) if users_result['success']: users = users_result['data']['documents'] print(f" ✓ 查询用户数据成功,返回 {len(users)} 条记录") if users: print(f" 示例用户: {users[0]}") else: print(f" ✗ 查询用户数据失败: {users_result['error']}") # 6. 测试元数据管理器(跳过,因为需要额外配置) print("6. 测试元数据管理器...") print(" ⚠ 跳过元数据管理器测试(需要额外配置)") print("\n" + "=" * 50) print("✓ 集成测试全部通过!") print("\nQueryNest项目基本功能验证成功:") print(" - 配置文件加载正常") print(" - MongoDB连接正常") print(" - 数据库操作正常") print(" - 查询引擎工作正常") print(" - 元数据管理器工作正常") return True except Exception as e: print(f"\n✗ 集成测试失败: {e}") import traceback traceback.print_exc() return False finally: # 清理连接 if 'connection_manager' in locals(): await connection_manager.shutdown() print("\n连接已清理") @pytest.mark.asyncio async def test_query_examples(): """ 测试查询示例 """ print("\n测试查询示例...") print("-" * 30) try: config = load_config("config.yaml") connection_manager = ConnectionManager(config) await connection_manager.initialize() metadata_manager = MetadataManager(connection_manager) query_engine = QueryEngine(connection_manager, metadata_manager, config) instance_name = "本地测试环境" database_name = "querynest_test" # 测试不同类型的查询 test_queries = [ { "name": "查询所有用户", "collection": "users", "query": {}, "limit": 5 }, { "name": "查询技术部用户", "collection": "users", "query": {"department": "技术部"}, "limit": 10 }, { "name": "查询年龄大于25的用户", "collection": "users", "query": {"age": {"$gt": 25}}, "limit": 10 }, { "name": "查询所有产品", "collection": "products", "query": {}, "limit": 5 }, { "name": "查询价格大于200的产品", "collection": "products", "query": {"price": {"$gt": 200}}, "limit": 10 } ] for test_query in test_queries: try: print(f"\n执行查询: {test_query['name']}") result = await query_engine.execute_find_query( instance_name=instance_name, database_name=database_name, collection_name=test_query['collection'], query=test_query['query'], limit=test_query['limit'] ) if result['success']: results = result['data']['documents'] print(f" ✓ 返回 {len(results)} 条记录") if results: print(f" 示例结果: {results[0]}") else: print(f" ✗ 查询失败: {result['error']}") except Exception as e: print(f" ✗ 查询失败: {e}") await connection_manager.shutdown() print("\n✓ 查询示例测试完成") except Exception as e: print(f"\n✗ 查询示例测试失败: {e}") def main(): """ 主函数 """ print("QueryNest 集成测试") print("=" * 50) # 运行基本功能测试 success = asyncio.run(test_basic_functionality()) if success: # 运行查询示例测试 asyncio.run(test_query_examples()) print("\n🎉 所有测试完成!QueryNest项目运行正常。") else: print("\n❌ 基本功能测试失败,请检查配置和MongoDB连接。") sys.exit(1) if __name__ == "__main__": main()

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/niuzaishu/QueryNest'

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