UFO³ Galaxy 跨平台日志采集与 Excel 报告生成:AgentProfile Mock 测试实战指南
【免费下载链接】UFOUFO³: Weaving the Digital Agent Galaxy项目地址: https://gitcode.com/GitHub_Trending/uf/UFO
本篇技术指南以 UFO³ Galaxy 项目中的test_linux_log_collection_excel_generation.py测试模块为核心,讲解如何用 AgentProfile Mock 对象在星座(Constellation)框架下搭建"两台 Linux 服务器采集日志 + 一台 Windows 工作站生成 Excel 报告"的跨平台自动化测试场景。读者将掌握 AgentProfile 数据结构的完整字段语义、DeviceStatus 状态机用法、能力(capabilities)声明与元数据(metadata)组织方式,以及如何复用该测试作为模板编写自己的多设备编排验证用例。
一、场景概览:为什么需要跨平台 Mock 测试
在 UFO³ Galaxy(项目中文说明)的架构里,真实的多设备协作依赖 WebSocket 连接、心跳保活、任务调度等一整套分布式机制。若每次开发都启动真实设备,成本高且难以复现故障。因此项目在 tests/ 目录下准备了独立的测试模块,通过构造内存中的AgentProfile对象来模拟设备池,从而在不依赖真实网络与 LLM 的情况下验证编排逻辑。
本文涉及的测试模块描述了一个典型的跨平台自动化场景:
- 英文:Collect logs from two Linux servers and generate an Excel report on Windows
- 中文:从两个 Linux 服务器采集日志并在 Windows 上生成 Excel 报告
该场景覆盖了设备发现、能力匹配、日志采集、数据聚合、Excel 生成、故障降级、LLM Prompt 格式化等环节,是验证星座框架多设备任务协调能力的完整样例。
二、核心数据结构:AgentProfile 与 DeviceStatus
Mock 设备的本质是AgentProfile数据类的实例,该数据类定义在 galaxy/client/components/types.py:
@dataclass class AgentProfile: device_id: str # 设备唯一标识(必须与 --client-id 一致) server_url: str # UFO WebSocket 服务器地址 os: Optional[str] = None # 操作系统类型,如 "linux" / "windows" capabilities: List[str] = field(default_factory=list) # 能力列表 metadata: Dict[str, Any] = field(default_factory=dict) # 自由格式元数据 status: DeviceStatus = DeviceStatus.DISCONNECTED # 连接状态 last_heartbeat: Optional[datetime] = None # 最近心跳时间 connection_attempts: int = 0 # 连接尝试次数 max_retries: int = 5 # 最大重试次数 current_task_id: Optional[str] = None # 当前执行中的任务 ID字段语义要点:
| 字段 | 用途 | Mock 测试中的取值示例 |
|---|---|---|
device_id | 全局唯一设备标识,参与任务路由 | linux_server_001 |
server_url | 设备连接的服务端 WebSocket 地址 | ws://192.168.1.101:5000/ws |
os | 平台类型,测试中用于按系统筛选设备 | linux/windows |
capabilities | 能力声明列表,决定设备能否承接某类任务 | log_collection、excel_processing |
metadata | 主机名、服务、日志路径、软件清单等自由元数据 | 见下文各设备表 |
status | 连接状态,DeviceStatus枚举 | DeviceStatus.CONNECTED |
max_retries | 连接失败后的重试上限,与connection_attempts配合 | 5 |
DeviceStatus是同文件(types.py)中定义的枚举,共 7 个状态:
DISCONNECTED, CONNECTING, CONNECTED, FAILED, REGISTERING, BUSY, IDLE其中BUSY表示设备正在执行任务(配合current_task_id追踪),IDLE表示已连接且可接新任务。DeviceRegistry(galaxy/client/components/device_registry.py)内部以Dict[str, AgentProfile]维护设备池,并提供register_device、get_device、get_all_devices(connected=True)、set_device_busy、set_device_idle、update_heartbeat等管理方法——Mock 测试中的device_constellation字典正是对这一注册表形态的简化模拟。
三、Mock 设备清单与参数详解
测试通过三个@pytest.fixture构造设备对象(test_linux_log_collection_excel_generation.py),再由device_constellationfixture 聚合成设备池(L137-L149)。
3.1 Linux Server 1(linux_server_001)
- Hostname:web-server-01
- OS:Ubuntu 22.04 LTS
- Capabilities:
log_collection、file_operations、system_monitoring、bash_scripting、ssh_access - Log Paths(
metadata["log_paths"]):/var/log/nginx/access.log/var/log/nginx/error.log/var/log/postgresql/postgresql.log/var/log/syslog
- 其他元数据:location=
datacenter_rack_a,services=["nginx", "postgresql", "redis"],cpu_cores=16,memory_gb=64,disk_space_gb=1000
3.2 Linux Server 2(linux_server_002)
- Hostname:api-server-01
- OS:CentOS 8
- Capabilities:
log_collection、file_operations、system_monitoring、bash_scripting、database_operations - Log Paths:
/var/log/httpd/access_log/var/log/httpd/error_log/var/log/mysql/mysql.log/var/log/mongodb/mongod.log/var/log/messages
- 其他元数据:location=
datacenter_rack_b,services=["apache", "mysql", "mongodb"],cpu_cores=12,memory_gb=32,disk_space_gb=500
3.3 Windows Workstation(windows_workstation_001)
- Hostname:analyst-pc-01
- OS:Windows 11 Pro
- Capabilities:
office_applications、excel_processing、file_management、data_analysis、report_generation、email_operations - Python Packages(
metadata["python_packages"]):pandas、openpyxl、xlsxwriter - 已安装软件:Microsoft Office 365、Python 3.11、Excel、Power BI、Visual Studio Code(
excel_version=16.0)
与真实设备配置的对应关系:Mock 中的字段结构与 config/galaxy/devices.yaml 的设备声明一一对应——真实设备同样通过
device_id、server_url、os、capabilities、metadata、max_retries等字段描述,配置细节可参考 galaxy/README_ZH.md 的设备池配置章节。测试中以字典形式组织设备池,正是对星座控制平面"全局设备注册表"的轻量模拟。
四、九个测试用例逐一解析
README 记录了9 个测试全部通过,对应测试类TestLinuxLogCollectionExcelGeneration中的 9 个方法,可分为"核心测试"与"进阶测试"两组。
4.1 核心测试
①test_mock_device_creation(L151-L177)验证三个 Mock 设备创建正确:断言device_id、os与预期一致,确认 Linux 服务器具备log_collection/database_operations能力、Windows 工作站具备excel_processing能力,且三台设备状态均为CONNECTED。
②test_device_capabilities_for_log_collection_scenario(L179-L207)按os字段从设备池中筛选设备:确认 Linux 设备恰为 2 台、Windows 设备恰为 1 台;逐一校验 Linux 服务器拥有log_collection、file_operations、system_monitoring能力且metadata["log_paths"]为非空列表;校验 Windows 工作站拥有excel_processing、office_applications、report_generation能力。该测试体现了星座框架按能力匹配设备的基本思路。
③test_mock_log_collection_from_linux_servers(L209-L257)异步模拟日志采集:遍历每台 Linux 服务器的log_paths,为每个日志文件构造包含log_path、lines_collected、size_bytes、last_modified、sample_entries的记录,汇总到collected_logs字典。断言采集结果覆盖两台服务器,且每个采集结果都包含device_id、hostname、collection_time与日志条目列表。
④test_mock_excel_generation_on_windows(L259-L333)模拟 Excel 报告生成:基于预置的采集统计(每台服务器的total_log_files、total_lines、total_size_mb、error/warning/info 计数)构造excel_report对象,含Summary、Server Details、Error Analysis三个 Sheet 与三张图表。断言报告由 Windows 工作站生成、文件名以.xlsx结尾、Sheet 与图表数量正确。
⑤test_complete_log_collection_and_excel_workflow(L335-L404)端到端流程验证,分四步:①识别可用设备;②模拟采集阶段(每台服务器记录采集时长、数据量);③数据聚合(统计总服务器数、总日志文件数、总数据量、总耗时、成功采集数);④在 Windows 上生成 Excel(记录处理耗时、Sheet 数、图表数、处理行数、输出文件大小)。最终断言聚合统计与报告生成结果均符合预期。
4.2 进阶测试
⑥test_device_metadata_validation(L406-L429)对设备池中每台设备校验基础元数据(hostname、location、performance、状态为CONNECTED),并按系统类型做差异化校验:Linux 设备必须声明log_paths与services;Windows 设备必须声明installed_software(含 Microsoft Office 365)与python_packages。
⑦test_error_handling_scenarios(L431-L480)模拟部分失败:让第一台 Linux 服务器采集成功、第二台因"Connection timeout during log collection"失败。验证系统能区分成功与失败结果(各 1 台),并支持"带警告完成"的降级报告(completed_with_warnings),报告中注明成功/失败服务器数量与说明。这正是星座编排中"部分成功即降级输出"容错语义的测试化表达。
⑧test_device_formatting_for_prompt(L482-L524)模拟设备信息如何格式化为 LLM Prompt:将每台设备整理为Device ID / OS / Capabilities / Metadata(hostname、location、os_version、performance)结构,拼装成 "Available Devices" 文本。断言格式化输出包含三台设备 ID 与关键能力词。该测试对应星座智能体把设备池注入 Prompt 供 LLM 决策的真实环节。
⑨test_request_english_translation(L526-L554)记录需求翻译与实现一致性:原始中文需求为"mock 三个 AgentProfile 做测试,两个 linux,一个 windows,然后在 tests 文件夹建立测试,英文 request 是关于从两个 linux 服务器采集 log、在 windows 上生成 excel",英文等价描述为 collecting logs from two Linux servers and generating an Excel report on Windows。测试通过断言 3 台 Mock 设备、2 台 Linux、1 台 Windows、场景为log_collection_and_excel_generation、测试位于 tests 文件夹来验证实现与需求一致。
五、运行测试
在仓库根目录执行(README_log_collection_test.md 提供的命令):
# 运行文件内全部测试 python -m pytest tests/test_linux_log_collection_excel_generation.py -v # 运行单个测试用例 python -m pytest tests/test_linux_log_collection_excel_generation.py::TestLinuxLogCollectionExcelGeneration::test_mock_device_creation -v # 带详细输出的运行模式(-s 显示 print) python -m pytest tests/test_linux_log_collection_excel_generation.py -v -s前提条件:仓库根目录的 requirements.txt 中已包含pytest与pytest-asyncio(异步用例通过@pytest.mark.asyncio标记);测试本身不依赖真实 LLM、网络或设备,可离线运行。
六、测试结果与覆盖范围
- 测试总数:9 个
- 执行结果:全部通过 ✅
- 参考执行耗时:约 11 秒
- 覆盖维度:Mock 设备创建、能力校验、日志采集流程模拟、Excel 报告生成、端到端工作流、元数据校验、错误处理、LLM Prompt 格式化、需求翻译一致性
七、作为模板的复用价值
README 明确指出该测试可作模板用于以下场景,结合源码可进一步归纳为四类复用模式:
- 跨平台自动化场景:任意"多系统协作"流程(如 Linux 采集 + Windows 报表)都可按"设备池 → 分阶段模拟 → 断言"的结构落地;
- 日志采集与分析工作流:通过
metadata["log_paths"]声明日志源,按文件粒度构造采集记录,沉淀为通用的采集数据模型; - AgentProfile Mock 创建:fixture 化设备对象(L25-L149),在无需真实注册流程的情况下复用
AgentProfile全部字段与DeviceStatus状态; - 星座设备管理与多设备任务协调验证:用
os、capabilities字段做设备筛选与能力匹配,用聚合数据验证多设备协作的正确性,并借助test_error_handling_scenarios验证故障降级路径。
八、文件位置
tests/ ├── test_linux_log_collection_excel_generation.py # 主测试文件(9 个用例) └── README_log_collection_test.md # 本文档相关支撑代码:
- galaxy/client/components/types.py:
AgentProfile数据类与DeviceStatus枚举 - galaxy/client/components/device_registry.py:设备注册表,Mock 设备池的现实对应实现
- config/galaxy/devices.yaml:真实设备池配置样例(含 Linux 设备的
logs_file_path、warning_log_pattern、error_log_pattern等日志相关元数据) - galaxy/README_ZH.md:设备池配置与跨平台部署说明
实战提示:若要将该场景从 Mock 落地为真实运行,需在 config/galaxy/devices.yaml 中注册设备(
device_id必须与客户端--client-id一致、server_url必须与服务器 WebSocket 地址一致),并分别以--platform linux/--platform windows启动设备客户端;Mock 测试则可在开发阶段替代这一整套环境,快速验证编排与容错逻辑。
【免费下载链接】UFOUFO³: Weaving the Digital Agent Galaxy项目地址: https://gitcode.com/GitHub_Trending/uf/UFO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考