# actorManager **Repository Path**: qunarwork/actor-manager ## Basic Information - **Project Name**: actorManager - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-02 - **Last Updated**: 2026-01-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Actor Node Manager - 自动化测试执行节点管理器 前端自动化测试用例管理平台的执行节点管理器,运行在 Ubuntu 系统上,负责管理多个执行节点、与服务器通信、分配测试任务并收集执行结果。 ## 功能特性 1. **执行节点管理** - 管理多个执行节点(当前使用 Playwright 多上下文环境,未来计划使用容器) 2. **WebSocket 长连接** - 与服务器保持稳定的实时通信,接收任务分配和节点命令 3. **HTTP 请求** - 支持通过 HTTP 接口与服务器通信 4. **任务调度** - 将测试任务分配给可用的执行节点 5. **结果收集** - 收集执行节点的测试结果并上报给服务器 6. **测试用例执行** - 将 JSON 格式的测试用例转换为 Playwright 脚本并执行 7. **Mock 数据支持** - 支持在测试用例中使用 Mock 数据 8. **健康监控** - 实时监控节点状态并上报服务器 9. **进度上报** - 实时上报测试用例执行进度 10. **截图管理** - 自动保存测试步骤截图并与步骤关联 ## 项目结构 ``` actor-manager/ ├── src/ # 源代码目录 │ ├── __init__.py │ ├── main.py # 主程序入口(ActorNodeManager) │ ├── config.py # 配置管理 │ ├── node_manager.py # 执行节点管理器 │ ├── task_scheduler.py # 任务调度器 │ ├── websocket_manager.py # WebSocket连接管理 │ ├── http_client.py # HTTP客户端 │ ├── test_execution_engine.py # 测试执行引擎 │ ├── test_case_converter.py # 测试用例转换器 │ ├── playwright_context_manager.py # Playwright上下文管理 │ └── health_monitor.py # 健康监控器 ├── tests/ # 测试脚本目录 │ ├── test_server.py # 测试服务器 │ └── demo.py # 演示脚本 ├── scripts/ # 启动脚本目录 │ ├── start_container.sh # 容器启动脚本 │ └── stop_container.sh # 容器停止脚本 ├── docs/ # 文档目录 │ ├── README.md # 完整文档 │ ├── QUICKSTART.md # 快速开始指南 │ ├── UBUNTU_SETUP.md # Ubuntu系统预安装指南 │ └── INSTALL_UBUNTU.md # Ubuntu一键安装脚本 ├── config/ # 配置文件目录 │ ├── .env # 环境变量配置 │ └── Containerfile # Podman容器配置 ├── data/ # 数据目录 │ ├── examples/ # 示例文件 │ │ ├── test_case_example.json # 测试用例示例 │ │ └── mock_data_example.json # Mock数据示例 │ ├── screenshots/ # 截图保存目录 │ ├── reports/ # 报告保存目录 │ ├── mock_data/ # Mock数据目录 │ └── test_cases/ # 测试用例目录 ├── requirements.txt # Python依赖 ├── run.py # 运行入口脚本 └── .gitignore # Git忽略文件 ``` ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 配置说明 编辑 `config/.env` 文件配置节点管理器参数: ```env # 服务器配置 SERVER_WS_URL=ws://localhost:8080/ws # WebSocket服务器地址 SERVER_HTTP_URL=http://localhost:8080 # HTTP服务器地址 # 节点管理器配置 NODE_ID=actor-node-manager-1 # 节点管理器ID NODE_NAME=Actor Node Manager 1 # 节点管理器名称 HEARTBEAT_INTERVAL=30 # 心跳间隔(秒) # 执行节点配置 MAX_NODES=5 # 最大执行节点数量 INITIAL_NODES=3 # 初始创建的执行节点数量 HEADLESS=true # 是否使用无头浏览器模式 # 目录配置 SCREENSHOT_DIR=data/screenshots # 截图保存目录 REPORT_DIR=data/reports # 报告保存目录 MOCK_DATA_DIR=data/mock_data # Mock数据目录 TEST_CASE_DIR=data/test_cases # 测试用例目录 ``` ## 系统架构 ### 组件说明 1. **ActorNodeManager** - 主应用程序,负责初始化和协调所有组件 2. **NodeManager** - 管理执行节点的生命周期(创建、监控、清理) 3. **TaskScheduler** - 任务调度器,负责将任务分配给可用的执行节点 4. **WebSocketManager** - WebSocket 连接管理,与服务器进行实时通信 5. **HttpClient** - HTTP 客户端,用于与服务器进行 HTTP 请求 6. **TestExecutionEngine** - 测试执行引擎,执行测试用例 7. **HealthMonitor** - 健康监控器,监控系统状态 ### 工作流程 1. **启动阶段** - ActorNodeManager 初始化所有组件 - NodeManager 创建初始执行节点(默认 3 个) - WebSocketManager 连接到服务器 - HealthMonitor 开始监控系统状态 2. **任务接收** - 服务器通过 WebSocket 发送任务分配消息 - WebSocketManager 接收任务并传递给 TaskScheduler - TaskScheduler 将任务加入队列 3. **任务执行** - TaskScheduler 从队列中取出任务 - 查找空闲的执行节点 - 将任务分配给执行节点 - TestExecutionEngine 执行测试用例 4. **结果上报** - 执行完成后,结果通过 WebSocket 或 HTTP 上报给服务器 - WebSocketManager 发送任务完成或失败消息 - HttpClient 可选地通过 HTTP 接口上报结果 ### 执行节点状态 每个执行节点有以下状态: - **idle**:空闲,可以接收新任务 - **busy**:正在执行任务 - **error**:执行出错 - **offline**:节点离线 ## 本地运行 ### 直接运行 ```bash python run.py ``` ### 使用Playwright 首次运行需要安装Playwright浏览器: ```bash playwright install chromium ``` ### 启动测试服务器(用于测试) 在第一个终端窗口中: ```bash python tests/test_server.py ``` ### 运行演示 在第三个终端窗口中: ```bash python tests/demo.py ``` ## 测试用例格式 测试用例使用JSON格式,包含以下字段: ```json { "id": "test_case_001", "name": "测试用例名称", "description": "测试用例描述", "steps": [ { "type": "navigate", "description": "步骤描述", "url": "https://example.com" } ] } ``` ### 支持的步骤类型 - `navigate` - 导航到URL - `click` - 点击元素 - `fill` - 填写表单 - `select` - 选择下拉框 - `wait` - 等待 - `screenshot` - 截图 - `assert_text` - 断言文本 - `assert_visible` - 断言元素可见 - `hover` - 鼠标悬停 - `scroll` - 滚动到元素 ### Mock数据使用 在测试用例中使用 `${key}` 引用Mock数据: ```json { "type": "fill", "selector": "#username", "value": "${username}" } ``` 对应的Mock数据: ```json { "username": "testuser" } ``` ## WebSocket消息协议 ### 节点管理器注册 ```json { "type": "node_manager_register", "data": { "node_manager_id": "actor-node-manager-1", "node_manager_name": "Actor Node Manager 1", "status": "online", "max_nodes": 5, "active_nodes": 3 } } ``` ### 任务分配 服务器发送: ```json { "type": "task_assignment", "data": { "task_id": "task_001", "test_case": {...}, "mock_data": {...} } } ``` ### 任务确认 节点管理器发送: ```json { "type": "task_acknowledgement", "data": { "task_id": "task_001", "status": "accepted" } } ``` ### 任务完成 节点管理器发送: ```json { "type": "task_completion", "data": { "task_id": "task_001", "result": { "status": "passed", "start_time": "2024-01-01T00:00:00", "end_time": "2024-01-01T00:00:10", "duration": 10.5, "steps": [...], "screenshots": {...} } } } ``` ### 任务失败 节点管理器发送: ```json { "type": "task_failure", "data": { "task_id": "task_001", "error": "Error message" } } ``` ### 节点命令 服务器发送: ```json { "type": "node_command", "data": { "command": "create_node", "node_id": "node_4" } } ``` ### 执行进度上报 节点管理器发送: ```json { "type": "execution_progress", "data": { "task_id": "task_001", "node_id": "node_1", "step_index": 1, "status": "running", "details": { "total_steps": 5, "current_step": 1 } } } ``` ### 健康状态上报 节点管理器发送: ```json { "type": "health_status", "data": { "node_manager_id": "actor-node-manager-1", "status": "healthy", "nodes": { "total": 5, "idle": 3, "busy": 2, "error": 0, "offline": 0 }, "metrics": { "cpu": {...}, "memory": {...}, "disk": {...} } } } ``` ### 心跳 服务器发送: ```json { "type": "ping", "data": { "timestamp": "2024-01-01T00:00:00" } } ``` 节点管理器响应: ```json { "type": "pong", "data": { "timestamp": "2024-01-01T00:00:00" } } ``` ## 测试报告 测试执行完成后会生成 JSON 格式的报告,保存在: ``` data/reports/{task_id}/result.json ``` 报告包含以下信息: - 执行状态(成功/失败) - 执行时间 - 截图路径 - 错误信息(如果失败) - 步骤执行详情 ## 健康监控 节点管理器会定期上报以下健康指标: - CPU 使用率 - 内存使用情况 - 磁盘使用情况 - 系统信息 - 执行队列状态 - 当前执行状态 - 节点状态统计(总节点数、空闲节点数、忙碌节点数、错误节点数、离线节点数) ## 故障排查 ### 连接失败 检查 `.env` 中的 `SERVER_WS_URL` 和 `SERVER_HTTP_URL` 是否正确 ### 执行节点创建失败 确保已安装 Playwright 浏览器: ```bash playwright install --with-deps chromium ``` 检查配置文件中的 `MAX_NODES` 和 `INITIAL_NODES` 设置 ### 任务分配失败 检查是否有空闲的执行节点,查看日志了解详细错误信息 ### WebSocket 连接失败 确保服务器正在运行,检查网络连接 ### 权限问题 确保数据目录有读写权限: ```bash chmod -R 755 ./data ``` ## 技术栈 - Python 3.11+ - Playwright - WebSocket - asyncio - aiohttp