Mesmer in CI
Using Mesmer in a CI flow is a natural extension of what we do best---making testing painless and easy through automation.
Quickstart
Before we get into the details of how to configure the CLI, we'll start with a basic working example. This CI script:
- Installs the Mesmer CLI in your CI worker
- Configures the CLI for your Mesmer project
- Uploads a build to Mesmer
- Starts tests and kicks off a crawl of that build
- Waits for the tests to finish
- Logs the test results
# Download the CLI, and add it to $PATH for the rest of this shell session
# (also: if your CI provider doesn't package `jq` by default, install it here)
source <(curl -s https://cli.mesmerhq.com/release/install.sh)
# Configure the CLI. You can also set these environment variables in your CI provider's settings.
export MESMER_TENANT="your.tenant.mesmerhq.com"
export MESMER_PROJECT="xxxxxxxxxxxxxxxxxxxxxxxx" # found in the URL: https://your.tenant.mesmerhq.com/home/$project_id/...
export MESMER_AUTH_TOKEN="[redacted]" # generate with `mesmer auth login`, or "Your Profile" -> "Token" on the web
# Run your build script
# Here you invoke Gradle, xcodebuild, etc.
./build-my-application.sh --output-binary-to myapp.apk
# Submit the build for testing and crawl, capturing the freshly-created build ID
build_id="$(mesmer -q .buildId submit myapp.apk)"
# Wait for tests to finish, and then log the results.
mesmer test wait $build_id
mesmer test results $build_id
Installing the CLI
You can install the latest release of the CLI with the install script:
# Download the CLI, and add it to $PATH for the rest of this shell session
$ source <(curl -s https://cli.mesmerhq.com/release/install.sh)
This guide assumes your CI provider is running Linux. For other operating systems, the procedure is similar, but not the same: you'll need to run the appropriate installer for your platform, and use the appropriate shell scripting syntax.
Configuring Authentication
You can authenticate the CLI through environment variables---set wherever your CI platform keeps its secrets. Generally, you can configure the environment of your CI runner through your platform's web UI (GitHub Actions, CircleCI, Travis CI).
# (in your CI script, or configuration UI)
$ export MESMER_AUTH_TOKEN="[your auth token]"
You can generate an auth token by running mesmer auth login
locally, followed by a mesmer auth list --show-tokens
.
Configuring your Project
To configure the CLI to find the right tenant and project, check your .mesmer.yml
project file in to version control:
# (locally)
# If you don't have one already, create a .mesmer.yml file
# containing your tenant and project ID.
$ [[ ! -e .mesmer.yml ]] && mesmer init
# Check in .mesmer.yml
$ git add .mesmer.yml && git commit -m "Add .mesmer.yml" && git push
Alternatively, you can set environment variables to inform the CLI about your project:
# (in CI)
$ export MESMER_TENANT="your.tenant.hostname.mesmerhq.com"
$ export MESMER_PROJECT="xxxxxxxxxxxxxxxxxxxxxxxx"
Automating your tests
To automatically submit test and crawl jobs to Mesmer, build your application, then call mesmer submit
on the final binary:
# (in your CI script)
# Build your app
$ ./your-build-script -o build.apk
# Submit the build for testing and crawl
# Use an output query to pull off the buildId property
# Note: make sure that `jq` is installed in your CI environment.
$ build_id="$(mesmer -q .buildId submit build.apk)"
─── Creating the build
✓ Uploaded build
Build ID aaaaaaaaaaaaaaaaaaaaaaaa
─── Queueing up jobs
✓ Got test configuration
✓ Fetched compatible devices
✓ Selected device for tests
✓ Tests in queue
✓ Crawl in queue
─── Waiting for jobs
✓ Tests in progress
✓ Crawl in progress
Crawl ID bbbbbbbbbbbbbbbbbbbbbbbb
─── Done!
Tests
https://some-tenant.mesmerhq.com/home/xxxxxxxxxxxxxxxxxxxxxxxx/testresults/aaaaaaaaaaaaaaaaaaaaaaaa
Crawl
https://some-tenant.mesmerhq.com/home/xxxxxxxxxxxxxxxxxxxxxxxx/app-map/aaaaaaaaaaaaaaaaaaaaaaaa
# Wait for tests to finish...
$ mesmer test wait $build_id
# ...And log the test results
$ mesmer test results $build_id
This will upload the build for testing and crawl, wait for all tests to complete, and then log their results.