Squish for VNC教程

学习如何在远程显示(例如VNC)上测试应用程序。

教程:使用开始测试远程应用程序

Squish自带有IDE和命令行工具。使用 squishide 是开始测试最简单、最佳的方式,但一旦创建了大量的测试,您可能希望自动化它们。例如,进行回归测试套件的夜间运行。因此,了解如何使用可以从批处理文件或shell脚本中运行的命令行工具是很有价值的。

注意:如果您需要一些视频指导,可在Qt Academy处的45分钟在线课程关于Squish基本使用

Squish概念

Squish for VNC可以有两种使用方式:

  1. 使用VNC协议,只需要在测试系统上安装和运行VNC服务器。
  2. 本机方式,这种情况下,Squish for VNC必须在测试驱动器和测试系统上安装和运行。

在这两种情况下,Squish运行一个小服务器(squishserver),负责处理虚拟AUT和测试脚本之间的通信。我们称AUT为虚拟的,因为它实际上是代表了squishserver和远程显示之间开放的VNC或"本机"网络连接。当连接终止时,我们就说AUT没有运行。

测试脚本是由squishrunner工具执行的,它反过来会连接到squishserver。squishserver启动虚拟AUT,或者建立远程显示连接,并将Squish钩子注入其中。钩子是一个小型库,它使虚拟AUT可访问并与squishserver通信。钩子就位后,squishserver可以自动化远程显示,并代理squishrunner执行命令。squishrunner请求虚拟AUT执行测试脚本指定的任何操作。

以下图表说明了单个Squish工具的两种协同工作方式。第一个展示了最常见的使用案例,即使用Squish自动化运行VNC服务器的显示。在这种情况下,不需要在测试系统上安装或配置任何

"Using Squish for VNC with the VNC Protocol"

第二个图表展示了在测试系统上安装和配置了squishserver的情况。在这种情况下,测试可以使用Squish自带的本地专有远程协议,该协议允许类似的远程控制和显示。

"Using Squish for VNC with the Native protocol"

创建测试套件

测试套件是一组一个或多个测试案例(测试)。使用测试套件很方便,因为它可以轻松地在测试之间共享测试脚本和测试数据。

开始时,启动 squishide,通过单击或双击squishide图标,或从任务栏菜单启动squishide,或者在命令行中执行squishide——选择您喜欢的方式,并适合您所使用的平台。一旦Squish启动,您可能会看到一个欢迎页面(如果这是您第一次启动squishide)。点击右上角的工作台按钮来关闭它。然后,squishide将看起来类似截图,但由于窗口系统、颜色、字体和主题等因素,可能略有不同。

"The Squish IDE with no Test Suites"

Squish启动后,点击< assisted>文件 > 新建测试套件,将弹出下面的新建Squish测试套件向导

"Name & Directory page"

请输入测试套件名称并选择存储该测试套件的文件夹。在屏幕截图中,我们将其命名为 suite_py 并将其放置在 addressbook 文件夹内。(对于您的自己的测试,您可能使用更有意义的名称,例如 "suite_addressbook";我们选择 "suite_py",因为在教程中我们将创建多个套件,每个套件对应 Squish 支持的每种脚本语言。)当然,您可以选择您喜欢的任何名称和文件夹。详情填写完成后,请点击 下一步 继续到工具包(或脚本语言)页面。

"Toolkit page"

在这个向导页面上,我们选择我们所使用的 Squish 版本。在这个示例中,我们选择 VNC,因为我们正在自动化远程桌面。然后点击 下一步 继续到脚本语言页面。

"Scripting Language page"

选择您想要的任何脚本语言——唯一的要求是每个测试套件只能使用一种脚本语言。(所以如果您想使用多种脚本语言,只需创建多个测试套件,每个套件对应您想使用的每种脚本语言。)Squish 为所有语言提供相同的功能。在选择脚本语言后,再次点击 下一步 以到达向导的最后一页。

使用 VNC 协议进行桌面自动化的设置

如果需要使用 VNC 协议,从 协议 下拉菜单中选择 VNC。从这里您可以配置 Squish 如何连接到远程目标。

"VNC connection page"

