#!/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()