DevOps & Cloud · Test impact selection
TestScope
Run the tests that matter.
Every pull request runs the tests its change can affect, each with a stated reason, and the full suite whenever a change is too broad to trust.
$ test-select pick --base origin/main --timings junit.xml
5 of 8 test files, 54s of 209s (74% less)
imports tests/test_orders.py (imports shop/pricing.py via shop/cart.py -> shop/orders.py)
imports web/src/cart.test.ts (imports web/src/format.ts via web/src/cart.ts)
No test reaches: shop/coupons.py
Run:
npx jest --runTestsByPath web/src/cart.test.ts web/src/format.test.ts
pytest tests/test_cart.py tests/test_orders.py tests/test_pricing.py
The problem
Every pull request runs the whole suite: 30 minutes of waiting for a one-line change, a growing CI bill, and developers who start skipping or re-running tests.
What it does
Follows the change to the tests: coverage per line (coverage.py test contexts or a map file from any tool), the import graph, and naming conventions
Python, JavaScript and TypeScript, Go, Java and Kotlin, Ruby and C#, including monorepos
One command per runner: pytest, Jest, Vitest, Go, Maven, Gradle, RSpec and dotnet test
Runs everything when a change can affect any test (dependencies, test config, fixtures, build files) and says which file caused it
Lists changed files no test reaches instead of skipping them silently
Shows the time saved from a full run's JUnit XML
check: measures whether the selection would have caught the failures of a real full run
why: which tests reach a file, and through which imports
Works before you push, on uncommitted changes
How it works
- Run it on a few recent pull requests and compare with full runs
- Add it to CI, keeping a full run on the main branch
- Check the miss rate monthly and tune the rules
Works with
Runs in your CI
- run: test-select pick --base origin/$BASE --format cmd > run-tests.sh
- run: sh run-tests.sh
Your data
- Reads your repository and coverage files locally; nothing is uploaded.
- Every selected test carries a reason you can inspect.
- check replays real failures to show how often the selection would have missed one.
Who it's for
Questions
What if it misses a test?
Changes to dependencies, fixtures and test configuration run everything, unreached files are listed rather than skipped, and you can add your own run-all paths.
Do we need coverage data?
No. Imports and naming conventions work on their own; coverage makes the selection more precise.
Related
Often used with TestScope
BlastRadar
Change impact analysisKnow what a change will touch. Before a release, see every service a change can affect and the line of code that links it. After the release, confirm those services are still healthy.
$300–600 (₹10,000–20,000 in India)View product → DevOps & CloudSLOStudio
SLOs and error budgetsReliability you can measure. Define each SLO in a few lines and get correct burn-rate alerts, an error budget everyone understands, and a release gate, on the monitoring you already run.
$1,500–3,000 (₹40,000–80,000 in India)View product → DevOps & CloudQuietPager
Alert noise reductionQuieter nights for on-call. Find the alerts that wake people for nothing, see what on-call really costs, and get the exact configuration change that fixes each one.
$800–2,000 (₹20,000–50,000 in India)View product →See TestScope on your own data
A 30-minute call. We run the product on your export, repository or document and walk you through the results.