软件测试项目从明确的测试环境中受益匪浅,产生可重复的结果。自动化GUI测试使用Quish测试也不例外。 Docker容器是定义此类环境的好方法,但是在那里’更多:通过在Docker上实现GUI测试自动化设置,它也变得容易并行化测试执行,并使用Docker Swarm或Kubernetes通过多台计算机分发测试执行。有很多关于使用Docker为此和Docker的文章,它可能会让您想知道:这一切都只是炒作还是有真正的有形益处?

什么’s In It For Me?

那里’很多关于Docker如何影响我们考虑分发和运行软件的方式的谈话,但它’不只是热空气。特别是,Docker容器具有两个与GUI测试自动化高度相关的属性:

  1. 码头容器与系统的其余部分隔离。与传统的虚拟机不同,它们可以在眨眼之间启动和停止。这使得在干净,明确的环境中开始每个测试都可以很快。
  2. Docker容器可以完全独立。 Docker图像(启动容器的模板)可以轻松传输到不同的计算机。这使得通过通过多个主机分发测试执行来缩短测试周期时间非常简单。

让’在Docker容器中使用Quish GUI测试的基本示例进行了如何启动和运行。为了充分利用这一点,基本(但绝不是易于广泛的)理解Docker是非常有益的。如果有疑问,请前往官方Docker网页,看看 Docker概述.

什么进入测试容器?

Docker容器是Docker图像的实例。因此,为了获得可以执行测试的容器,第一步是设计合适的Docker图像。

为了演示,我们将假设

  • 您要测试在Linux上运行的应用程序。
  • 您已经拥有包含您的应用程序(以及其所有依赖项)的基于Linux的Docker映像。

在许多情况下,可以通过组合多个Docker容器,每个运行单个应用程序来构建复杂的应用程序。例如,您可能有一个用于Web服务器的容器和数据库的单独容器。容器之间的通信随后通过网络连接发生。

但是,随着申请(AUT)的应用,QUISHISH非常紧密;而不是在像素坐标上运行,而是对应用程序中的对象层次结构进行深入了解,而是用于用于验证和对象标识的可用性。它’■这种紧密的系统集成,需要将蜂窝线路运行在与AUT相同的容器中。

因此,而不是在一个容器中运行您的AUT并在另一个容器中啜饮,而是生产包含您的应用程序的单个Docker图像以及执行GUI测试所需的所有组件。此图像将基于包含您的AUT的现有Docker映像并扩展。

特别是,测试图像需要包含:

  • 用于模拟应用程序的图形显示以显示用户界面的程序: XVFB.
  • 一个粗糙的安装(包括许可证密钥)。
  • 要执行锻炼AUT构建的测试脚本。

从技术上讲,测试脚本不’t 需要 成为Docker图像的一部分。还可以通过将文件系统路径映射到容器中,在运行时将它们加载到容器中。实际上,这可能是一种可行的方法,以防测试脚本语料库相当大(例如,由于许多屏幕截图)。但是,将测试脚本包装到Docker Image中有两个重要的好处:

  1. 图像变为自包含:运行Docker运行时的任何计算机都可用于执行蜂鸣的测试。
  2. 匹配应用程序构建的测试脚本始终可用:不同的aut构建(例如,应用程序的不同版本)可能暴露不同的功能,因此可能需要不同,可能更广泛的测试套件。

当然,由于我们是关于自动化的,这一切都应该发生任何人类干预!整个过程应该自动发生–通常作为连续集成管道的一部分。

建立码头图像

构建Docker Image意味着采取三个步骤:

  1. 收集应该进入图像的所有文件到一个工作目录中,其内容形成了什么’s called the ‘Docker context’.
  2. 创建一个名为 dockerfile. 这定义了将这些文件的位置以及如何配置图像(例如,安装的其他软件包,设置为哪些环境变量等)。
  3. Docker建立 command.

收集所需的文件

我们需要至少进行一个粗糙的安装来用于运行测试以及执行套件以执行。因此,让我们’s启动通过创建工作目录来保存上下文:

