嵌入式Qt Worker

在嵌入式设备(如ARM32、ARM64架构的Linux系统)中测试Qt应用,往往会面临以下挑战:

  • 硬件资源有限:存储、内存可能仅有256MB甚至更低。
  • 与主机(开发机器)通信通过有线或无线网络,环境复杂。
  • 无法直接在嵌入式设备上运行完整的CukeTest环境。

为了解决这些难题,CukeTest提供了嵌入式Qt Worker方案——通过在嵌入式设备上运行轻量化的Node.js引擎和qt_worker服务进程,您可以在PC主机端继续使用CukeTest完成应用录制和自动化测试,而应用实际运行和操作则在嵌入式设备中进行。

优势与限制

优势:

  1. 轻量级qt_worker的核心组件仅约1MB,大幅降低对存储空间的要求。
  2. 启动快捷:只需在嵌入式设备上启动Node.js引擎并运行qt_worker.js,不需要繁琐的配置过程。
  3. 环境要求低:只需能运行Node.js和Qt应用,无需额外复杂的依赖。

限制:

  1. 依赖Node.js:必须在嵌入式设备上安装一个合适版本的Node.js(可选用较低版本,如Node.js 10以下,使其大小在40MB以内)。
  2. 仅支持Qt自动化:此方案仅用于对Qt应用进行自动化测试,无法用于其他技术栈的GUI自动化。

使用要求

  • 主机端(PC)

    • CukeTest版本 ≥ 1.8.2.203。
  • 嵌入式设备端

    • 一个可运行的 Node.js 引擎(与设备架构匹配,如ARM32、ARM64等)。
    • qtworker_arm32.tar.gzqtworker_x86.tar.gz文件(根据设备架构选择对应版本)。

主机端设置步骤

  1. 在CukeTest中启用嵌入式Qt侦听端口

    • 打开 CukeTest,进入 设置 → 高级
    • 启用 嵌入式 Qt 侦听端口 功能,并设置一个通信端口(例如 9875)。
  2. 重启CukeTest

    • 重启CukeTest后,状态栏左下角会出现一个远程连接标识符。
    • 当嵌入式设备成功连接后,该标识符会变为绿色。

如未看到标识符,请确保已关闭所有CukeTest实例并重启。

使用远程自动化 Worker(可选)

如果您是通过远程自动化 Worker模式在主机端运行CukeTest,可使用 --agent-port 参数设置侦听端口。例如:

cuke worker --agent-port 9875

嵌入式设备端操作步骤

  1. 准备Node.js引擎
    将适用于设备架构的Node.js可执行文件拷贝至设备。

    • 通过 ./node -v 验证Node.js是否可用。
    • 若无执行权限,请用 chmod a+x ./node 赋予可执行权限。
    • 若运行崩溃,请检查Node.js版本与设备架构是否匹配。
  2. 解压qtworker文件
    qtworker_arm32.tar.gzqtworker_x86.tar.gz(根据设备架构选择相应文件)解压缩到当前目录下,例如:

    tar -zxvf qtworker_arm32.tar.gz
    
  3. 启动qt_worker服务
    使用Node.js引擎运行qt_worker.js文件,并指定主机IP和端口。假设主机IP为 192.168.1.2,CukeTest中设置的端口为 9875

    ./node qtworker/qt_worker.js --host 192.168.1.2 --port 9875
    
  4. 连接确认

    • 如果输出显示connected,表示已成功连接到主机。
    • 若出现ECONNREFUSED错误,请检查主机端IP、端口及网络连通性。

在嵌入式设备中运行或录制Qt自动化

当嵌入式设备连接成功后,您在主机端CukeTest中进行的启动录制、回放操作将通过网络在嵌入式设备上执行。注意以下事项:

  • 应用路径以嵌入式设备为准
    在CukeTest中设置启动命令或路径时,请使用嵌入式设备中的文件路径。例如:

    /home/leanpro/addressbook
    

    而非PC本地路径。

  • 录制测试脚本技巧
    如果直接在嵌入式设备上操作不便(如无显示器、键盘鼠标),可先在PC或模拟器上对相同应用进行录制,生成测试脚本后,再切换到嵌入式设备上执行脚本回放。

  • 与普通Qt自动化流程一致
    使用嵌入式Qt Worker后,除了指定侦听端口和连接步骤,其他操作与传统Qt自动化测试流程一致。您仍然可以使用CukeTest中已有的录制、回放和调试功能。

results matching ""

    No results matching ""