Qt应用的启动

在使用CukeTest进行Qt应用的自动化测试时,由于跨平台Qt的自动化机制,应用程序必须以特定方式启动,才能使CukeTest能够正确地控制和侦测应用中的Qt对象。本文将介绍几种常见的启动方法,涵盖从图形界面操作、脚本调用到命令行启动的多种方式,帮助您在不同环境和需求下灵活启动Qt应用。

从界面中启动应用

通过脚本启动应用

通过命令行启动应用(仅限Linux平台)

查看和确认Qt应用的状态

从界面中启动应用

通过CukeTest的图形用户界面(GUI)启动Qt应用是最直观和便捷的方法。以下是具体步骤:

1. 标准启动流程

启动应用对话框

  1. 打开启动对话框

    • 在CukeTest的主界面,导航至菜单“工具”->“启动应用...”。
    • 或者在模型管理器界面,选择菜单“操作”->“启动应用...”。
  2. 配置启动参数

    • 在弹出的“启动应用”对话框中,指定可执行文件.exe)的路径。
    • 在插件列表中,勾选“qt”选项,确保应用以Qt自动化模式启动。
  3. 启动应用

    • 点击“运行”按钮,CukeTest将启动指定的Qt应用,并加载Qt Agent以进行自动化控制。

2. 启动自带样例

CukeTest提供了一些内置的样例应用,适用于调试和学习不同技术类型的自动化测试。启动这些样例应用的步骤如下:

  1. 在菜单栏中选择“工具”->“启动样例”。
  2. 选择所需的样例应用,点击启动即可。

3. 监听已运行的应用(仅限Windows系统)

如果应用已经通过其他方式启动,CukeTest默认不会对其进行监听。但您可以通过以下步骤手动让CukeTest监听已运行的Qt应用:

  1. 打开启动应用对话框
    • 在模型管理器的菜单栏中选择“操作”->“启动应用...”。
  2. 选择“已运行应用”
    • 在“启动应用”对话框中,切换到“已运行的应用”标签页。
    • 点击“侦测”按钮,进入应用侦测模式。
  3. 选择目标应用
    • 将鼠标光标移动到目标Qt应用的窗口,CukeTest会高亮显示鼠标悬停的窗口。
    • 点击鼠标左键确认选择。
  4. 加载Qt Agent
    • 对话框将显示侦测到的应用及其进程ID,点击“运行”按钮,为目标Qt应用加载Qt Agent。
  5. 确认加载成功
    • 如果Qt Agent加载成功,模型管理器的状态栏将显示侦测到的Qt信息,表示应用已被成功监听。

通过脚本启动应用

除了通过GUI启动,您还可以在测试脚本中编写代码来启动Qt应用。这种方式适用于大多数自动化测试场景,即在测试用例运行前自动启动应用。脚本中可以通过下面两种方法启动:

启动方法

  1. 使用 QtAuto.launchQtProcessAsync() 方法

    • 该方法来自leanpro.qt库中的QtAuto模块,用于异步启动Qt应用。
  2. 使用 Application.launch() 方法

    • 该方法属于Application控件,用于启动目标Qt应用。

示例代码:

JavaScript
Python
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)。

JavaScript
Python
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终端

  1. 在CukeTest的菜单中选择“操作”->“Qt启动终端”。

  2. 在打开的终端中,输入被测应用的路径或启动命令来启动应用。

    注意:通过CukeTest界面启动的终端会自动设置必要的环境变量。如果希望在其他终端中自行设置环境变量,请参考下述方法2。

2. 设置环境变量LD_PRELOAD后启动应用

LD_PRELOAD环境变量用于在应用启动时加载Qt Agent库,以便实现自动化控制。以下是设置和启动应用的步骤:

  1. 设置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/

  2. 启动应用

     /usr/lib/cuketest/bin/sample
    

    示例:假设被测应用的路径为/usr/lib/cuketest/bin/sample

    通过上述命令启动应用后,CukeTest左下角的状态栏将显示应用正在被监听。

    注意export命令设置的环境变量仅在当前终端会话中有效。如果在设置环境变量后启动的不是Qt应用,则自动化控制不会生效。详细信息请参见Qt自动化机制

3. 使用sudo启动被测应用

有时,被测应用需要以超级用户权限运行。在使用sudo启动应用时,需要确保LD_PRELOAD环境变量依然有效。以下是两种处理方式:

  1. sudo命令中直接指定LD_PRELOAD

     sudo LD_PRELOAD=/usr/lib/cuketest/bin/agents/libqtagent.so ./yourAppName
    
  2. 继承已设置的LD_PRELOAD环境变量

    假设已通过export命令设置了LD_PRELOAD,则可以在sudo命令中引用该变量:

     sudo LD_PRELOAD=$LD_PRELOAD ./yourAppName
    

    说明yourAppName为被测应用的名称或路径。

4. 通过脚本文件*.sh启动被测应用

为了简化启动流程,您可以编写一个Shell脚本文件,自动设置环境变量并启动应用。步骤如下:

  1. 创建并赋予执行权限

     touch startByCuke.sh
     chmod a+x startByCuke.sh
    

    提示:如果被测应用本身已经是一个Shell脚本文件,可以复制一份并重命名:

     cp start.sh startByCuke.sh
    
  2. 编辑脚本文件

    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:启动被测应用的命令。
  3. 运行脚本

    在终端中执行脚本文件:

     ./startByCuke.sh
    

    运行后,您将看到被测应用启动,同时CukeTest左下角的状态栏会显示应用正在被监听。

查看和确认Qt应用的状态

启动Qt应用后,您可以通过CukeTest的状态栏和模型管理器来查看和确认应用的运行状态及相关信息。

状态栏中的Qt服务

  1. 状态栏显示
    • 在CukeTest的主界面或模型管理器界面,状态栏将显示被侦测的Qt应用信息,包括应用名称、路径、进程ID(PID)及使用的Qt版本。
  2. 查看详细信息
    • 点击状态栏上的Qt信息图标,可以弹出详细的应用信息窗口,进一步查看应用的具体属性和状态。
  3. 模型管理器中的应用信息
    • 在模型管理器中,右击根节点选择“启动应用”,启动被测应用后,模型管理器会自动获取应用中的所有可识别控件。
    • 选择对象树中的任意控件,应用窗口中的对应控件将被高亮显示,便于确认和调试。

如何确定Qt应用使用的技术?

有时,您可能不确定待测应用使用的是哪种Qt技术(如Qt Widgets还是Qt Quick),甚至不确定是否为Qt应用。以下两种方法可以帮助您确定应用所使用的Qt技术。

1. 使用模型管理器确定

模型管理器是CukeTest中的一个重要工具,它在侦听被测应用时会加载相应的自动化插件。通过观察模型管理器中识别到的控件类型,您可以推断应用所使用的Qt技术。

2. 使用第三方工具Process Explorer确定

Process Explorer是一个功能强大的系统监控工具,可以查看应用的依赖库,帮助您确定应用使用的技术。

results matching ""

    No results matching ""