Neptune 3 UI - Squish 自动化 UI 测试
Squish 是 Froglogic 的一个商业产品,用于自动化图形用户界面测试。
这些测试的目标及其设置是为了使我们能够
- 为 Neptune 3 UI、QmlLive 和 Qt 应用程序管理器 提供基本脚本集,以便在 CI 上进行烟雾测试。
- 记录 Qt 自动驾驶套件中的任何特定事项,特别是多进程方面,用户在进行 Squish 自动化 UI 测试时应予以关注。
- 将参考脚本作为 Neptune 3 UI 的一部分提供。
- 允许在 Qt 自动驾驶套件中与 UI 合作的开发者根据需要编写自己的测试。
要使用这些测试,您需要
- Qt 自动驾驶套件
- Squish 安装在测试机器上
注意:Squish 和相关许可证必须从 Froglogic 获取。
设置您的测试环境
Squish 可以在以下环境中运行
- 在 IDE 内部 - 对于大多数开发平台,Squish IDE 都是可用的。
- 作为一个服务 - 交付的服务程序
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,在执行测试时,squishserver
和squishrunner
将在同一台机器上无缝运行。
当您使用命令行时,首先启动服务器再启动客户端。
确保所有用于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.ini
和paths.ini
。有关更多信息,请参阅Squish初始化文件。
注意:测试不能在Neptune 3 UI运行时进行。您需要在运行测试之前确保终止neptune3-ui
进程。
©2019 Luxoft Sweden AB。此处包含的文档贡献是各自所有者的版权。
提供的文档是根据Free Software Foundation发布的GNU自由文档许可证版本1.3的条款进行许可的。
Qt和相应的徽标是芬兰Qt Company Ltd以及/或其他国家/地区的商标。所有其他商标均为其各自所有者的财产。