Neptune 3 UI - Squish 自动化 UI 测试

Squish 是 Froglogic 的一个商业产品,用于自动化图形用户界面测试。

这些测试的目标及其设置是为了使我们能够

  • Neptune 3 UIQmlLiveQt 应用程序管理器 提供基本脚本集,以便在 CI 上进行烟雾测试。
  • 记录 Qt 自动驾驶套件中的任何特定事项,特别是多进程方面,用户在进行 Squish 自动化 UI 测试时应予以关注。
  • 将参考脚本作为 Neptune 3 UI 的一部分提供。
  • 允许在 Qt 自动驾驶套件中与 UI 合作的开发者根据需要编写自己的测试。

要使用这些测试,您需要

注意:Squish 和相关许可证必须从 Froglogic 获取。

设置您的测试环境

Squish 可以在以下环境中运行

  1. 在 IDE 内部 - 对于大多数开发平台,Squish IDE 都是可用的。
  2. 作为一个服务 - 交付的服务程序 squishserver 与 IDE 一起分发,或可以从嵌入式源包中适配。该源包在不同的平台上运行,可从 Froglogic 下载。

所提到的目标嵌入式系统是 Yocto Linux x64 build,在 Qt 自动驾驶套件中可以安装为 Intel NUC

测试提供在 Neptune 3 UI 的 squishtest 子文件夹中,可以直接将其作为套件导入 Squish IDE。

测试中的应用程序(AUT)

无论您使用 Squish IDE 还是 squishserver,都必须定义所有 AUT,包括从 Neptune 3 UI 应用的内部调用的所有子过程。对于多进程,所有 Neptune 3 UI 应用 都以 appman-launcher-qml 进程运行。

为了区分并连接这些进程,您需要使用扩展 Squish 可附加 AUT 功能的 Squish 钩子插件。必须修改 server.ini 文件以指定 Neptune 3 UI 和其他 AUT 所在的位置。

因为在多进程中,所有 Neptune 3 UI 应用都必须通过 Squish 的可附加 AUT 功能连接,因此这些应用必须定义为具有相应端口号的可附加 AUT。此外,server.ini 中的端口号必须与其 info.yaml 清单文件中作为 squishPort 属性定义的端口号相匹配。

注意:Neptune 3 UI 应用及其清单文件位于 neptune3/apps 中)。

要从 IDE 直接运行这些测试,可能并建议在该 IDE 中添加或修改AUTs 及其端口号。

有关更多详细信息,请参阅 Squish 初始化文件

[General]
AUT/appman = "/home/user/qt/bin"
AUT/appman-launcher-qml = "/home/user/qt/bin"
AUT/neptune3-ui = "/home/user/install/neptune3"
attachableAUT/neptune3-ui = "localhost:3334"
attachableAUT/appman = "localhost:7777"
attachableAUT/app_appstore = "localhost:7720"
attachableAUT/app_calendar = "localhost:7721"
attachableAUT/app_climate = "localhost:7722"
attachableAUT/app_cluster = "localhost:7723"
attachableAUT/app_downloads = "localhost:7724"
attachableAUT/app_hud = "localhost:7725"
attachableAUT/app_map = "localhost:7726"
attachableAUT/app_music = "localhost:7727"
attachableAUT/app_phone = "localhost:7728"
attachableAUT/app_settings = "localhost:7729"
attachableAUT/app_sheets = "localhost:7730"
attachableAUT/app_tuner = "localhost:7731"
attachableAUT/app_vehicle = "localhost:7732"

排除干扰子进程

通常,Squish会尝试连接从初始AUT创建的所有子进程。然而,这种行为可能导致Squish停止,不创建这些进程,或者导致这些进程无法按预期运行。

记住,这些进程也可以是外部程序或服务,在我们的例子中是

  • D-Bus进程
  • remotesettings-server

因此,对于Neptune 3 UI,您需要强制Squish忽略这些进程以运行测试。否则,这些测试可能从一开始就失败 - 例如,由于D-Bus会话已停止。

忽略这些进程,您需要添加或编辑Squish安装目录中的ignoredauts.txt文件。对于macOS和其他Unix-like操作系统,该文件位于SQUISHDIR/etc/

对于Linux,进行以下更改

# ignore the following processes
remotesettings-server
dbus-daemon

对于其他操作系统,您可能需要修改D-Bus进程名称。

注意:最好忽略测试套件中所有无关的子进程创建。

附加库

Squish需要额外的Qt库来运行Neptune 3 UI测试。一种解决方案是将以下库从您的安装文件夹复制到Squish的安装库文件夹SQUISHDIR/etc/lib

  • libQt5Widgets.so
  • libQt5QuickWidgets.so

