Skip to main content
Start from a test plan. GitLab CI calls the API to run that plan. It does not choose the tests. For a review of the merge request diff, use GitLab pull request testing.

Set it up

Create a test plan

Pick the tests, then copy the plan short ID (pln_…).

GitLab CI

Store the token as a CI/CD variable and call POST /v1/run.

Blocking mode

Poll the run and fail the job when the result is not passed.

Mobile build

Upload the build and run the plan against it.

What works on GitLab

What this does not do

  • This path does not post a merge request review. Use GitLab pull request testing for that.
  • GitLab cannot promote review tests into the suite. That agent exists on the GitHub App only.
  • Envoyer is not required. Use it only when the deploy itself is what should start the plan. See Envoyer.

API implementation patterns

Basic setup

Replace pln_abc123 with your test plan short ID (from your test plan page). The runner image must provide curl and jq. The GITLAB trigger and repository metadata attribute the run to GitLab in QA.tech. The results page links the commit to $CI_PROJECT_URL/-/commit/$CI_COMMIT_SHA, including for self-hosted GitLab projects. Requests without this metadata remain generic API runs.

Run test plans on merge requests

Test preview deployments via API

Pass dynamic URLs between jobs using dotenv artifacts:
The environment object also accepts optional customHeaders to persist auth or protection-bypass headers on that environment. Omit the field to leave stored headers unchanged; pass [] to clear them. Add devicePresetShortId on each application object in the same request. See Environment custom headers and Start Run API.

Scheduled testing

Set up schedules at CI/CD → Schedules → New schedule.
Use GitLab schedules when:
  • Tests should run as part of your CI/CD pipeline
  • You need GitLab context (branch, commit SHA)
  • You want to gate deployments on scheduled test results
Use QA.tech schedules when:
  • Tests should run independently of CI/CD infrastructure
  • You prefer managing schedules in QA.tech UI
  • You want to avoid consuming GitLab runner minutes
See Running Tests for QA.tech scheduling.

Blocking mode

Wait for test completion before proceeding with deployments:
See Run Status API for polling logic details and error handling.

Custom Slack notifications

Override the notification channel for one run. See Per-run overrides.