You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过QFTest验证Java应用的HMI已完全关闭?

QFTest验证Java HMI彻底关闭的解决方案

问题背景

我用QFTest测试Java应用,需要验证关机操作后HMI完全停止运行。原本写了一段Jython脚本,通过尝试向HMI发送套接字来判断——如果发送失败就判定HMI已停止、测试通过。脚本如下:

import threading
import time

rc.setLocal("returnValue", False)
for i in range(50):
    time.sleep(0.5)
    try:
        # 尝试向HMI发送套接字
        rc.toSUT("client", vars)
    except:
        # 发送失败,判定HMI已关闭:测试通过
        rc.setLocal("returnValue", True)
        break

但实际测试中发现,QFTest的Java Agent会阻止应用彻底终止,导致上述套接字检测方法无法准确验证HMI是否完全关闭。

解决方案

1. 主动解绑QFTest Java Agent

在触发HMI关机操作后,先执行QFTest内置的rc.detachSUT("client")命令,主动断开QFTest与被测应用的Agent连接。这一步能解除Agent对应用进程的持有,让应用可以正常退出,避免Agent进程残留影响验证结果。

2. 直接检测操作系统进程状态(替代套接字方法)

解绑Agent后,直接检查HMI对应的Java进程是否存在,这是最直接的验证方式:

  • Windows系统:通过tasklist命令结合进程特征(如窗口标题、主类参数)过滤目标进程
  • Linux/macOS系统:使用pgrep命令匹配HMI的主类名或启动参数

示例Jython代码:

import time
import subprocess

rc.setLocal("returnValue", False)
# 第一步:解绑QFTest Agent
rc.detachSUT("client")

# 循环检测进程状态,最多等待25秒
for i in range(50):
    time.sleep(0.5)
    # Windows示例:替换为你的HMI进程识别条件
    result = subprocess.run(
        ["tasklist", "/fi", "imagename eq java.exe", "/fi", "windowtitle eq HMI_Main_Window"],
        capture_output=True,
        text=True
    )
    # Linux/macOS示例:
    # result = subprocess.run(["pgrep", "-f", "com.yourcompany.hmi.Main"], capture_output=True, text=True)
    
    # 若进程不存在(命令返回非0),判定测试通过
    if result.returncode != 0:
        rc.setLocal("returnValue", True)
        break

3. 结合应用日志验证(可选补充)

如果HMI关机完成时会输出特定日志(如[INFO] HMI shutdown completed successfully),可以在解绑Agent后,监控HMI的日志文件,直到出现该标识再判定测试通过,进一步提升验证的准确性。

内容的提问来源于stack exchange,提问作者Skartt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:05:35