PCM_Report/test_new_experiment.py

134 lines
4.0 KiB
Python

#!/usr/bin/env python3
"""
测试新创建的实验状态变化
"""
import sqlite3
import json
from pathlib import Path
from influxdb_client import InfluxDBClient, Point
from influxdb_client.client.write_api import SYNCHRONOUS
import datetime
import time
def check_experiment_status(exp_id):
"""检查实验状态"""
try:
db_path = Path(__file__).parent / "experiments.db"
db = sqlite3.connect(str(db_path))
cur = db.cursor()
cur.execute("""
SELECT id, work_order_no, start_ts, end_ts, created_at
FROM experiments
WHERE id = ?
""", (exp_id,))
result = cur.fetchone()
if result:
exp_id_db, work_order, start_ts, end_ts, created_at = result
print(f"实验 {exp_id_db} (工单: {work_order}):")
print(f" 创建时间: {created_at}")
print(f" 开始时间: {start_ts or '未开始'}")
print(f" 结束时间: {end_ts or '未结束'}")
if start_ts and end_ts:
status = "已完成"
elif start_ts:
status = "进行中"
else:
status = "等待开始"
print(f" 状态: {status}")
return status
db.close()
except Exception as e:
print(f"ERROR 检查状态失败: {e}")
return None
def write_status_change(status_value, description):
"""写入状态变化"""
try:
# 加载配置
with open("default.json", 'r', encoding='utf-8') as f:
config = json.load(f)
influx_config = config.get('influx', {})
client = InfluxDBClient(
url=influx_config.get('url', 'http://127.0.0.1:8086'),
token=influx_config.get('token', ''),
org=influx_config.get('org', 'MEASCON')
)
write_api = client.write_api(write_options=SYNCHRONOUS)
measurement = influx_config.get('measurement', 'PCM_Measurement')
bucket = influx_config.get('bucket', 'PCM')
point = Point(measurement) \
.tag("data_type", "Breaker") \
.field("load_status", str(status_value)) \
.time(datetime.datetime.now(datetime.timezone.utc))
write_api.write(bucket=bucket, record=point)
print(f"OK {description}: load_status = {status_value}")
client.close()
except Exception as e:
print(f"ERROR 写入失败: {e}")
def main():
print("测试新实验状态变化")
print("=" * 50)
exp_id = 148 # 刚创建的实验ID
print("步骤1: 检查初始状态")
print("-" * 30)
initial_status = check_experiment_status(exp_id)
if initial_status != "等待开始":
print(f"WARNING 初始状态不是'等待开始',而是'{initial_status}'")
print("\n步骤2: 写入实验开始状态")
print("-" * 30)
write_status_change("1", "写入开始状态")
print("等待10秒让监控器检测...")
time.sleep(10)
print("\n步骤3: 检查开始后状态")
print("-" * 30)
start_status = check_experiment_status(exp_id)
print("\n步骤4: 写入实验结束状态")
print("-" * 30)
write_status_change("0", "写入结束状态")
print("等待10秒让监控器检测...")
time.sleep(10)
print("\n步骤5: 检查最终状态")
print("-" * 30)
final_status = check_experiment_status(exp_id)
print("\n" + "=" * 50)
print("测试结果总结:")
print(f"初始状态: {initial_status}")
print(f"开始后状态: {start_status}")
print(f"最终状态: {final_status}")
if final_status == "已完成":
print("SUCCESS 测试成功!实验状态正确更新")
else:
print("ERROR 测试失败!实验状态未正确更新")
print("可能原因:")
print("1. 监控器未运行")
print("2. 监控器配置错误")
print("3. UI刷新问题")
if __name__ == "__main__":
main()