PCM_Report/test_complete_fix.py

163 lines
4.7 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env python3
"""
完整的修复验证测试
"""
import sys
import os
import datetime
sys.path.append(os.path.dirname(__file__))
from experiment_monitor import ExperimentStateMonitor
from influx_service import InfluxConnectionParams
from config_model import AppConfig
from pathlib import Path
def test_monitor_creation():
"""测试监控器创建"""
print("🧪 测试监控器创建")
# 加载配置
config_path = Path("default.json")
config = AppConfig.load(config_path)
# 创建InfluxDB连接参数
influx_params = InfluxConnectionParams(
url=config.influx.url,
org=config.influx.org,
token=config.influx.token
)
# 创建查询配置模拟ui_main.py中的配置
query_config = {
'bucket': getattr(config.influx, 'bucket', 'PCM'),
'measurement': getattr(config.influx, 'measurement', 'experiment_status'),
'fields': ['status'],
'filters': {},
'status_field': 'status',
'status_values': {
'start': '1',
'end': '0'
}
}
print(f"📋 查询配置:")
for key, value in query_config.items():
print(f" {key}: {value}")
try:
# 创建监控器
monitor = ExperimentStateMonitor(
experiment_id=999, # 测试ID
work_order_no="TEST001", # 测试工单号
influx_params=influx_params,
query_config=query_config,
start_time=datetime.datetime.now(),
on_state_changed=lambda old_state, new_state: print(f"📢 状态变化: {old_state} -> {new_state}")
)
print("✅ 监控器创建成功")
# 测试单次查询
print("\n🔍 测试单次查询...")
current_state = monitor._query_current_state()
print(f"当前状态: {current_state}")
# 清理
monitor.stop()
print("✅ 监控器已停止")
return True
except Exception as e:
print(f"❌ 监控器测试失败: {e}")
import traceback
traceback.print_exc()
return False
def test_query_with_different_data():
"""测试不同数据的查询"""
print("\n📊 测试不同数据的查询")
# 先写入一些测试数据
print("写入测试数据...")
from influx_service import InfluxService, InfluxConnectionParams
from config_model import AppConfig
config_path = Path("default.json")
config = AppConfig.load(config_path)
params = InfluxConnectionParams(
url=config.influx.url,
org=config.influx.org,
token=config.influx.token
)
service = InfluxService(params)
bucket = getattr(config.influx, 'bucket', 'PCM')
measurement = getattr(config.influx, 'measurement', 'experiment_status')
# 写入状态序列0 -> 1 -> 0
from influxdb_client import Point
from influxdb_client.client.write_api import SYNCHRONOUS
client = service._client
write_api = client.write_api(write_options=SYNCHRONOUS)
now = datetime.datetime.now()
points = [
Point(measurement).field("status", "0").time(now - datetime.timedelta(minutes=10)),
Point(measurement).field("status", "1").time(now - datetime.timedelta(minutes=5)),
Point(measurement).field("status", "0").time(now)
]
for point in points:
write_api.write(bucket=bucket, record=point)
print("✅ 测试数据写入完成")
# 现在测试查询
try:
df = service.query(
bucket=bucket,
measurement=measurement,
fields=['status'],
filters={},
time_range="-1h"
)
print(f"✅ 查询成功! 返回 {len(df)} 行数据")
if not df.empty:
print("📊 数据详情:")
for _, row in df.iterrows():
print(f" 时间: {row['_time']}, 状态: {row['_value']}")
return True
except Exception as e:
print(f"❌ 查询失败: {e}")
return False
def main():
print("InfluxDB监控器完整修复验证")
print("=" * 50)
success1 = test_monitor_creation()
success2 = test_query_with_different_data()
if success1 and success2:
print("\n🎉 所有测试通过! InfluxDB监控器修复成功!")
print("\n📌 下一步:")
print("1. 重新启动程序 python main.py")
print("2. 点击'开始工单'进入等待状态")
print("3. 使用 python quick_test_data.py 触发状态变化")
print("4. 观察程序日志中的监控器输出")
else:
print("\n❌ 部分测试失败,需要进一步调试")
if __name__ == "__main__":
main()