$ mkdir /tmp/workdir

接下来,我们将在该工作目录中安装Quish—由于我们想要测试QT 5.15包,因此 squish-6.6.2-qt515x-linux64.run. 程序包已安装。为了确保在没有我们单击安装程序的情况下发生这种情况,我们将执行一个 无人看管的安装。此外, squish_licensekey_dir. 环境变量被覆盖,使得安装程序将许可证密钥存储在我们的工作目录中:

$ export squish_licensekey_dir.=/tmp/workdir
$ ~/Downloads/squish-6.6.2-qt515x-linux64.run. unattended=1 targetdir=/tmp/workdir/squish licensekey=111-22222-33333-444 ide=0 testcenter=0 menushortcut=0 desktopshortcut=0

当然不是 111-22222-33333-444 您应该指定您的真实许可证密钥。

最后,但并非最不重要的是,我们希望在我们的测试图像中包含一个测试套件。所以我们将其复制到我们的工作目录中:

$ cp -r ~/suite_sample /tmp/workdir

到现在为止还挺好!接下来,我们需要定义一个 dockerfile. 这表达了我们的测试图像基于包含AUT的现有Docker图像以及如何配置测试图像。

写一个dockerfile.

使用我们的工作目录填充,我们需要定义这些文件应该去的位置以及应用于Docker Image的额外配置。

假设调用包含我们应用程序的Docker图像 地址簿:1.0.1 和测试的申请是在 /主页/地址簿/地址 。在创建码头文件时,有很多有用的东西,但我们可以完成’ll离开解释那些 官方Dockerfile. Docs并直接前进到创建一个名为的文件 / tmp / workdir / dockerfile with this content:

dockerfile
# Base our testing image on the standard application image (here: addressbook:1.0.1)
FROM addressbook:1.0.1

