first commit

This commit is contained in:
2026-02-08 14:42:58 +08:00
commit 20e1deae21
8197 changed files with 2264639 additions and 0 deletions

View File

@@ -0,0 +1,270 @@
"""
智能算法展示平台 - 集成测试配置
此配置文件定义了集成测试所需的设置和参数。
"""
import os
from typing import Dict, Any, Optional
class IntegrationTestConfig:
"""集成测试配置类"""
def __init__(self):
# 基础URL配置
self.base_url = os.getenv('TEST_BASE_URL', 'http://localhost:8000')
self.api_version = '/api/v1'
# 认证配置
self.api_key = os.getenv('TEST_API_KEY', 'test-key-12345')
self.auth_headers = {
'Authorization': f'Bearer {self.api_key}',
'Content-Type': 'application/json'
}
# 测试数据配置
self.test_timeout = int(os.getenv('TEST_TIMEOUT', '30'))
self.retry_count = int(os.getenv('TEST_RETRY_COUNT', '3'))
self.delay_between_retries = float(os.getenv('TEST_DELAY_BETWEEN_RETRIES', '1.0'))
# 服务配置
self.backend_port = int(os.getenv('BACKEND_PORT', '8000'))
self.frontend_port = int(os.getenv('FRONTEND_PORT', '3000'))
self.db_host = os.getenv('DB_HOST', 'localhost')
self.db_port = int(os.getenv('DB_PORT', '5432'))
# 测试算法配置
self.test_algorithms = [
{
'name': 'Image Classification Test Algorithm',
'description': 'Test algorithm for image classification',
'type': 'computer_vision',
'status': 'active',
'input_schema': {
'image_url': {'type': 'string', 'required': True}
},
'output_schema': {
'predictions': {
'type': 'array',
'items': {
'class': {'type': 'string'},
'confidence': {'type': 'number'}
}
}
}
},
{
'name': 'Text Analysis Test Algorithm',
'description': 'Test algorithm for text analysis',
'type': 'nlp',
'status': 'active',
'input_schema': {
'text': {'type': 'string', 'required': True}
},
'output_schema': {
'sentiment': {'type': 'string'},
'entities': {'type': 'array', 'items': {'type': 'string'}}
}
}
]
# 测试输入数据
self.test_inputs = {
'computer_vision': {
'image_url': 'https://example.com/test-image.jpg'
},
'nlp': {
'text': 'This is a test text for NLP algorithm.'
},
'ml': {
'features': [1.0, 2.0, 3.0, 4.0, 5.0]
}
}
# 测试参数
self.test_params = {
'confidence_threshold': 0.7,
'max_results': 10,
'return_probabilities': True
}
def get_api_url(self, endpoint: str) -> str:
"""获取API端点的完整URL"""
return f"{self.base_url}{self.api_version}{endpoint}"
def get_auth_headers(self) -> Dict[str, str]:
"""获取认证头部信息"""
return self.auth_headers.copy()
def get_test_algorithm_by_type(self, alg_type: str) -> Optional[Dict[str, Any]]:
"""根据类型获取测试算法配置"""
for alg in self.test_algorithms:
if alg['type'] == alg_type:
return alg
return None
# 全局配置实例
test_config = IntegrationTestConfig()
def get_test_config() -> IntegrationTestConfig:
"""获取测试配置实例"""
return test_config
# 环境特定的配置
class TestEnvironment:
"""测试环境配置"""
LOCAL = "local"
DOCKER = "docker"
CI_CD = "ci_cd"
@staticmethod
def detect_environment() -> str:
"""检测当前测试环境"""
if os.getenv('CI'):
return TestEnvironment.CI_CD
elif os.getenv('DOCKER_ENV'):
return TestEnvironment.DOCKER
else:
return TestEnvironment.LOCAL
@staticmethod
def get_environment_config(env_type: str) -> Dict[str, Any]:
"""获取特定环境的配置"""
configs = {
TestEnvironment.LOCAL: {
'base_url': 'http://localhost:8000',
'db_url': 'postgresql://user:password@localhost:5432/test_db',
'redis_url': 'redis://localhost:6379/0',
'minio_url': 'http://localhost:9000'
},
TestEnvironment.DOCKER: {
'base_url': 'http://backend:8000',
'db_url': 'postgresql://user:password@db:5432/test_db',
'redis_url': 'redis://redis:6379/0',
'minio_url': 'http://minio:9000'
},
TestEnvironment.CI_CD: {
'base_url': os.getenv('TEST_BASE_URL', 'http://localhost:8000'),
'db_url': os.getenv('TEST_DB_URL', 'postgresql://user:password@localhost:5432/test_db'),
'redis_url': os.getenv('TEST_REDIS_URL', 'redis://localhost:6379/0'),
'minio_url': os.getenv('TEST_MINIO_URL', 'http://localhost:9000')
}
}
return configs.get(env_type, configs[TestEnvironment.LOCAL])
# 数据工厂类,用于生成测试数据
class TestDataFactory:
"""测试数据工厂"""
@staticmethod
def create_algorithm_data(name_suffix: str = "") -> Dict[str, Any]:
"""创建算法测试数据"""
import uuid
from datetime import datetime
return {
'id': f'test-alg-{uuid.uuid4().hex[:8]}',
'name': f'Test Algorithm {name_suffix}'.strip() or f'Test Algorithm {uuid.uuid4().hex[:8]}',
'description': f'Test algorithm for integration testing {datetime.now().isoformat()}',
'type': 'computer_vision',
'status': 'active',
'versions': [],
'created_at': datetime.now().isoformat(),
'updated_at': datetime.now().isoformat()
}
@staticmethod
def create_call_data(algorithm_id: str, version_id: str = None) -> Dict[str, Any]:
"""创建算法调用测试数据"""
import uuid
return {
'id': f'test-call-{uuid.uuid4().hex[:8]}',
'user_id': f'test-user-{uuid.uuid4().hex[:8]}',
'algorithm_id': algorithm_id,
'version_id': version_id or f'test-ver-{uuid.uuid4().hex[:8]}',
'input_data': {'test': 'data'},
'params': {'test_param': 'test_value'},
'output_data': {'result': 'test_result'},
'status': 'success',
'response_time': 0.123,
'error_message': None,
'created_at': datetime.now().isoformat(),
'updated_at': datetime.now().isoformat()
}
# 测试助手类
class TestHelpers:
"""测试助手类,提供常用的测试辅助功能"""
@staticmethod
def wait_for_service(url: str, timeout: int = 30, interval: float = 1.0) -> bool:
"""等待服务启动"""
import time
import requests
from requests.exceptions import RequestException
start_time = time.time()
while time.time() - start_time < timeout:
try:
response = requests.get(url, timeout=5)
if response.status_code == 200:
return True
except RequestException:
pass
time.sleep(interval)
return False
@staticmethod
def cleanup_test_data(api_url: str, headers: Dict[str, str], test_ids: list):
"""清理测试数据"""
import requests
# 这里可以添加清理测试数据的逻辑
# 例如删除测试算法、清理测试调用记录等
print(f"清理测试数据: {test_ids}")
# 用于运行测试的装饰器
def retry_on_failure(max_attempts: int = 3, delay: float = 1.0):
"""失败重试装饰器"""
def decorator(func):
def wrapper(*args, **kwargs):
last_exception = None
for attempt in range(max_attempts):
try:
return func(*args, **kwargs)
except Exception as e:
last_exception = e
if attempt < max_attempts - 1:
import time
time.sleep(delay)
else:
raise e
raise last_exception
return wrapper
return decorator
if __name__ == "__main__":
# 输出当前配置信息
config = get_test_config()
env = TestEnvironment.detect_environment()
print(f"测试环境: {env}")
print(f"基础URL: {config.base_url}")
print(f"API密钥: {'*' * len(config.api_key) if config.api_key else '未设置'}")
print(f"超时时间: {config.test_timeout}")
print(f"重试次数: {config.retry_count}")
env_config = TestEnvironment.get_environment_config(env)
print(f"环境特定配置: {env_config}")