You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

77 lines
2.0 KiB

#!/usr/bin/env python3
"""
测试服务器运行
"""
import asyncio
import sys
import os
import signal
import time
# 添加项目根目录到Python路径
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from app.core.app.factory import create_development_app
from app.utils.structured_log import get_structured_logger, LogLevel
import uvicorn
logger = get_structured_logger(__name__, LogLevel.INFO)
def signal_handler(signum, frame):
"""信号处理器"""
logger.info(f"收到信号 {signum},正在关闭服务器...")
sys.exit(0)
async def test_server():
"""测试服务器运行"""
try:
logger.info("开始测试服务器运行")
# 注册信号处理器
signal.signal(signal.SIGINT, signal_handler)
signal.signal(signal.SIGTERM, signal_handler)
# 创建应用
app = create_development_app()
logger.info("应用创建成功")
# 启动服务器(在后台运行5秒)
logger.info("启动服务器,运行5秒后自动关闭")
# 使用uvicorn启动服务器
config = uvicorn.Config(
app=app,
host="127.0.0.1",
port=8000,
log_level="info"
)
server = uvicorn.Server(config)
# 在后台运行服务器
server_task = asyncio.create_task(server.serve())
# 等待5秒
await asyncio.sleep(5)
# 停止服务器
logger.info("停止服务器")
server.should_exit = True
await server_task
logger.info("服务器测试完成")
return True
except Exception as e:
logger.error(f"服务器测试失败: {e}")
import traceback
logger.error(f"异常堆栈: {traceback.format_exc()}")
return False
if __name__ == "__main__":
success = asyncio.run(test_server())
if success:
print("✅ 服务器测试成功")
sys.exit(0)
else:
print("❌ 服务器测试失败")
sys.exit(1)