Configuring Your Puppeteer Tests
saucectl
relies on a YAML specification file to determine exactly which tests to run and how to run them. To customize saucectl
to run your Puppeteer tests, simply modify the properties of the YAML file accordingly. This page defines each of the configuration properties specific to running Puppeteer tests.
Setting an Alternative Configuration File
By default, saucectl
looks for the config.yml
file in the .sauce
folder of your project root, but you can actually specify a different file, or if you are using multiple frameworks or need to configure different sets of tests to run separately, you may choose to have multiple configuration files that you can direct saucectl
to reference as necessary.
Use the following configuration at runtime to direct saucectl
to use any configuration file you choose:
saucectl run -c ./path/to/{config-file}.yml
While you can use multiple files of different names or locations to specify your configurations, each file must be a *.yml
and follow the saucectl
syntax. Our IDE Integrations (e.g., Visual Studio Code) can help you out by validating the YAML files and provide handy suggestions, so make sure to check them out!
Example Configuration
loading...
Each of the properties supported for running Puppeteer tests through saucectl
is defined below.
apiVersion
| REQUIRED | STRING |
Identifies the version of the underlying configuration schema. At this time, v1alpha
is the only supported value.
apiVersion: v1alpha
kind
| REQUIRED | STRING/ENUM |
Specifies which framework is associated with the automation tests configured in this specification.
kind: puppeteer
showConsoleLog
| OPTIONAL | BOOLEAN |
Controls whether the contents of console.log
are always shown in the local output of saucectl. By default (false), console.log
is only shown for failed suites.
showConsoleLog: true
defaults
| OPTIONAL | OBJECT |
Specifies any default settings for the project.
defaults:
mode: docker
timeout: 15m
mode
| REQUIRED | STRING/ENUM |
Instructs saucectl
run tests remotely through Sauce Labs (sauce
) or locally on docker
. At this time, the only supported value for this property for Puppeteer is docker
.
mode: docker
timeout
| OPTIONAL | DURATION |
Instructs how long (in ms
, s
, m
, or h
) saucectl
should wait for each suite to complete. You can override this setting for individual suites using the timeout
setting within the suites
object. If not set, the default value is 0
(unlimited).
timeout: 15m
sauce
| OPTIONAL | OBJECT |
The parent property containing all settings related to how tests are identified in the Sauce Labs platform.
sauce:
region: eu-central-1
metadata:
name: Testing Puppeteer Support
tags:
- e2e
- release team
- other tag
build: GitHub Run $GITHUB_RUN_ID
concurrency: 5
region
| OPTIONAL | STRING/ENUM |
Specifies through which Sauce Labs data center tests will run. Valid values are: us-west-1
or eu-central-1
.
region: eu-central-1
metadata
| OPTIONAL | OBJECT |
The set of properties that allows you to provide additional information about your project that helps you distinguish it in the various environments in which it is used and reviewed, and also helps you apply filters to easily isolate tests based on metrics that are meaningful to you, as shown in the following example:
metadata:
name: Testing Puppeteer Support
build: RC 10.4.a
tags:
- e2e
- release team
- beta
- featurex
concurrency
| OPTIONAL | INTEGER |
Sets the maximum number of suites to execute at the same time. If the test defines more suites than the max, excess suites are queued and run in order as each suite completes.
concurrency: 5
Alternatively, you can override the file setting at runtime by setting the concurrency flag as an inline parameter of the saucectl run
command:
saucectl run --ccy 5
env
| OPTIONAL | OBJECT |
A property containing one or more environment variables that are global for all tests suites in this configuration. Expanded environment variables are supported. Values set in this global property will overwrite values set for the same environment variables set at the suite level.
env:
hello: world
my_var: $MY_VAR
docker
| OPTIONAL | OBJECT |Docker only |
The set of properties defining the specific Docker image and type your are using, if you are running any tests locally.
docker:
fileTransfer: copy
image: saucelabs/stt-puppeteer-jest-node:<vX.X.X>
fileTransfer
| OPTIONAL | STRING |
Method in which to transfer test files into the docker container. Valid values are:
mount
: (Default) Mounts files and folders into the docker container. Changes to these files and folders will be reflected on the host (and vice a versa).copy
: Copies files and folders into the docker container. If you run into permission issues, either due to docker or host settings,copy
is the advised use case. See the Docker documentation for more about the copy convention.
fileTransfer: copy
image
| OPTIONAL | STRING |
Specifies which docker image and version to use when running tests. Valid values are in the format:
saucelabs/<framework-node>:<vX.X.X>
. See Supported Testing Platforms for Docker release notes related to Puppeteer.
image: saucelabs/stt-puppeteer-jest-node:< vX.X.X >
Avoid using the latest
tag for docker images, as advised in this article.
rootDir
| REQUIRED | OBJECT |
The directory of files that need to be bundled and uploaded for the tests to run. Ignores what is specified in .sauceignore
. See Tailoring Your Test File Bundle for more details. The following examples show the different relative options for setting this value.
rootDir: "./" # Use the current directory
rootDir: "packages/subpackage" # Some other package from within a monorepo
Only the files contained within rootDir
will be available during the tests. Any reference to a file that is not included in rootDir
will make the tests fail.
npm
| OPTIONAL | OBJECT |
A parent property specifying the configuration details for any npm
dependencies. Packages listed are installed in the environment prior to your tests executing.
npm:
registry: https://registry.npmjs.org
packages:
lodash: "4.17.20"
"@babel/preset-typescript": "7.12"
registry
| OPTIONAL | STRING |
Specifies the location of the npm registry source.
registry: https://registry.npmjs.org
packages
| OPTIONAL | OBJECT |
Specifies any NPM packages that are required to run tests and should, therefore, be included in the bundle. See Including Node Dependencies.
packages:
lodash: "4.17.20"
"@babel/preset-typescript": "7.12"
reporters
| OPTIONAL | OBJECT |
Configures additional reporting capabilities provided by saucectl
.
reporters:
junit:
enabled: true
filename: saucectl-report.xml
junit
| OPTIONAL | OBJECT |
The JUnit reporter gathers JUnit reports from all jobs and combines them into a single report.
reporters:
junit:
enabled: true
filename: saucectl-report.xml
json
| OPTIONAL | OBJECT |
The JSON reporter gathers test results from all jobs and combines them into a single report.
reporters:
json:
enabled: true
filename: saucectl-report.json
webhookURL: https://my-webhook-url
enabled
| OPTIONAL | BOOLEAN |
Toggles the reporter on/off.
enabled: true
webhookURL
| OPTIONAL | STRING |
Specifies the webhook URL. When saucectl test is finished, it'll send an HTTP POST with a JSON payload to the configured webhook URL.
webhookURL: https://my-webhook-url
filename
| OPTIONAL | STRING |
Specifies the report filename. Defaults to "saucectl-report.json".
filename: my-saucectl-report.json
artifacts
| OPTIONAL | OBJECT |
Specifies how to manage test artifacts, such as logs, videos, and screenshots.
artifacts:
cleanup: true
download:
when: always
match:
- junit.xml
directory: ./artifacts/
cleanup
| OPTIONAL | BOOLEAN |
When set to true
, all contents of the specified download directory are cleared before any new artifacts from the current test are downloaded.
cleanup: true
download
| OPTIONAL | OBJECT |
Specifies the settings related to downloading artifacts from tests run by saucectl
.
download:
when: always
match:
- junit.xml
directory: ./artifacts/
when
| OPTIONAL | STRING |
Specifies when and under what circumstances to download artifacts. Valid values are:
always
: Always download artifacts.never
: Never download artifacts.pass
: Download artifacts for passing suites only.fail
: Download artifacts for failed suites only.
when: always
match
| OPTIONAL | STRING/ARRAY |
Specifies which artifacts to download based on whether they match the name or file type pattern provided. Supports the wildcard character *
(use quotes for best parsing results with wildcard).
match:
- junit.xml
- "*.log"
directory
| OPTIONAL | STRING |
Specifies the path to the folder location in which to download artifacts. A separate subdirectory is generated in this location for each suite for which artifacts are downloaded. The name of the subdirectory will match the suite name. If a directory with the same name already exists, the new one will be suffixed by a serial number.
directory: ./artifacts/
notifications
| OPTIONAL | OBJECT |
Specifies how to set up automatic test result alerts.
notifications:
slack:
channels:
- "saucectl-results"
- "ppt-tests"
send: always
slack
| OPTIONAL | OBJECT |
Specifies the settings related to sending tests result notifications through Slack. See Slack Integration for information about integrating your Sauce Labs account with your Slack workspace.
slack:
channels: "saucectl-ppt-tests"
send: always
channels
| OPTIONAL | STRING/ARRAY |
The set of Slack channels to which the test result notifications are to be sent.
slack:
channels:
- "saucectl-results"
- "ppt-team"
send: always
send
| OPTIONAL | STRING |
Specifies when and under what circumstances to send notifications to specified Slack channels. Valid values are:
always
: Send notifications for all test results.never
: Do not send any test result notifications.pass
: Send notifications for passing suites only.fail
: Send notifications for failed suites only.
slack:
channels: "saucectl-ppt-tests"
send: always
puppeteer
| REQUIRED | OBJECT |
The parent property containing the details specific to the Puppeteer project.
puppeteer:
version: 9.1.1
version
| REQUIRED | STRING |
The version of Puppeteer that is compatible with the tests defined in this file. See Supported Testing Platforms for the list of Puppeteer versions supported by saucectl
and their compatible test platforms.
version: 9.1.1
You can also define a path to your package.json
. This will make saucectl use the same puppeteer
package version that's defined in your projects devDependencies
or dependencies
map.
The path to your package.json
file will be relative to the rootDir
of your configuration.
suites
| REQUIRED | OBJECT |
The set of properties providing details about the test suites to run. May contain multiple suite definitions. See the full example config for an illustration of multiple suite definitions.
name
| REQUIRED | STRING |
The name of the test suite, which will be reflected in the results and related artifacts.
- name: "saucy test"
env
| OPTIONAL | OBJECT |
A property containing one or more environment variables that may be referenced in the tests for this suite. Expanded environment variables are supported. Values set here will be overwritten by values set in the global env
property.
env:
hello: world
my_var: $MY_VAR
browser
| REQUIRED | STRING |
The name of the browser in which to run this test suite.
Available browser names: chrome
and firefox
.
browser: "chrome"
env
| OPTIONAL | OBJECT |
A set of any ephemeral/environment variables needed to run the tests in this suite, which might take any of the following formats: string | int | float | boolean.
env:
hello: world
testMatch
| REQUIRED | STRING/ARRAY |
One or more paths to the puppeteer test files to run for this suite. Regex values are supported to indicate all files of a certain type or in a certain directory, etc. If your tests are in TypeScript, you must transpile them to JavaScript.
testMatch: ["**/*.js"]
timeout
| OPTIONAL | DURATION |
Instructs how long saucectl
should wait for the suite to complete, potentially overriding the default project timeout setting.
When the suite reaches the timeout limit, its status is set to '?' in the CLI. This does not reflect the actual status of the job in the Sauce Labs web UI or API.
Setting 0
reverts to the value set in defaults
.
timeout: 15m
browserArgs
| OPTIONAL | ARRAY |
Pass flags to configure how TestCafe launches the selected browser. Review supported flags for Chrome/Chromium
browserArgs: ["--no-sandbox", "--disable-features=site-per-process"]
groups
| OPTIONAL | ARRAY |
Execute specific groups of tests with puppeteer runner.
groups: ["group1", "group2"]
Advanced Configuration Considerations
The configuration file is flexible enough to allow for any customizations and definitions that are required for any of the supported frameworks. The following sections describe some of the most common configurations.
Setting up a Proxy
If you need to go through a proxy server, you can set it through the following variables:
HTTP_PROXY
: Proxy to use to access HTTP websitesHTTPS_PROXY
: Proxy to use to access HTTPS websites
Docker Proxy Considerations
When running in docker-mode, saucectl
still must reach the Sauce Labs platform get the latest docker image available or upload the test package to Sauce Cloud, and the docker container needs to access the tested website and Sauce Labs to upload results.
Therefore, you may be required to set the proxy twice, as shown in the following examples:
PS> $Env:HTTP_PROXY=http://my.proxy.org:3128/
PS> $Env:HTTPS_PROXY=http://my.proxy.org:3128/
PS> saucectl run -e HTTP_PROXY=${Env:HTTP_PROXY} -e HTTPS_PROXY=${Env:HTTPS_PROXY}
$> export HTTP_PROXY=http://my.proxy.org:3128/
$> export HTTPS_PROXY=http://my.proxy.org:3128/
$> saucectl run -e HTTP_PROXY=${HTTP_PROXY} -e HTTPS_PROXY=${HTTPS_PROXY}
Tailoring Your Test File Bundle
The saucectl
command line bundles your root directory (rootDir
parameter of config.yml
) and transmits it to the Sauce Labs cloud or your own infrastructure via Docker, then unpacks the bundle and runs the tests. This functionality is partly what allows Sauce Control to operate in a framework-agnostic capacity. However, you can and should manage the inclusion and exclusion of files that get bundled to optimize performance and ensure security.
Excluding Files from the Bundle
The .sauceignore
file allows you to designate certain files to be excluded from bundling.
Add any files that are not direct test dependencies to .sauceignore
to reduce the size of your bundle, improve test speed, and protect sensitive information.
Examples of what can be included in .sauceignore
:
# .sauceignore
# Ignore node_modules
node_modules/
# Ignore all log files
*.log
# Ignore executables/binaries
*.exe
*.bin
**/*/bin
# Ignore media files
*.png
*.jpeg
*.jpg
*.mp4
# Ignore documentation
*.rst
*.md
# Ignore sensitive data
credentials.yml
Sometimes it's easier to do the inverse: Including files for the bundle.
# Ignore all files by default.
/*
# Re-include files we selectively want as part of the payload by prefixing the lines with '!'.
!/node_modules
!/tests
# Since the whole '/tests' folder is now included, this would also include any
# subdirectories that potentially contain auto-generated test artifacts from
# the local dev environment.
# It'd be wasteful to include them in the payload, so let's ignore those subfolders.
/tests/results/
Including Node Dependencies
The default .sauceignore
file lists node_modules/
so locally installed node dependencies are excluded from the bundle. If your tests require node dependencies to run, you can either:
Remove "node_modules" from .sauceignore
Delete or comment out node_modules/
in your .sauceignore
file to bundle your node dependencies. For example,
# Do NOT exclude node_modules from bundle
# node_modules/
Node dependencies can increase your bundle by potentially hundreds of megabytes, so consider including only the required dependencies rather than the entire node_modules
directory. The following sections provide some methods for limiting the scope of dependencies you must include.
Install "devDependencies" Only
Consider only installing NPM devDependencies
if your tests do not require all prod dependencies
.
# Only install dev dependencies
npm install --only=dev
saucectl run
Uninstall Nonessential Dependencies
If your standard install includes dependencies that aren't needed to run your tests, uninstall them prior to bundling.
# Install node dependencies
npm ci # or "npm install"
# Remove unneeded dependencies
npm uninstall appium
npm uninstall express
saucectl run
Install Essential Dependencies Individually
If you know that your tests require only specific dependencies, install them individually instead of running npm install
or npm ci
.
# Install individual dependencies
npm install puppeteer-xpath
npm install @puppeteer/react
saucectl run
Set NPM Packages in config.yml
You can avoid installing or uninstalling dependencies prior to each bundling operation by defining a default set of NPM packages to install in your sauce configuration file using the npm
parameter, as shown in the following example:
npm:
registry: https://registry.npmjs.org
packages:
lodash: "4.17.20"
"@babel/preset-typescript": "7.12"
"@puppeteer/react": "^5.0.1"
Transpiling TypeScript Tests
If your Puppeteer tests are in TypeScript, you need to transpile your Typescript files to JavaScript before running them with saucectl
.
Install typescript:
npm install -g typescript
Review your
tsconfig.json
to ensure you've set thecompilerOptions
appropriately. Review the documentation for guidelines.Run the TypeScript compiler:
tsc --project ./tests/tsconfig.json
Edit the
testMatch
properties for each of your test suites in.sauce/config.yml
to call the JavaScript test files instead of the TypeScript files.suites:
- name: "basic test"
testMatch: ['tests/*.js']