VWED_server/tests/test_script_basic.py

211 lines
6.5 KiB
Python

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
脚本基础功能测试
快速验证脚本创建、编辑和执行的基本功能
"""
import asyncio
import sys
import os
from pathlib import Path
# 添加项目根目录到 Python 路径
sys.path.insert(0, str(Path(__file__).parent.parent))
print("开始脚本基础功能测试...")
async def test_basic_functionality():
"""测试基础功能"""
try:
# 测试导入
print("1. 测试模块导入...")
from services.online_script.script_file_service import get_file_service
from services.online_script.script_engine_service import get_script_engine
from services.online_script.script_registry_service import get_global_registry
from utils.api_response import success_response, error_response
print("✓ 模块导入成功")
# 测试API响应函数
print("\n2. 测试API响应函数...")
success_resp = success_response(data={"test": "ok"}, message="测试成功")
error_resp = error_response(message="测试错误", error="详细错误信息")
assert success_resp["success"] == True
assert success_resp["data"]["test"] == "ok"
assert error_resp["success"] == False
print("✓ API响应函数工作正常")
# 测试服务实例化
print("\n3. 测试服务实例化...")
file_service = get_file_service()
script_engine = get_script_engine()
registry = get_global_registry()
assert file_service is not None
assert script_engine is not None
assert registry is not None
print("✓ 服务实例创建成功")
# 测试注册中心基本功能
print("\n4. 测试注册中心基本功能...")
# 模拟注册一个函数
def test_function(args):
return {"result": "test_success", "args": args}
registry.register_function(
name="test_func",
handler=test_function,
script_id="test_script_123",
description="测试函数"
)
# 验证函数注册
func_info = registry.get_function_info("test_func")
assert func_info is not None
assert func_info["script_id"] == "test_script_123"
print("✓ 注册中心功能正常")
# 测试获取注册状态
print("\n5. 测试获取注册状态...")
registrations = registry.get_all_registrations()
assert "registered_functions" in registrations
assert "test_func" in registrations["registered_functions"]
print("✓ 注册状态获取成功")
# 清理测试数据
print("\n6. 清理测试数据...")
registry.clear_all()
print("✓ 测试数据清理完成")
return True
except Exception as e:
print(f"❌ 测试失败: {e}")
import traceback
traceback.print_exc()
return False
async def test_script_content_validation():
"""测试脚本内容验证"""
print("\n7. 测试脚本内容验证...")
try:
from services.online_script.script_file_service import get_file_service
file_service = get_file_service()
# 测试有效脚本
valid_script = '''
def boot():
print("Hello VWED!")
def test_function():
return "test"
'''
result = await file_service.validate_script_syntax(valid_script)
assert result["success"] == True
assert result["valid"] == True
print("✓ 有效脚本验证通过")
# 测试无效脚本
invalid_script = '''
def boot():
print("Hello VWED!"
# 缺少闭合括号
'''
result = await file_service.validate_script_syntax(invalid_script)
assert result["success"] == True
assert result["valid"] == False
print("✓ 无效脚本验证正确识别")
return True
except Exception as e:
print(f"❌ 脚本验证测试失败: {e}")
return False
def create_sample_script_content():
"""创建示例脚本内容"""
return '''def boot():
"""示例脚本启动函数"""
VWED.log.sync_info("示例脚本启动")
# 注册一个简单的API接口
@VWED.api.get("/sample/hello", description="示例问候接口")
def hello(request_data):
name = request_data["query_params"].get("name", "World")
return {"message": f"Hello, {name} from VWED Script!"}
# 注册一个计算函数
@VWED.function.register("sample_add", description="示例加法函数")
def add_numbers(args):
a = args.get("a", 0)
b = args.get("b", 0)
result = a + b
VWED.log.sync_info(f"计算: {a} + {b} = {result}")
return {"result": result, "operation": "addition"}
# 注册事件监听器
@VWED.event.listen("sample_event")
def on_sample_event(event_data):
VWED.log.sync_info(f"接收到示例事件: {event_data}")
# 设置定时任务
@VWED.timer.interval(60)
def sample_timer():
VWED.log.sync_info("示例定时任务执行")
VWED.log.sync_info("示例脚本注册完成")
# 辅助函数示例
def helper_function(data):
"""辅助函数示例"""
return {"processed": True, "data": data}
'''
async def main():
"""主测试函数"""
print("🚀 开始脚本基础功能测试")
print("="*50)
# 基础功能测试
basic_test = await test_basic_functionality()
# 脚本验证测试
validation_test = await test_script_content_validation()
# 显示示例脚本内容
print("\n8. 示例脚本内容:")
print("-"*30)
sample_content = create_sample_script_content()
print(sample_content[:500] + "..." if len(sample_content) > 500 else sample_content)
print("-"*30)
print("✓ 示例脚本内容生成完成")
# 测试结果
print("\n" + "="*50)
if basic_test and validation_test:
print("🎉 所有基础功能测试通过!")
print("\n可以继续进行以下测试:")
print("1. 运行 test_script_integration.py 进行完整集成测试")
print("2. 启动服务器后测试实际API调用")
print("3. 通过WebSocket测试实时日志推送")
success = True
else:
print("❌ 部分测试失败,请检查错误信息")
success = False
print("="*50)
return success
if __name__ == "__main__":
success = asyncio.run(main())
sys.exit(0 if success else 1)