如何链接和缩放多个docker容器?

时间:2016-06-07 17:22:32

标签: selenium docker automated-tests docker-compose selenium-grid

我想使用Selenium Grid的Docker镜像并行执行测试。

为了做到这一点,我希望将每个测试套件分派到不同的浏览器节点。每个节点都必须与自己的dockerized服务器配对,以便测试可以运行。所以我的问题是链接容器对的最佳方法是什么?

有没有办法轻松扩展服务器节点对,可能使用Docker Compose?

我对这一切都很陌生,如果我想要实现的目标不是很清楚,那么道歉。

2 个答案:

答案 0 :(得分:1)

我并不是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将处理将测试分配给节点,以便它们一次只运行一组测试。

然后,您可以告诉所有测试使用远程webdriver&您可以控制哪个浏览器用于每组测试:

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,以便您可以保留结果/日志/屏幕截图,但我对设置的了解不足以告诉您如何执行此操作。

在这种情况下,我会怀疑你是否需要selenium-hub,但它确实增加了一些便利性,所以你可能仍然希望使用它。

答案 1 :(得分:0)

docker-compose up --scale firefox=3 -d

docker-compose up --scale chrome=3 -d

试试这个肯定有用