运行 在 DDEV 容器中使用 Behat Drupal Extension 进行硒测试

Running selenium tests using Behat Drupal Extension inside DDEV containers

问题:获取在 ddev 容器内工作的基于 Behat Drupal Extension 的测试。这包括向现有配置添加单独的硒容器,能够 运行 Behat 测试,以及能够引用 web 主机容器。

先决条件:有一个运行 Drupal 的 ddev 实例。有examples already来设置,这里就不重复了。

上述任务需要添加以下内容:

  • 硒容器:容器运行硒。我使用的是 chrome 独立版本。将以下内容添加到您的 .ddev 文件夹中:

文件:docker-compose.selenium.yml

version: '3.6'

services:
  selenium:
    container_name: ddev-${DDEV_SITENAME}-selenium
    image: selenium/standalone-chrome-debug:3.13.0-argon
    networks:
      default:
        aliases:
          - web

最后一位很关键; selenium 容器 需要 了解 Web 容器 运行 drupal 实例以连接到它,但由于它是 Web 容器的依赖项,因此您不能使用 'links'。您必须使用别名方法,使用默认网络。

  • compose override:一个文件将 Web 容器的默认设置覆盖到 link selenium 容器。

文件:docker-compose.override.yml

version: '3.6'

services:
  web:
    depends_on:
      - db
      - selenium
    links:
      - db:db
      - selenium:selenium
  • Behat 配置MinkExtension 的以下 Behat 配置对我有用:

(修改文件behat.yml)

default:
  extensions:
    "Behat\MinkExtension":
      goutte: null
      base_url: 'http://web'
      javascript_session: selenium2
      selenium2:
        browser: "chrome"
        wd_host: http://selenium:4444/wd/hub
        capabilities:
          extra_capabilities:
            idle-timeout: 50

base_urlwd_host 条目对于实现此功能至关重要。

有关最后一个的更多信息,请参阅 Behat Drupal Extension docs 中的第 5 步:

Configure your testing environment by creating a file called behat.yml with the following. Be sure that you point the base_url at the web site YOU intend to test. Do not include a trailing slash:

default:
  suites:
    default:
      contexts:
        - FeatureContext
        - Drupal\DrupalExtension\Context\DrupalContext
        - Drupal\DrupalExtension\Context\MinkContext
        - Drupal\DrupalExtension\Context\MessageContext
        - Drupal\DrupalExtension\Context\DrushContext
  extensions:
    Drupal\MinkExtension:
      goutte: ~
      selenium2: ~
      base_url: http://seven.l
    Drupal\DrupalExtension:
      blackbox: ~