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
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
GitLab Schedules vs QA.tech Schedules
GitLab Schedules vs QA.tech Schedules
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
- Tests should run independently of CI/CD infrastructure
- You prefer managing schedules in QA.tech UI
- You want to avoid consuming GitLab runner minutes