Nightwatchjs parallel mode selenium hub docker compose

I am trying to run tests in parallel written with nightwatchjs in Docker using the Selenium Hub. I can get the tests to run in parallel in Docker without the Selenium Hub, however, some child processes will timeout, causing several attempts. The results are very inconsistent. I hope to use Selenium Hub or something similar to remove timeouts and retries so that test results are more stable and stable, rather than timeout.

However, now when I run docker-compose run --rm nightwatch using the following code, the selenium server will start in parallel and several child processes will be started, however only the first will be executed. Then the other child processes will receive Error retrieving a new session from the selenium server. Connection refused! Is selenium server started? Error retrieving a new session from the selenium server. Connection refused! Is selenium server started? Did I miss something so that tests for night hours run in parallel without turning off the time?

nightwatch.conf.js

 module.exports = { src_folders: ['tests'], output_folder: 'reports', custom_commands_path: '', custom_assertions_path: '', page_objects_path: 'page_objects', test_workers: true, live_output: true, detailed_output: true, selenium: { start_process: true, server_path: './bin/selenium-server-standalone-3.0.1.jar', log_path: '', host: '127.0.0.1', port: 4444, cli_args: { 'webdriver.chrome.driver' : './node_modules/chromedriver/bin/chromedriver' } }, test_settings: { default: { launch_url: 'https://example.com', selenium_port: 4444, selenium_host: 'hub', silent: true, screenshots: { 'enabled': false, 'path': '' }, desiredCapabilities: { browserName: 'chrome', javascriptEnabled: true, acceptSslCerts: true, chromeOptions: { args: [ '--window-size=1024,768', '--no-sandbox' ] } }, globals: { waitForConditionTimeout: 20000, asyncHookTimeout: 70000 } } }; 

Docker-compose.yml

 version: '2' services: nightwatch: build: context: . command: /bin/sh -c "node ./node_modules/nightwatch/bin/nightwatch" links: - chrome - hub volumes: - .:/opt/nightwatch chrome: environment: VIRTUAL_HOST: node.chrome.docker HUB_PORT_4444_TCP_ADDR: hub HUB_PORT_4444_TCP_PORT: 4444 image: selenium/node-chrome:3.1.0-astatine links: - hub hub: ports: - 4444:4444 image: selenium/hub:3.1.0-astatine 

Dockerfile

 FROM java:8-jre ## Node.js setup RUN curl -sL https://deb.nodesource.com/setup_6.x | bash - RUN apt-get install -y nodejs RUN npm config set spin false WORKDIR /app COPY . ./ RUN npm install 
+6
source share
1 answer

Docker node images are configured to run only one browser instance. You can change this by overriding environment variables, for example:

  chrome: environment: VIRTUAL_HOST: node.chrome.docker HUB_PORT_4444_TCP_ADDR: hub HUB_PORT_4444_TCP_PORT: 4444 NODE_MAX_INSTANCES: 5 NODE_MAX_SESSION: 5 image: selenium/node-chrome:3.1.0-astatine links: - hub 

In case you are interested, I discovered this by looking at the Dockerfile .

+2
source

Source: https://habr.com/ru/post/1015540/


All Articles