PCM_Report/test_experiment_monitor.py

225 lines
6.0 KiB
Python
Raw Normal View History

2025-12-11 14:32:31 +08:00
#!/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()