Qt应用的启动
在使用CukeTest进行Qt应用的自动化测试时,由于跨平台Qt的自动化机制,应用程序必须以特定方式启动,才能使CukeTest能够正确地控制和侦测应用中的Qt对象。本文将介绍几种常见的启动方法,涵盖从图形界面操作、脚本调用到命令行启动的多种方式,帮助您在不同环境和需求下灵活启动Qt应用。
从界面中启动应用
通过脚本启动应用
通过命令行启动应用(仅限Linux平台)
查看和确认Qt应用的状态
从界面中启动应用
通过CukeTest的图形用户界面(GUI)启动Qt应用是最直观和便捷的方法。以下是具体步骤:
1. 标准启动流程
打开启动对话框
- 在CukeTest的主界面,导航至菜单“工具”->“启动应用...”。
- 或者在模型管理器界面,选择菜单“操作”->“启动应用...”。
配置启动参数
- 在弹出的“启动应用”对话框中,指定可执行文件(
.exe
)的路径。 - 在插件列表中,勾选“qt”选项,确保应用以Qt自动化模式启动。
- 在弹出的“启动应用”对话框中,指定可执行文件(
启动应用
- 点击“运行”按钮,CukeTest将启动指定的Qt应用,并加载Qt Agent以进行自动化控制。
2. 启动自带样例
CukeTest提供了一些内置的样例应用,适用于调试和学习不同技术类型的自动化测试。启动这些样例应用的步骤如下:
- 在菜单栏中选择“工具”->“启动样例”。
- 选择所需的样例应用,点击启动即可。
3. 监听已运行的应用(仅限Windows系统)
如果应用已经通过其他方式启动,CukeTest默认不会对其进行监听。但您可以通过以下步骤手动让CukeTest监听已运行的Qt应用:
- 打开启动应用对话框
- 在模型管理器的菜单栏中选择“操作”->“启动应用...”。
- 选择“已运行应用”
- 在“启动应用”对话框中,切换到“已运行的应用”标签页。
- 点击“侦测”按钮,进入应用侦测模式。
- 选择目标应用
- 将鼠标光标移动到目标Qt应用的窗口,CukeTest会高亮显示鼠标悬停的窗口。
- 点击鼠标左键确认选择。
- 加载Qt Agent
- 对话框将显示侦测到的应用及其进程ID,点击“运行”按钮,为目标Qt应用加载Qt Agent。
- 确认加载成功
- 如果Qt Agent加载成功,模型管理器的状态栏将显示侦测到的Qt信息,表示应用已被成功监听。
通过脚本启动应用
除了通过GUI启动,您还可以在测试脚本中编写代码来启动Qt应用。这种方式适用于大多数自动化测试场景,即在测试用例运行前自动启动应用。脚本中可以通过下面两种方法启动:
启动方法
使用
QtAuto.launchQtProcessAsync()
方法- 该方法来自
leanpro.qt
库中的QtAuto
模块,用于异步启动Qt应用。
- 该方法来自
使用
Application.launch()
方法- 该方法属于
Application
控件,用于启动目标Qt应用。
- 该方法属于
示例代码:
const { BeforeAll } = require('cucumber');
const { Util } = require('leanpro.common');
const { QtAuto } = require('leanpro.qt');
let modelQt = QtAuto.loadModel("model1.tmodel");
BeforeAll(async function () {
// 第一种方式:使用 QtAuto.launchQtProcessAsync()
await QtAuto.launchQtProcessAsync("/usr/lib/cuketest/bin/sample");
// 第二种方式:使用 Application.launch()
await modelQt.getApplication("<App Name>").launch();
// 等待应用启动,最长等待时间为10秒。您可以根据实际情况调整等待时间
await modelQt.getApplication('<App Name>').exists(10);
});
from leanproAuto import QtAuto
modelQt = QtAuto.loadModel("model1.tmodel")
# 第一种方式:使用 QtAuto.launchQtProcessAsync()
QtAuto.launchQtProcessAsync("C:/Program Files/LeanPro/CukeTest/bin/basiclayouts.exe")
# 第二种方式:使用 Application.launch()
modelQt.getApplication("basiclayouts").launch()
# 等待应用启动,最长等待时间为10秒。您可以根据实际情况调整等待时间
modelQt.getApplication("basiclayouts").exists(10)
监听已运行的应用
如果需要监听已通过其他方式启动的Qt应用,可以使用 winHookProcess()
方法(仅限Windows系统),并传入应用的进程对象或进程ID(PID)。
const { QtAuto } = require('leanpro.qt');
// 假设已获取应用的PID
let pid = 12345;
await QtAuto.winHookProcess(pid);
from leanproAuto import QtAuto
# 假设已获取应用的PID
pid = 12345
QtAuto.winHookProcess(pid)
更多详情,请参阅winHookProcess()
方法说明。
通过命令行启动应用(仅限Linux平台)
在Linux平台上,您可以通过命令行启动Qt应用,以便CukeTest能够进行自动化控制。以下方法适用于Linux系统,Windows系统不支持。
1. 通过CukeTest菜单启动Qt终端
在CukeTest的菜单中选择“操作”->“Qt启动终端”。
在打开的终端中,输入被测应用的路径或启动命令来启动应用。
注意:通过CukeTest界面启动的终端会自动设置必要的环境变量。如果希望在其他终端中自行设置环境变量,请参考下述方法2。
2. 设置环境变量LD_PRELOAD
后启动应用
LD_PRELOAD
环境变量用于在应用启动时加载Qt Agent库,以便实现自动化控制。以下是设置和启动应用的步骤:
设置
LD_PRELOAD
环境变量export LD_PRELOAD=/usr/lib/cuketest/bin/agents/libqtagent.so
路径说明:默认情况下,
libqtagent.so
位于/usr/lib/cuketest/bin/agents/
。部分系统中可能位于/opt/apps/com.leanpro.cuketest/files/lib/cuketest/bin/agents/
。启动应用
/usr/lib/cuketest/bin/sample
示例:假设被测应用的路径为
/usr/lib/cuketest/bin/sample
。通过上述命令启动应用后,CukeTest左下角的状态栏将显示应用正在被监听。
注意:
export
命令设置的环境变量仅在当前终端会话中有效。如果在设置环境变量后启动的不是Qt应用,则自动化控制不会生效。详细信息请参见Qt自动化机制。
3. 使用sudo
启动被测应用
有时,被测应用需要以超级用户权限运行。在使用sudo
启动应用时,需要确保LD_PRELOAD
环境变量依然有效。以下是两种处理方式:
在
sudo
命令中直接指定LD_PRELOAD
sudo LD_PRELOAD=/usr/lib/cuketest/bin/agents/libqtagent.so ./yourAppName
继承已设置的
LD_PRELOAD
环境变量假设已通过
export
命令设置了LD_PRELOAD
,则可以在sudo
命令中引用该变量:sudo LD_PRELOAD=$LD_PRELOAD ./yourAppName
说明:
yourAppName
为被测应用的名称或路径。
4. 通过脚本文件*.sh
启动被测应用
为了简化启动流程,您可以编写一个Shell脚本文件,自动设置环境变量并启动应用。步骤如下:
创建并赋予执行权限
touch startByCuke.sh chmod a+x startByCuke.sh
提示:如果被测应用本身已经是一个Shell脚本文件,可以复制一份并重命名:
cp start.sh startByCuke.sh
编辑脚本文件
在
startByCuke.sh
中添加以下内容:#!/bin/bash export LD_PRELOAD=/usr/lib/cuketest/bin/agents/libqtagent.so # 设置环境变量 /usr/lib/cuketest/bin/sample # 启动被测应用
说明:
export LD_PRELOAD=...
:设置加载Qt Agent的环境变量。/usr/lib/cuketest/bin/sample
:启动被测应用的命令。
运行脚本
在终端中执行脚本文件:
./startByCuke.sh
运行后,您将看到被测应用启动,同时CukeTest左下角的状态栏会显示应用正在被监听。
查看和确认Qt应用的状态
启动Qt应用后,您可以通过CukeTest的状态栏和模型管理器来查看和确认应用的运行状态及相关信息。
- 状态栏显示
- 在CukeTest的主界面或模型管理器界面,状态栏将显示被侦测的Qt应用信息,包括应用名称、路径、进程ID(PID)及使用的Qt版本。
- 查看详细信息
- 点击状态栏上的Qt信息图标,可以弹出详细的应用信息窗口,进一步查看应用的具体属性和状态。
- 模型管理器中的应用信息
- 在模型管理器中,右击根节点选择“启动应用”,启动被测应用后,模型管理器会自动获取应用中的所有可识别控件。
- 选择对象树中的任意控件,应用窗口中的对应控件将被高亮显示,便于确认和调试。
如何确定Qt应用使用的技术?
有时,您可能不确定待测应用使用的是哪种Qt技术(如Qt Widgets还是Qt Quick),甚至不确定是否为Qt应用。以下两种方法可以帮助您确定应用所使用的Qt技术。
1. 使用模型管理器确定
模型管理器是CukeTest中的一个重要工具,它在侦听被测应用时会加载相应的自动化插件。通过观察模型管理器中识别到的控件类型,您可以推断应用所使用的Qt技术。
2. 使用第三方工具Process Explorer确定
Process Explorer是一个功能强大的系统监控工具,可以查看应用的依赖库,帮助您确定应用使用的技术。