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()
|