170 lines
5.6 KiB
Python
170 lines
5.6 KiB
Python
#!/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()
|