在此表单中,您可以输入针对您特定 VNC 服务器所需的设置。

  1. 输入运行 VNC 服务器的主机的主机名。
  2. 如果您的 VNC 服务器使用自定义端口,请输入它,否则 Squish 将使用 VNC 的默认端口(5900)。
  3. Squish for VNC 支持基本身份验证,因此如果您的 VNC 服务器只能通过有效的用户名密码组合访问,请在此处输入。

为了避免在测试用例中硬编码密码,Squish 提供了一个单独的 GUI 用于输入密码,以及一个单独的文件用于存储它们。初始时,密码 下拉列表为空。您可以通过点击该下拉列表右侧的 编辑 来添加条目。将弹出一个 密码 对话框。

"Passwords Dialog"

在此处可以添加密码,并且可以从 测试套件设置密码信息 选项卡中稍后添加/修改。

使用原生协议进行桌面自动化的设置

如果在连接设置中选择的协议是 原生,这意味着我们将在 squishrunner 和 squishserver 之间使用 Squish 的远程控制协议,而不是 VNC,并且 squishserver 必须安装在测试系统中并运行。

首先,在测试系统中执行以下步骤

  1. 安装 Squish for VNC
  2. 编辑 SQUISHDIR/etc/squishserverrc 并包括允许的主机 IP 地址。有关详细信息,请参阅 分布式测试
  3. 从命令行启动 squishserver(请使用默认端口或选择一个端口号)。

注意: 在整个手册中,我们经常提到 SQUISHDIR 目录。这表示 Squish 的安装目录,可能是 C:\Squish/usr/local/squish/opt/local/squish 或其他,具体取决于您安装的位置。确切的路径无关紧要,只要您在看到本手册中的路径和文件名时,将 SQUISHDIR 目录转换为实际目录。

接下来,在测试驱动器系统上,在squishide中进入首选项 > Squish > 服务器 > 添加 > 远程服务器,并输入被测试系统的IP地址(如果您在启动squishserver时指定了端口,还包括端口号)。

完成新测试套件向导后,可以从测试套件设置 > 连接信息中稍后配置连接参数。

此配置是在需要启动虚拟AUT时使用的,即您记录或播放测试,或明确选择运行 > 启动AUT

我们现在准备开始创建测试。

"The suite_py test suite"

记录测试和验证点

Squish使用测试套件指定的脚本语言记录测试。一旦记录了一个测试,我们可以运行该测试,Squish将忠实于我们记录测试时执行的所有操作,但不会出现人类容易出现的、电脑不需要的暂停。同样,我们也可以编辑已记录的测试,或者将已记录测试的部分复制到手动创建的测试中,正如我们在教程的后半部分将看到的。

记录将制作成现有的测试用例。您可以通过以下方式创建新脚本测试用例

  • 选择文件 > 新测试用例以打开新Squish测试用例向导,输入测试用例名称,然后选择完成
  • 点击测试用例标签右侧的新脚本测试用例 )工具栏按钮。这将创建一个带有默认名称的新测试用例,您可以轻松更改。

给新的测试用例命名为“tst_general”。

Squish将自动在测试套件文件夹内以该名称创建一个子文件夹,并创建一个测试文件,例如test.py。如果您选择JavaScript作为脚本语言,文件名为test.js,对于Perl、Ruby或Tcl也是相应的。

"The tst_general test case"

如果您收到的是“Hello World”脚本而不是.feature文件样本,则点击运行测试套件)左侧的箭头,并选择新脚本测试用例)。

要使测试脚本文件(如test.jstest.py)显示在编辑器视图中,根据首选项 > 常规 > 打开模式设置,点击或双击测试用例。这将选择脚本作为活动选项,并使其相应的录制)和运行测试)按钮可见。

复选框用于控制在点击运行测试套件)工具栏按钮时运行哪些测试用例。我们还可以通过点击单个测试用例的运行测试)按钮来运行单个测试用例。如果测试用例当前未处于活动状态,则按钮可能不可见,直到鼠标悬停在其上。

最初,脚本的 main()Hello World 发送到测试结果。要手动创建测试,就像我们在教程中稍后会做的,我们必须创建一个 main 函数,并应在顶部导入相同的导入语句。main 的名字在 Squish 中有特殊的含义。测试可以包含尽可能多的函数和其他代码,这取决于脚本语言的支持。但是,当你执行测试(即运行测试)时,Squish 总是执行 main 函数。你可以像在如何创建和使用共享数据和共享脚本中描述的那样在测试脚本之间共享常用代码。

