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
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)
|
|
|