注意:不同的Qt版本:如果Squish版本的Qt与Neptune 3 UI中使用的Qt版本不同,当测试开始时,您可能会在squishserver日志中看到警告,指出
"加载的Qt版本X(xx)与Squish/Qt期望版本X(yy)不同,自动化此AUT可能不起作用。"
目前,随着Neptune 3 UI的5.12和Squish的5.11,尚未出现问题,并且可以使用附加库运行测试;但此警告不能忽略。

从命令行或目标运行Squish

一旦您设置了测试环境,您可以选择通过Squish IDE、命令行或作为服务运行测试:例如,对于您的Yocto环境目标的systemd服务(推荐)。

请记住,在使用Neptune 3 UI之前先使用D-Bus会话,因为这是Neptune 3 UI与其子进程通信的方式。

通常,对于简单情况,您可以使用服务器,squishserver,来运行测试,以及相应的客户端,squishrunner,它可以请求服务器运行这些测试并返回结果。

AUT位于服务器端,测试用例从squishrunner发送到squishserver;它们不需要存储在测试机器上。如果您使用Squish IDE,在执行测试时,squishserversquishrunner将在同一台机器上无缝运行。

当您使用命令行时,首先启动服务器再启动客户端。

确保所有用于squishrunner的IP地址都能连接到squishserver。在squishserver上,这些信息存储在$SQUISH_DIR/etc/squishserverrc中。确保IP范围匹配,localhost始终有效。

服务器以以下方式启动

$SQUISH_DIR/bin/squishserver --port 3333

注意:squishserver有一个默认端口:4322

将目录切换到Neptune 3 UI安装中的squishtest路径,并使用以下命令运行单个测试用例

$SQUISH_DIR/bin/squishrunner --host SQUISH_SERVER_IP --port 3333 --testsuite suite_neptune3 --testcase tst_popup_climate

测试用例在客户端运行,并将结果返回。

在目标环境中压缩(Yocto)

您可以在已安装Neptune 3 UI的目标硬件上添加测试环境。如前所述,对于Yocto环境,您需要使用Yocto SDK创建自定义的squishserver。可以从Froglogic网站下载squish-embedded源代码包。此外,您还需要有一个二进制桌面Squish安装以使用squishidl命令。

创建自定义(Yocto)Squishserver

Yocto环境是x64 Linux,但与标准Ubuntu x64版本不同,Yocto中的库存储在/lib64而不是/lib

单独下载并安装Yocto SDK,或从您的Qt Automotive Suite安装(Qt Automotive Suite,Intel NUC)中使用它。

接下来,从Froglogic网站下载squish-embedded源代码包squish-x.x.x-qt-embedded-src.tar.gz

为了启用交叉编译,运行以下命令

source <SDK-install-location>/environment-setup-corei7-64-poky-linux

然后,将目录更改到squish-embedded源代码包所在位置。通常,二进制桌面版本安装在网络地址SQUISH_DIR

mkdir -p yocto/build && cd yocto/build

连续运行以下两个命令

../../configure --with-qmake=<SDK-install-location>/sysroots/x86_64-pokysdk-linux/usr/bin/qmake --enable-qmake-config --with-squishidl=$SQUISH_DIR/bin/squishidl --disable-all --enable-qt --enable-server
./build

接下来,创建一个目标目录

mkdir ../install

构建和安装Yocto到其中。然后,创建一个存档文件以便于传输和存储。请确保使用与Squish相同的版本。

./build install DESTDIR=../install && tar cfz ../squish-x.x.x-qt-yocto.tgz ../install

在目标硬件上安装和设置自定义Yocto Squishserver

在Neptune 3目标上受影响的目录结构是

./home/root
./home/.squish
./opt
./opt/squish

在目标上执行以下步骤

  • squish.x.x.x-qt.yocto.tgz解压缩到/opt/squish-for-qt-x.x.x中,并根据需要将其目录重命名为版本号。
  • 为了方便,从您创建的目录创建一个到/opt/squish的符号链接。将此符号链接视为您的$SQUISH_DIR
  • 根据您的网络配置编辑$SQUISH_DIR/etc/squishserverrc
  • 编辑$SQUISH_DIR/etc/ignoredauts.txt以排除干扰的子进程。
  • 将您的许可证密钥放在/home/root目录中。
  • 从您本地机器的工作Squish安装目录传输$USER\.squish配置文件。此目录是您第一次启动Squish IDE时创建的。
  • 然后,根据Neptune 3 UI安装路径适应路径:/opt/。涉及的文件是.squish/ver1/子文件夹中的server.inipaths.ini。有关更多信息,请参阅Squish初始化文件

注意:测试不能在Neptune 3 UI运行时进行。您需要在运行测试之前确保终止neptune3-ui进程。

©2019 Luxoft Sweden AB。此处包含的文档贡献是各自所有者的版权。
提供的文档是根据Free Software Foundation发布的GNU自由文档许可证版本1.3的条款进行许可的。
Qt和相应的徽标是芬兰Qt Company Ltd以及/或其他国家/地区的商标。所有其他商标均为其各自所有者的财产。