PCM_Report/test_complete_auto_refresh.py

170 lines
5.6 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 time
import subprocess
import sqlite3
import os
def check_current_experiment():
"""检查当前实验状态"""
print("🔍 检查当前实验状态")
try:
conn = sqlite3.connect("experiments.db")
cursor = conn.cursor()
# 查询最新的实验记录
cursor.execute("""
SELECT id, work_order_no, start_ts, end_ts, created_at
FROM experiments
ORDER BY id DESC
LIMIT 1
""")
record = cursor.fetchone()
conn.close()
if record:
exp_id, work_order, start_ts, end_ts, created_at = record
print(f"📊 最新实验记录:")
print(f" ID: {exp_id}")
print(f" 工单号: {work_order}")
print(f" 开始时间: {start_ts or '未设置'}")
print(f" 结束时间: {end_ts or '未设置'}")
return exp_id, start_ts, end_ts
else:
print("❌ 没有找到实验记录")
return None, None, None
except Exception as e:
print(f"❌ 检查失败: {e}")
return None, None, None
def test_state_change(state, description):
"""测试状态变化"""
print(f"\n📝 {description}")
try:
result = subprocess.run(
['python', 'quick_test_data.py'],
input=f'{state}\n',
text=True,
capture_output=True,
cwd='.',
timeout=10
)
if result.returncode == 0:
print(f"✅ 状态{state}写入成功")
return True
else:
print(f"❌ 状态{state}写入失败: {result.stderr}")
return False
except subprocess.TimeoutExpired:
print(f"❌ 状态{state}写入超时")
return False
except Exception as e:
print(f"❌ 状态{state}写入异常: {e}")
return False
def main():
print("完整的自动刷新功能测试")
print("=" * 50)
print("⚠️ 测试前提条件:")
print("1. 程序 python main.py 正在运行")
print("2. 有工单在等待状态(橙色按钮显示'等待实验开始'")
print("3. 程序界面可见,可以观察变化")
input("\n✅ 确认满足上述条件后,按回车键开始测试...")
# 1. 检查初始状态
print("\n" + "="*50)
print("步骤1: 检查初始状态")
exp_id, initial_start, initial_end = check_current_experiment()
if exp_id is None:
print("❌ 无法获取实验信息,测试终止")
return
# 2. 测试实验开始
print("\n" + "="*50)
print("步骤2: 测试实验开始检测")
if test_state_change(3, "写入状态1实验开始"):
print("💡 请观察程序界面:")
print(" - 状态栏应该显示'状态变化: 0 -> 1'")
print(" - 实验列表应该自动刷新显示开始时间")
print(" - 不需要手动点击刷新按钮")
# 等待用户观察
print("\n⏳ 等待10秒请观察界面变化...")
for i in range(10, 0, -1):
print(f" 倒计时: {i}", end='\r')
time.sleep(1)
print()
# 检查数据库是否更新
_, new_start, _ = check_current_experiment()
if new_start and new_start != initial_start:
print("✅ 数据库开始时间已更新")
else:
print("❌ 数据库开始时间未更新")
# 3. 测试实验结束
print("\n" + "="*50)
print("步骤3: 测试实验结束检测")
if test_state_change(2, "写入状态0实验结束"):
print("💡 请观察程序界面:")
print(" - 状态栏应该显示'状态变化: 1 -> 0'")
print(" - 实验列表应该自动刷新显示结束时间")
print(" - 实验状态应该变为'已完成'")
# 等待用户观察
print("\n⏳ 等待10秒请观察界面变化...")
for i in range(10, 0, -1):
print(f" 倒计时: {i}", end='\r')
time.sleep(1)
print()
# 检查最终状态
_, final_start, final_end = check_current_experiment()
if final_start and final_end:
print("✅ 数据库开始和结束时间都已设置")
else:
print("❌ 数据库时间设置不完整")
# 4. 总结
print("\n" + "="*50)
print("测试总结")
print("\n✅ 如果看到以下现象,说明自动刷新功能正常:")
print(" 1. 写入状态1后界面自动显示开始时间")
print(" 2. 写入状态0后界面自动显示结束时间")
print(" 3. 状态栏显示相应的状态变化消息")
print(" 4. 整个过程不需要手动点击刷新按钮")
print("\n❌ 如果出现以下问题:")
print(" 1. 界面没有自动刷新 → 检查程序日志中的UI更新信息")
print(" 2. 数据库没有更新 → 检查监控器是否正确启动")
print(" 3. 状态栏没有消息 → 检查信号连接是否正常")
print(f"\n📊 最终实验状态 (ID: {exp_id}):")
final_exp_id, final_start, final_end = check_current_experiment()
print(f" 开始时间: {final_start or '未设置'}")
print(f" 结束时间: {final_end or '未设置'}")
if final_start and final_end:
print("\n🎉 测试完成!自动刷新功能正常工作!")
else:
print("\n⚠️ 测试完成,但可能存在问题,请检查程序日志")
if __name__ == "__main__":
main()