如何 link 和扩展多个 docker 容器?
How do I link and scale multiple docker containers?
我想使用 Selenium Grid 的 Docker 图像并行执行测试。
为此,我希望将每个测试套件分派到不同的浏览器节点。每个节点都必须与其自己的 dockerized 服务器配对,以便测试可能 运行。所以我的问题是 link 容器对的最佳方式是什么?
有没有办法轻松扩展服务器节点对,或许可以使用 Docker Compose?
我对这一切都很陌生,如果我想要实现的目标不是很清楚,我深表歉意。
我不是 100% 清楚是否需要将每个测试套件分派到不同的节点,但听起来像这样应该可以满足您的要求:
hub:
image: selenium/hub:2.53.0
ports:
- "4444:4444"
firefox:
image: selenium/node-chrome:2.53.0
links:
- hub
chrome:
image: selenium/node-chrome:2.53.0
links:
- hub
如果将其保存在目录中 docker-compose.yml
,然后将 cd
保存到该目录中,您可以执行以下操作:
docker-compose up -d
docker-compose scale firefox=3 chrome=3
这将为每个浏览器提供 3 个节点,selenium hub 将处理将测试分配给节点,这样它们一次只是 运行 一组测试。
然后您告诉所有测试使用远程网络驱动程序,并且您能够控制每组测试使用哪个浏览器:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver.get("http://www.seleniumhq.org/")
显然你需要修改它以使用你想要的语言来编写测试。我刚刚在 python 中发布了一个简单的例子来帮助你继续,因为你没有指定语言 & 那是我最熟悉的。
编辑:满足您实际要求的可能方式:
hub:
image: selenium/hub:2.53.0
links:
- app
firefox:
image: selenium/node-chrome:2.53.0
links:
- hub
chrome:
image: selenium/node-chrome:2.53.0
links:
- hub
test:
image: your/testimage
links:
- hub
app:
image: your/appimage
然后您可以通过 运行 启动整个设置的多个实例(在 docker-compose.yml 所在的目录中):
docker-compose --project-name <identifier> up -d
如果您将 <identifier>
更改为每个实例唯一的内容,那么您可以同时拥有多个实例 运行。您可能还想添加一个 volume
到您的测试容器,以便您可以坚持 results/logs/screenshots 但我对设置的了解还不够多,无法告诉您如何做到这一点。
我会质疑在这种情况下您是否需要 selenium-hub,但它确实增加了一些便利,因此您可能仍希望使用它。
docker-compose up --scale firefox=3 -d
docker-compose up --scale chrome=3 -d
试试这个肯定有用
我想使用 Selenium Grid 的 Docker 图像并行执行测试。
为此,我希望将每个测试套件分派到不同的浏览器节点。每个节点都必须与其自己的 dockerized 服务器配对,以便测试可能 运行。所以我的问题是 link 容器对的最佳方式是什么?
有没有办法轻松扩展服务器节点对,或许可以使用 Docker Compose?
我对这一切都很陌生,如果我想要实现的目标不是很清楚,我深表歉意。
我不是 100% 清楚是否需要将每个测试套件分派到不同的节点,但听起来像这样应该可以满足您的要求:
hub:
image: selenium/hub:2.53.0
ports:
- "4444:4444"
firefox:
image: selenium/node-chrome:2.53.0
links:
- hub
chrome:
image: selenium/node-chrome:2.53.0
links:
- hub
如果将其保存在目录中 docker-compose.yml
,然后将 cd
保存到该目录中,您可以执行以下操作:
docker-compose up -d
docker-compose scale firefox=3 chrome=3
这将为每个浏览器提供 3 个节点,selenium hub 将处理将测试分配给节点,这样它们一次只是 运行 一组测试。
然后您告诉所有测试使用远程网络驱动程序,并且您能够控制每组测试使用哪个浏览器:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
driver = webdriver.Remote(
command_executor='http://127.0.0.1:4444/wd/hub',
desired_capabilities=DesiredCapabilities.CHROME)
driver.get("http://www.seleniumhq.org/")
显然你需要修改它以使用你想要的语言来编写测试。我刚刚在 python 中发布了一个简单的例子来帮助你继续,因为你没有指定语言 & 那是我最熟悉的。
编辑:满足您实际要求的可能方式:
hub:
image: selenium/hub:2.53.0
links:
- app
firefox:
image: selenium/node-chrome:2.53.0
links:
- hub
chrome:
image: selenium/node-chrome:2.53.0
links:
- hub
test:
image: your/testimage
links:
- hub
app:
image: your/appimage
然后您可以通过 运行 启动整个设置的多个实例(在 docker-compose.yml 所在的目录中):
docker-compose --project-name <identifier> up -d
如果您将 <identifier>
更改为每个实例唯一的内容,那么您可以同时拥有多个实例 运行。您可能还想添加一个 volume
到您的测试容器,以便您可以坚持 results/logs/screenshots 但我对设置的了解还不够多,无法告诉您如何做到这一点。
我会质疑在这种情况下您是否需要 selenium-hub,但它确实增加了一些便利,因此您可能仍希望使用它。
docker-compose up --scale firefox=3 -d
docker-compose up --scale chrome=3 -d
试试这个肯定有用