Taiko in Docker
This tutorial shows how to setup Taiko tests in Docker. The Docker image created as a part of this tutorial can be used to run tests locally or on a CI/CD setup.
The Dockerfile in this
sample uses Gauge to run the tests, However, you can modify the
Dockerfile to exclude it
or use another test runner.
Prerequisites
Section titled “Prerequisites”Setup a sample project
Section titled “Setup a sample project” gauge init jsThis creates a Gauge+Taiko project sample with a Dockerfile
in the current directory.
Using the Dockerfile
Section titled “Using the Dockerfile”Building the image
Section titled “Building the image”Run the following command from the project’s folder
docker build -t gauge-taiko .Running tests
Section titled “Running tests”docker run --rm -it -v ${PWD}/reports:/gauge/reports gauge-taikoThe test reports are created in the reports folder in the current directory.
A note on the flags and options
Section titled “A note on the flags and options”TAIKO_BROWSER_ARGS
Section titled “TAIKO_BROWSER_ARGS”Taiko reads TAIKO_BROWSER_ARGS environment variable and passes the values as command line
arguments to the Chromium browser it launches.
Note: this does not apply if the browser is launched independently and Taiko is made to connect to the already running browser instance.
---no-sandbox
Section titled “---no-sandbox”Lighthouse-ci has documented chrome sandboxing and nuances with Docker here - —No-sandbox Issues are explained - “Chrome uses sandboxing to isolate renderer processes and restrict their capabilities. If a rogue website is able to discover a browser vulnerability and break out of JavaScript engine for example, they would find themselves in a very limited process that can’t write to the filesystem, make network requests, mess with devices, etc.”
There are several options to run Chrome headless in Docker. Puppeteer has a couple of recommendations.
According to Lighthouse-ci, passing --no-sandbox may not be a bad option. The same applies to Taiko as well.
Please note that several options (other than passing --no-sandbox to chrome) require
permissions/changes that apply to the entire container.
—start-maximized
Section titled “—start-maximized”Modern websites are often built to be responsive. To ensure that the browser
opens in full view-port use --start-maximized flag. Alternatively, set --window-size
flag to open the website in specific viewport size.
—disable-dev-shm
Section titled “—disable-dev-shm”By default, Docker runs a container with a /dev/shm shared memory space 64MB. This
is typically too small for Chrome
and will cause Chrome to crash when rendering large pages. To fix, run the container
with docker run --shm-size=1gb to increase the size of /dev/shm. Since Chrome 65,
this is no longer necessary. Instead, launch the browser with the --disable-dev-shm-usage
flag: - Puppeteer troubleshooting tips
Project code in docker
Section titled “Project code in docker”The project code can be made available on the Docker using various methods (besides adding it to the container at build time).
- docker cp
- git clone
- volume mounting the entire project will mount the
node_modulesas well.
node_modules can have OS specific files which also get mounted on to the Docker. If the Docker is
running for a different OS configuration, this will give errors unless node_modules is deleted before mounting.