# Install some extra dependencies required for Xvfb and Squish
RUN apt-get update && apt-get install -y --no-install-recommends \\
    libxtst6 \\
    libgssapi-krb5-2 \\
    xvfb \\
    && rm -rf /var/lib/apt/lists/*

# Configure important environment variables required for the application under test
# to access the virtual display created by Xvfb.
ENV DISPLAY=:0
ENV LD_LIBRARY_PATH=/home/addressbook

# Copy a Squish installation, a license file and a sample test suite into the image.
COPY squish /root/squish
COPY .squish-3-license /root/.squish-3-license
COPY suite_sample /tmp/suite_sample

# Register the application under test with squishserver
RUN /root/squish/bin/squishserver --config addAUT addressbook /home/addressbook

# Launch the virtual display server Xvfb when starting the container.
CMD ["Xvfb", ":0", "-screen", "0", "1920x1080x24+32"]

这确实是告诉Docker,即我们的形象应该来自于 地址簿:1.0.1 (即包含AUT构建的现有图像),应安装几个附加的Linux软件包(特别是:XVFB),并且应该是活动的环境变量。最后,该文件定义了挤压装置进入 / root /鳞片 squ server 被配置为使得它知道正在测试的应用程序的可执行文件是:IN /主页/地址簿/地址 .

最后,最后一行配置图像,使得当容器启动时,它会自动启动XVFB,即虚拟显示,具有HD分辨率。

通电!

在这一点上,所有这一切’剩下的是触发图像构建。只需更改为工作目录,然后执行 Docker建立 :

$ cd /tmp/workdir
$ docker build -t 地址簿 - 带 - 柔软:1.0.1 .

-T. 参数用于定义生成的码头图像的名称。它’■使用AUT映像名称的变更的一个好主意。由于我们的IUT映像被调用 地址簿:1.0.1,我们去了 地址簿 - 带 - 柔软:1.0.1 但你的里程可能会有所不同。

运行集装箱化测试

看到一切都适合效果,让’s根据我们的图像创建一个容器并启动它:

$ docker run -d 地址簿 - 带 - 柔软:1.0.1
71f150d5c9ccb7e4219ce0f412400839a925f1cf7ea0d15d66ffacd1ab80ca4e

这将在分离模式下启动一个容器;该命令应立即返回,打印唯一标识我们新启动的容器的ID字符串。我们将在随后的命令中使用它。

发生了什么,这是一个新的孤立的环境开始在你的机器上运行。在此环境中,虚拟显示正在运行—但除此之外,它’s idle. So let’s试试考试!

$ docker exec 71f /root/squish/bin/squishrunner --testsuite /tmp/suite_sample --local --reportgen testcenter,http://testcenter/project/addressbook?token=ABCDEF --reportgen junit,/tmp/report.xml

该命令在多行上拆分以进行可读性。这是什么是运行 squ Runner. 命令 里面 具有id的运行容器开始 71f . Note how we didn’T必须指定整个ID—只是第一种字符就足够了。四个论点通过了 squ Runner. :

  • - 当地的 开始A. squ server instance
  • --testsuite. 执行测试套件 / tmp / suite_sample 存储容器
  • - reportgen testcenter,... 将所有测试报告直接发送给 测试中心 instance.
  • - 雷保人junit,... 还可以在JUnit格式中存储任何测试报告(例如,通过连续集成系统处理)

你赢了’实际上看到了很多事情。特别是,您无法看到应用程序的应用程序。这是因为我们的虚拟显示—所有图形交互都在无头模式下发生。最明显的进展指示是由此产生的产出 squ Runner. command.

获取测试报告

使用时 测试中心,无需完成:所有测试结果都立即上传到测试中心实例,因此您可以使用方便的Web界面来分析报告。但是,我们也指示了 squ Runner. 在文件中存储junit格式的额外副本 /tmp/report.xml. 。此文件仅存在于容器中。为了处理它,例如,通过将其送入我们的持续集成系统,我们需要将其从容器中取出。

那里 are multiple approaches to this, each with their own advantages and disadvantages. In our case, a simple Docker CP 命令是最简单的:

$ docker cp 71f:/tmp/report.xml /home/frerich/report.xml.

这将复制文件 /tmp/report.xml. 用ID开始的容器出来 71f 到主机系统上,存储文件 /home/frerich/report.xml. 。此文件现在可以馈送到您的连续集成系统(例如Jenkins)以进行进一步处理。

从这往哪儿走

我们刚刚在完全孤立的独立环境中使用绒面级别执行我们的第一个GUI测试!然而,我们刚刚碰到了表面。还有更多要考虑和做。以下是在考虑在哪里考虑的话题:

  • 可以将测试图像用于其他计算机!一个简单的方法包括呼叫 Docker拯救Docker进口 但更可管理的解决方案是托管自己的解决方案 私人码头注册表 它作为Docker图像的存储库,用于在多台计算机之间共享。
  • 通过将测试报告复制出来通过 Docker CP 适用于小例子。但是,对于还包括屏幕截图和其他工件的较大测试报告,它可能是相当慢的。更好的方法可能是使用 Docker卷 允许将主机目录映射到容器中。这样,写入容器内的特定位置将使文件自动显示在主机上–所有数据都是共享的,不需要复制。
  • 测试图像大于它需要的。这是因为我们没有努力修剪粗糙的安装。只是执行测试套件,不需要像这样的例子,文档或大多数脚本解释器。因此,额外介绍可能有用‘pruning’在构建测试映像时,请从拔出粗糙的安装中删除不需要的文件。
  • 传播多个节点测试并使用负载平衡以确保负载均匀平衡,这将是有用的。 Docker Swarm. 有多种计算机充当群集的方法是一种很好的方法。 Central Manager节点将确保用于测试运行的容器始终被调入计算机,这是免费工作的!

你有没有喜欢码头的技巧,或者是你的东西吗?’D特别喜欢学习?让我们在评论中知道!

发表评论

您的电子邮件地址不会被公开。 必需的地方已做标记 *

复制链接