Real Browser Tests in Your GitLab CI Pipeline
Seamlessly Integrates With Your Favorite AI-Powered Editors
Two Variables, No Config File
Set TESTSPRITE_API_KEY as a masked CI/CD variable and the CLI authenticates from the environment. Nothing is written to ~/.testsprite, which is what you want in an ephemeral runner.
No Browsers in Your Runner
Execution happens in TestSprite's cloud against real browsers, so the job installs only the CLI. That removes the slowest step from a cold pipeline — no browser binaries to download or cache.
JUnit That GitLab Renders
--report junit --report-file <path> writes a sidecar. Point artifacts:reports:junit at it and GitLab shows per-test results directly in the merge request widget.
The Exit Code Is the Gate
--wait blocks until every run is terminal, so exit 0 means every test genuinely passed rather than every test was dispatched. Documented codes distinguish a failed test (1) from an auth problem (3) or an exhausted balance (12).
Gate the Merge Request on a Real Browser
Unit tests confirm the code does what it was written to do. Only a run against your review app confirms the thing you are about to merge actually works.
Built for Teams Shipping on GitLab
Works With Review Apps
Point the project at your review app URL before the run — testsprite project update <id> --url "$CI_ENVIRONMENT_URL" — so the suite stays stable while the target moves per merge request.
Pin the Version
Install @testsprite/testsprite-cli@<version> rather than tracking latest, so a new release never changes what your pipeline does without a commit.
Frontend and Backend in One Gate
Group web flows and API contract tests into a test list and run it with testsprite testlist run, pinning each project to its environment.
Free Community Version
Offers a free community version, making us accessible to everyone.
Trusted By Businesses Worldwide
"Good job! Pretty cool MCP from TestSprite team! AI coding + AI testing helps you build better software easily!"
"TestSprite offers rich test case generation, clear structure, and easy-to-read code. It also supports simple online debugging with the ability to quickly expand by generating new test cases."
"TestSprite's automation helps us reduce tons of manual work. The developers can easily catch and resolve bugs earlier in the development process."
FAQ
Does the GitHub App integration work with GitLab?
No — that integration listens to GitHub deployment events and is GitHub-only. On GitLab you drive the run from your pipeline with the CLI, which needs only TESTSPRITE_API_KEY in the environment.
How do I show results in the merge request?
Write a JUnit sidecar with --report junit --report-file testsprite-junit.xml and declare it under artifacts:reports:junit. GitLab then renders per-test results in the merge request widget.
How do I test a review app whose URL changes every time?
Update the project URL as the first step of the job using GitLab's own variable: testsprite project update <id> --url "$CI_ENVIRONMENT_URL". The test suite stays the same while the target moves.
What if my application requires a login?
Store a test account on the project with --username and --password-file — both flags are required together. Without them, exploration and runs only see public pages, and it warns rather than failing.
Is the CLI open source?
Yes — the open-source CLI is Apache-2.0 and free to install from npm. It requires Node 20.19+, 22.13+, or 24+. Test execution runs in the cloud and consumes workspace credits.
Can I try commands without spending credits?
Yes. --dry-run exercises the full code path offline with canned data, and test scaffold and test lint never touch the network or your credentials at all.