利用Docker实现分布式Web自动化

前言

随着 Docker 的发展,许多测试人员已经开始在测试工作中使用 Docker 作为环境基础进行自动化测试。本文主要介绍如何在 Docker 中使用浏览器进行自动化测试,并实现可视化操作。

开篇

首先,让我们了解有头浏览器和无头浏览器的区别。有头浏览器是我们平常使用的可以看到图形化界面并与用户交互的浏览器,而无头浏览器则是一种没有界面的浏览器。

对于无头浏览器来说,它具备了浏览器的所有功能,只是没有界面,省去了可视化部分,也就是去除了用户交互的部分。这样做对于提高浏览器整体运行效率、提高自动化测试的兼容性和稳定性有着积极的作用。目前,业界最流行的无头浏览器是 Puppeteer 和 PhantomJS,但是后者已经不再维护。

图片[1]-利用Docker实现分布式Web自动化-山海云端论坛

大部分部署在 Docker 中的浏览器都是无头的,因为 Docker 本身不提供用户界面。因此,制作浏览器镜像时通常会优先考虑无头浏览器。

然而,使用 Docker 中的无头浏览器时,测试人员可能会遇到一个问题,即无法模拟浏览器外部的交互,比如上传文件这类用例基本上是无法实现的。因此,无头浏览器在 Docker 环境中作为自动化测试载体存在一定的局限性。但是,有局限性就意味着有突破的方法。接下来,我们将介绍在 Docker 中如何使用有头浏览器进行自动化测试。

从上面的问题中,我们可以引出一个测试需求,即如何在 Docker 上进行浏览器测试,以达到与在桌面环境中进行深度交互的运行效果。下面的效果展示了我们要实现的目标:

通过这个示例,大家应该已经对如何在 Docker 中使用有头浏览器进行自动化测试有了一定的了解。接下来,我们将介绍实现这一目标所需的技术栈和构建过程。

技术栈

除了浏览器的驱动和 Docker 本身之外,本次分享的重点是支持在图形界面化的 Docker 中运行浏览器的技术栈。其中主要的几个模块和组件包括 Xvfb、VNC 和 noVNC。

1. Xvfb

Xvfb 是 X virtual framebuffer 的简写,它的主要作用是可以代替完整的 X server 的功能。简单来说,它可以以虚拟的方式模拟程序在有图形界面条件下的运行情况。大部分 Docker 中的无头浏览器都使用了 Xvfb,因此它是最重要的模块之一。如果没有 Xvfb 的支持,本文的主题就不会存在。

对于 Docker 容器,需要安装 Xvfb。以 Ubuntu 镜像环境为例:

<code>FROM ubuntu RUN apt-get update && apt-get install -y xvfb</code>

在 Dockerfile 中安装好 Xvfb 后,可以通过以下方式运行:

<code>Xvfb :99 -ac 2>/dev/null & export DISPLAY=:99</code>

验证是否启动成功:

<code>firefox</code>

如果能够启动 Firefox 并正常显示,就说明 Xvfb 已经成功运行。

2. VNC

VNC 是 Virtual Network Console 的缩写,是业界优秀的远程桌面控制组件。它分为 vncviewer 和 vncserver 两个模块。VNC 的运行原理是基于 TCP/IP 实现的,其中 vncserver 扮演了双重角色。VNC 协议是基于 RFB 协议实现的,其传输方式包括 RFB 协议传输和 X 协议传输。VNC 服务器通过 WebSockets 实现,但目前大多数 VNC 服务器都不支持 WebSockets。因此,需要一个代理来实现 WebSockets 和 TCP sockets 之间的转换,这个代理就是 noVNC 中的 Websockify。

3. noVNC

noVNC 是一个 HTML5 VNC 客户端,采用 HTML5 WebSockets、Canvas 和 JavaScript 实现。noVNC 主要用于在 Web 页面上显示 VNC 图像。noVNC 通过 WebSockets 实现,但目前大多数 VNC 服务器都不支持 WebSockets。因此,需要 Websockify 来进行转换。

最终实现的效果如下:

图片[2]-利用Docker实现分布式Web自动化-山海云端论坛

以上就是如何使用 Docker 实现分布式 Web 自动化的详细介绍。通过 Docker 中的有头浏览器,我们可以实现在 Web 界面上对 Linux 操作系统进行操作,相当于一台现成的虚拟机。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容