mrsheepuk / docker-protractor

Docker container for running protractor tests, based on https://bitbucket.org/rkrzewski/dockerfile/
45 stars 33 forks source link

Dockerfile for Protractor test execution

Based on caltha/protractor, this image contains a fully configured environment for running Protractor tests under the Chromium browser.

This version additionally supports linking docker containers together to test software in another container, and passing a custom base URL into your protractor specs so you don't have to hard-code the URL in them.

Installed software

Running

In order to run tests from a CI system, execute the following:

docker run --rm -v <test project location>:/project mrsheepuk/protractor

The container will terminate automatically after the tests are completed.

To run against another container, execute as follows (this example assumes that the image you are testing exposes its web site on port 3000):

docker run -d --name=webe2e <image to test>
docker run --rm --link=webe2e:webe2e -v <test project location>:/project --env BASEURL=http://webe2e:3000/ mrsheepuk/protractor
docker rm -f webe2e

You can also use the BASEURL variable without container linking, to test any arbitrary web site. If you wish to use the BASEURL functionality, you must use relative URLs within your test specs (e.g. browser.get("/profile/") instead of browser.get("http://test.com/profile/").

If you want to run the tests interactively you can launch the container and enter into it:

CONTAINER=$(docker run -d -v <test project location>:/project --env MANUAL=yes mrsheepuk/protractor)
docker exec -ti $CONTAINER sudo -i -u node bash

When inside the container you can run the tests at the console by simply invoking protractor. When you are done, you terminate the Protractor container with docker kill $CONTAINER.

Your protractor.conf.js must specify the no-sandbox option for Chrome to cleanly run inside Docker. A minimal example config would be:

exports.config = {
  seleniumAddress: 'http://localhost:4444/wd/hub',
  framework: "jasmine2",
  specs: ['*.spec.js'],
  // Chrome is not allowed to create a SUID sandbox when running inside Docker  
  capabilities: {
    'browserName': 'chrome',
    'chromeOptions': {
      'args': ['no-sandbox']
    }
  }
};