Squish 还有另外两个具有特殊含义的函数名:cleanupinit。更多详情,请参阅创建测试器特殊函数

一旦创建了新的测试用例,我们可以自由地手动编写测试代码或录制测试。点击测试用例的 录制 )按钮,可以替换测试代码为新的录制。或者,您可以将录制片段插入到现有的测试用例中,具体方法请参阅如何编辑和调试测试脚本

录制第一个测试

我们现在准备录制第一个测试。点击 测试套件视图 的测试用例列表中显示的 tst_general 测试用例右侧的工具栏中的 录制 )按钮。这会导致 Squish 连接到 squishserver,隐藏 squishide,打开 控制栏,以及 Squish 远程控制 窗口,该窗口显示目标显示器的屏幕。这个窗口将是你与远程服务器交互的方式。

"The Remote Control window of Squish for VNC"

"The Squish Control Bar"

录制鼠标点击

虽然远程显示会对你鼠标的反应,但 Squish 远程控制 窗口可以直接录制按键,但不能录制鼠标点击。要插入鼠标点击,请使用 插入 )下拉按钮(位于 控制栏 上,也位于 Squish 远程控制 窗口中),结合 图像OCR,以选择所需点击的位置。这有助于避免使用桌面坐标录制鼠标点击的需要。有关更多信息,请参阅图像测试怎么做

插入校验

您可以从 控制栏Squish 远程控制 窗口,点击 验证 以打开下拉菜单。从这里,您可以选择验证 搜索图像OCR 文本。有关 OCR 搜索和验证的更多信息,请参阅 OCR 设置

完成录制后,按下 停止录制 )以将其保存为脚本。

如果录制的测试未出现,请单击(或根据您的平台和设置双击)tst_general 测试用例;Squish 将在编辑器窗口中显示测试的 test.py 文件,如图所示。

测试录制完成后,我们可以尝试播放它,即运行它。这本身就有用的地方,如果播放失败,可能意味着我们忘记在某处插入鼠标点击。此外,我们会检查插入的每个验证点。

在回放测试时,可以通过远程控制按钮()隐藏/显示Squish远程控制窗口。然而,打开和关闭Squish远程控制窗口并不等同于启动和停止虚拟AUT。要实际关闭虚拟AUT的VNC或本地连接,请使用退出AUT按钮()。

当图像搜索失败

使用图像搜索,播放可能因预期图像与实际图像之间的单一不同像素而失败。例如,可能由于硬件更改、颜色配置文件、环境亮度(对于配备光传感器的设备)、白天时间(例如日间模式与夜间模式)、有损压缩或次像素反锯齿渲染而存在差异。或者图像可能不同,需要重新获取。

"Image Not Found dialog"

如果发生这种情况,将弹出未找到图像对话框。此时,您可以做很多事情。

  • 如果期望的图像已过时,您可以从当前桌面更新图像。
  • 如果您想为此特定语句放宽图像搜索参数,可以点击调整搜索参数
  • 如果您想根据当前实际匹配预期的程度应用默认容错图像搜索,请点击尝试自动修复图像搜索错误,然后点击更改默认值

    您可以在测试套件设置 > 图像搜索中查看或设置测试套件的默认容差级别。

录制片段

播放结束后,虚拟AUT终止。此时,Squish远程控制窗口变为红色,不响应用户事件,或变得不可见。通过选择运行 > 启动AUT,重新建立VNC或本地连接,Squish远程控制窗口响应用户的鼠标和键盘操作,并可以作为远程显示的终端使用。

此时,squishide处于监视视角,既不录制也不播放测试用例。将光标聚焦到测试脚本中的任何位置,然后点击记录)将片段插入到该位置。点击停止录制)查看片段已插入测试脚本。

©2024 The Qt Company Ltd. 包含在此处的文档贡献的版权属于他们各自的所有者。
提供的文档根据自由文档许可版本1.3的条款进行许可,该许可由自由软件基金会发布。
Qt及其相关标志是芬兰及其它国家Qt公司的商标。所有其他商标均为其各自所有者的财产。