CadHubManage/test_models.py
root e6261532f7 feat: 添加软件停止功能并修复Creo进程检测问题
## 主要修复
- 修复Creo软件运行状态检测失败问题
- 添加完整的软件停止功能支持
- 改进多进程软件的进程管理逻辑

## 技术改进
- 更新软件配置支持多进程名称检测
- 优化进程停止逻辑,增加超时配置
- 新增 stop_software WebSocket消息类型
- 完善错误处理和日志记录

## 配置更新
- configs/software_config.yaml: 支持进程名称列表和停止超时
- 添加Revit 2017配置支持

## 文档更新
- README.md: 更新软件配置说明和API列表
- frontend-api-docs.md: 添加停止软件API文档
- CHECKPOINT.md: 记录修复进展和解决方案

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-24 17:24:49 +08:00

123 lines
4.0 KiB
Python

import sys
sys.path.append('app')
from datetime import datetime
from models.user import User
from models.software import SoftwareDefinition
from models.task import Task, TaskStatus, TaskType
from schemas.auth import LoginRequest, LoginResponse, TokenData
from schemas.software import SoftwareInfo, SoftwareActionResponse
from schemas.task import TaskResponse, SSEEvent
def test_models():
print("=== 测试数据模型 ===")
# 测试用户模型
print("\n1. 测试用户模型:")
try:
user = User(
username="admin",
password_hash="$2b$12$test",
is_active=True,
permissions=["software:start", "software:stop"]
)
print(f"✅ 用户模型: {user.username}, 权限: {user.permissions}")
except Exception as e:
print(f"❌ 用户模型失败: {e}")
# 测试软件定义模型
print("\n2. 测试软件定义模型:")
try:
software = SoftwareDefinition(
name="PTC Creo",
executable_path="C:\\Program Files\\PTC\\Creo\\parametric.exe",
startup_args=[],
startup_timeout=60,
check_process_name="parametric.exe"
)
print(f"✅ 软件定义: {software.name}, 超时: {software.startup_timeout}s")
except Exception as e:
print(f"❌ 软件定义失败: {e}")
# 测试任务模型
print("\n3. 测试任务模型:")
try:
task = Task(
id="task_001",
task_type=TaskType.START_SOFTWARE,
software_id="creo",
status=TaskStatus.PENDING,
created_at=datetime.now(),
progress=0
)
print(f"✅ 任务模型: {task.id}, 类型: {task.task_type}, 状态: {task.status}")
except Exception as e:
print(f"❌ 任务模型失败: {e}")
def test_schemas():
print("\n=== 测试API模式 ===")
# 测试登录请求
print("\n1. 测试登录请求:")
try:
login_req = LoginRequest(username="admin", password="password123")
print(f"✅ 登录请求: 用户名 {login_req.username}")
except Exception as e:
print(f"❌ 登录请求失败: {e}")
# 测试登录响应
print("\n2. 测试登录响应:")
try:
login_resp = LoginResponse(
access_token="eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...",
refresh_token="refresh_token_here",
expires_in=1800
)
print(f"✅ 登录响应: Token类型 {login_resp.token_type}, 过期时间 {login_resp.expires_in}s")
except Exception as e:
print(f"❌ 登录响应失败: {e}")
# 测试软件信息
print("\n3. 测试软件信息:")
try:
software_info = SoftwareInfo(
id="creo",
name="PTC Creo",
is_running=False,
process_id=None
)
print(f"✅ 软件信息: {software_info.name}, 运行状态: {software_info.is_running}")
except Exception as e:
print(f"❌ 软件信息失败: {e}")
# 测试软件操作响应
print("\n4. 测试软件操作响应:")
try:
action_resp = SoftwareActionResponse(
task_id="task_001",
software_id="creo",
action="start",
status=TaskStatus.PENDING,
message="软件启动任务已创建"
)
print(f"✅ 操作响应: 任务 {action_resp.task_id}, 操作 {action_resp.action}")
except Exception as e:
print(f"❌ 操作响应失败: {e}")
# 测试SSE事件
print("\n5. 测试SSE事件:")
try:
sse_event = SSEEvent(
event_type="software_status",
task_id="task_001",
software_id="creo",
data={"status": "starting", "progress": 25}
)
print(f"✅ SSE事件: 类型 {sse_event.event_type}, 数据: {sse_event.data}")
except Exception as e:
print(f"❌ SSE事件失败: {e}")
if __name__ == "__main__":
test_models()
test_schemas()
print("\n=== 模型测试完成 ===")