#!/usr/bin/env python # -*- coding: utf-8 -*- """ 实验状态监控器测试脚本 用于测试监控器的基本功能 """ import sys import time import datetime from pathlib import Path # 添加项目路径 sys.path.insert(0, str(Path(__file__).parent)) from experiment_monitor import ExperimentStateMonitor from influx_service import InfluxConnectionParams from logger import get_logger logger = get_logger() def test_monitor_initialization(): """测试监控器初始化""" print("\n=== 测试1: 监控器初始化 ===") try: influx_params = InfluxConnectionParams( url="http://127.0.0.1:8086", org="MEASCON", token="test_token" ) query_config = { 'bucket': 'default', 'measurement': 'status', 'fields': ['status'], 'filters': {}, 'status_field': 'status', 'status_values': { 'start': '1', 'end': '0' } } monitor = ExperimentStateMonitor( experiment_id=1, work_order_no="TEST-001", start_time=datetime.datetime.now(), influx_params=influx_params, query_config=query_config, poll_interval=5 ) print(f"✓ 监控器初始化成功") print(f" 实验ID: {monitor.experiment_id}") print(f" 工单号: {monitor.work_order_no}") print(f" 轮询间隔: {monitor.poll_interval}秒") return monitor except Exception as e: print(f"✗ 监控器初始化失败: {e}") return None def test_monitor_status(): """测试监控器状态查询""" print("\n=== 测试2: 监控器状态查询 ===") try: influx_params = InfluxConnectionParams( url="http://127.0.0.1:8086", org="MEASCON", token="test_token" ) query_config = { 'bucket': 'default', 'measurement': 'status', 'fields': ['status'], 'filters': {}, 'status_field': 'status', 'status_values': { 'start': '1', 'end': '0' } } monitor = ExperimentStateMonitor( experiment_id=1, work_order_no="TEST-001", start_time=datetime.datetime.now(), influx_params=influx_params, query_config=query_config, poll_interval=5 ) status = monitor.get_status() print(f"✓ 监控器状态查询成功") print(f" 运行状态: {status['is_running']}") print(f" 最后状态: {status['last_state']}") print(f" 实验已开始: {status['experiment_started']}") print(f" 实验已结束: {status['experiment_ended']}") except Exception as e: print(f"✗ 监控器状态查询失败: {e}") def test_state_change_callback(): """测试状态变化回调""" print("\n=== 测试3: 状态变化回调 ===") state_changes = [] def on_state_changed(old_state, new_state): state_changes.append((old_state, new_state)) print(f" 状态变化: {old_state} -> {new_state}") try: influx_params = InfluxConnectionParams( url="http://127.0.0.1:8086", org="MEASCON", token="test_token" ) query_config = { 'bucket': 'default', 'measurement': 'status', 'fields': ['status'], 'filters': {}, 'status_field': 'status', 'status_values': { 'start': '1', 'end': '0' } } monitor = ExperimentStateMonitor( experiment_id=1, work_order_no="TEST-001", start_time=datetime.datetime.now(), influx_params=influx_params, query_config=query_config, on_state_changed=on_state_changed, poll_interval=5 ) print(f"✓ 回调函数已注册") print(f" 回调函数: {on_state_changed.__name__}") except Exception as e: print(f"✗ 回调函数注册失败: {e}") def test_monitor_lifecycle(): """测试监控器生命周期""" print("\n=== 测试4: 监控器生命周期 ===") try: influx_params = InfluxConnectionParams( url="http://127.0.0.1:8086", org="MEASCON", token="test_token" ) query_config = { 'bucket': 'default', 'measurement': 'status', 'fields': ['status'], 'filters': {}, 'status_field': 'status', 'status_values': { 'start': '1', 'end': '0' } } monitor = ExperimentStateMonitor( experiment_id=1, work_order_no="TEST-001", start_time=datetime.datetime.now(), influx_params=influx_params, query_config=query_config, poll_interval=5 ) # 测试启动 print(" 启动监控器...") monitor.start() time.sleep(1) status = monitor.get_status() print(f" ✓ 监控器已启动: {status['is_running']}") # 测试停止 print(" 停止监控器...") monitor.stop() time.sleep(1) status = monitor.get_status() print(f" ✓ 监控器已停止: {not status['is_running']}") except Exception as e: print(f"✗ 生命周期测试失败: {e}") def main(): """运行所有测试""" print("=" * 60) print("实验状态监控器测试") print("=" * 60) test_monitor_initialization() test_monitor_status() test_state_change_callback() test_monitor_lifecycle() print("\n" + "=" * 60) print("测试完成") print("=" * 60) if __name__ == "__main__": main()