Windows的Docker需要WSL 2(Linux的Windows子系统)支持。选择启用Hyper-V Windows功能和安装WSL 2所需的Windows组件的必要选项。
安装成功后,你会收到以下消息。
三、在Docker中创建Selenium测试
与普通的Selenium Grid一样,带有Docker的Selenium Grid的配置包括在容器中安装Selenium Hub和所需的浏览器节点。
使用Selenium Docker容器可以以不同的方式运行Selenium测试。Selenium可以在独立(或单个)Docker容器上运行,也可以在由多个容器组成的Grid上运行。
1.在独立容器中运行Selenium
在本“如何在Docker中运行Selenium测试”指南中,我们使用一个容器来启动所有测试。首先,我们必须从Docker Hub下载Docker镜像。假如想要在Chrome和Firefox浏览器上执行测试时,就可以下载Chrome和 Firefox容器的镜像。
以管理员身份在终端(命令提示符或Power Shell)上运行以下命令:
下载镜像后,运行命令docker镜像来验证下载是否成功。如下图所示,我们看到最新版本的Chrome和Firefox容器可供使用:
(1)独立的Chrome (最新)
(2)独立的Firefox
你也可以通过导航到Docker Hub并搜索所需的图像来下载容器镜像的特定版本。例如,命令docker pull selenium/standalone-chrome:87.0将下载Chrome容器的87.0版本。
下载镜像后,运行命令docker镜像来验证下载是否成功。如下图所示,我们看到最新版本的Chrome和Firefox容器可供使用:
连接到网络驱动程序的默认端口是4444,Chrome和Firefox容器将暴露给端口4444。因为我们想针对Chrome和Firefox浏览器运行Selenium测试,所以我们使用Chrome容器的端口4445和Firefox容器的端口4446。
运行端口号上显示的容器4445要连接到Chrome网络驱动程序:
运行端口号上显示的容器4446要连接到FireFox网络驱动程序:
如下图所示,Chrome和Firefox docker容器已成功启动:
在Windows PowerShell上运行docker ps命令显示Chrome和Firefox Docker容器已经准备好使用了:
现在我们必须配置远程网络驱动程序的网址:
Chrome容器
FireFox容器
现在,我们已经触及了Chrome和Firefox启动单个Docker容器的要点,让我们看看完整的执行。
安装启动
基于从testng.xml传递的参数“environment”,测试在Chrome或Firefox浏览器上运行。
Chrome容器远程网址为http://localhost:4445/wd/hub
FireFox容器远程网址为http://localhost:4446/wd/hub
执行
这样,我们都可以在各自的容器中运行测试。如容器截图所示,Chrome浏览器(或Chrome驱动程序)的两个实例在Chrome Docker容器(运行在端口号4445上)上被实例化
类似地,FireFox浏览器(或GeckoDriver)的两个实例在FireFoxDocker容器(运行在端口号4446上)上被实例化
测试是以headless的方式执行的,因为我们没有安装具有VNC的Docker镜像。如下所示,测试成功执行:
要查看容器内发生的情况,我们需要下载独立-chrome-调试和独立-FireFox-调试预先安装了VNC的图像。在独立容器中执行测试的主要缺点是可伸缩性低。因此,在独立容器中运行Selenium只适合小型项目。
2.在容器 Grid 中运行Selenium
第一个选项带来的可伸缩性问题可以通过在容器Grid中运行Selenium来解决。在大型项目中,你可能希望Selenium web自动化测试在不同的浏览器和操作系统组合上并行进行。这就是不同容器的Grid可以用来加速跨浏览器测试活动的地方。
使用这种方法,你可以获得许多不同浏览器(和浏览器版本)的实例。例如,你可以拥有Chrome v83.0的“X”实例、Chrome v76.0的“y”实例、Firefox 68.0的“Z”实例等等。可以针对各种浏览器的不同版本并行执行测试。
SeleniumGrid体系结构
这种方法使用Selenium Grid的“中枢/节点”模型。测试请求由客户端(或测试代码)发送到Hub,然后Hub将测试请求分派到最适合执行测试的节点。
为了演示如何使用容器Grid在Docker中运行Selenium测试,我们使用了最适合开发环境的设置。我们将使用调试变量节点或独立镜像,这样我们就可以使用VNC查看器在Docker中看到正在运行的测试。
默认情况下,调试镜像在端口号5900上启动VNC服务器。但是,默认端口可以重新映射到当前未使用的任何外部端口。
获取所需的Docker镜像
Grid是由多个Docker镜像组成的,在我们使用Hub和Nodes之前,应该首先提取这些镜像。
默认情况下,会下载最新版本的容器镜像。下面显示的截图表明Chrome和Firefox的Hub镜像和调试镜像已成功拉出。
运行命令docker镜像,以确保成功提取所有镜像。
安装了Chrome和Firefox的Grid节点必须连接到Grid中心。现在我们已经有了所需的图像,我们可以遵循以下方法之一在容器Grid中运行Selenium:
触发docker run命令,一次运行并启动一个容器。
使用docker-compose(或compose)来定义和运行多容器docker应用程序,并配置应用程序服务。
在第一种方法中,我们手动运行所需的命令来启动Selenium Hub,并将所需的浏览器节点(或图像)连接到Hub。这种方法最适合少量的测试,因为Hub和节点必须使用必要的命令手动启动。
在docker-compose(或compose)中,你使用YAML文件来配置应用程序服务。只需一个命令,你就可以从配置中灵活地创建和启动所有服务。使用Compose的另一个好处是,它可以在一系列环境中工作,例如试运行、生产、开发、测试和CI工作流。
如何使用Docker运行启动Docker容器
在这里,我们使用docker run命令来启动下载的Selenium镜像。一旦Hub启动,我们将Chrome和Firefox节点连接到Hub,这样Selenium web自动化测试就可以在其上执行。
以下是docker运行命令的语法:
docker运行命令应该强制指定一个图像来派生容器。让我们使用docker run命令启动Hub并将节点连接到它。
运行Selenium枢纽
一旦提取了所需的Docker镜像,我们就可以在Docker中启动Selenium Hub。我们使用以下命令启动SeleniumHub:
在这里,我们告诉Docker执行一个名为“selenium/hub”的容器,该图像被标记为“Selenium中枢”。
要公开端口,我们使用以下格式:
[ip]字段用于定义源,默认为0.0.0.0(如果未定义ip)。–publish list (或–p)选项将容器的端口发布给主机–publish-all (或–P)选项将所有公开的端口发布到随机端口。
在这里,host _ port 4444(4444:4444中的第一次出现)对外部世界是可访问的。你可以通过导航到以下网址来监控在所述端口上运行的Grid的状态:http://localhost:4444/grid/console。
我们通过在终端上运行命令docker PS–a来验证Selenium Hub容器是否已经启动。
将浏览器链接到Selenium Hub
–link标志采用以下形式:
其中“name”是需要链接的容器的名称,“alias”是链接名称的别名。
随着Selenium Hub的启动和运行,我们现在通过在终端上运行以下命令来启动Chrome和Firefox节点:
Chrome(调试)节点
FireFox(调试)节点
在例子中,selenium-hub(–link selenium-hub : hub)是我们链接到的容器,hub是容器的别名(–link selenium-hub:hub)。
执行上述命令后,Chrome和Firefox节点镜像将连接(或链接)到名为selenium-hub的容器。我们使用docker PS–一个命令来验证浏览器容器是否正在运行。
要检查Selenium Hub(或服务器)是否正在运行,Chrome & Firefox节点是否连接到该Hub,请运行命令docker 日志<Selenium Hub ContainerId>。
或者,网址http://localhost:4444/grid/console将显示SeleniumHub和连接到Hub的节点的状态。如果你在不同的端口上运行Selenium Hub容器,请使用该端口号,而不是URL中的4444。
文章来源:https://www.lambdatest.com/blog/run-selenium-tests-in-docker/