What Is Regression Testing? Types, Examples and How to Automate It (2026)

By Chirag Ali Palsania, Founder, INNOVISCENT (Ahmedabad) · Last updated

Regression testing checks that a new code change has not broken existing features

Quick answer

Regression testing is re-running existing tests after a code change to check that features which already worked still work. It catches bugs that a new feature, bug fix or update accidentally introduces elsewhere in the software. Most teams automate their regression tests and run them on every build or before every release.

Key takeaways

  • Every code change can break something that already worked; regression testing is how you find out before your users do.
  • You rarely need to re-run everything. Choose tests by risk, by what changed and by what users rely on most.
  • Regression tests are the best candidates for automation because they repeat with every release.
  • Run a fast smoke set on every pull request and the full suite nightly or before each release.
  • Fix or quarantine flaky tests quickly, or the team will stop trusting the results.

What is regression testing?

Regression testing checks that recent code changes have not broken existing features. A “regression” is a bug in something that used to work. You run tests that already passed before, and any new failure points to a side effect of the latest change.

It is needed after almost any change: new features, bug fixes, performance work, library upgrades, configuration changes and even database migrations.

A real-world example of regression testing

An e-commerce team adds a new coupon field to the checkout page. The coupon works perfectly in testing. But the change also moved the step where GST is calculated, and invoices now show the tax amount before the discount is applied.

Nobody tested invoices, because nobody touched invoices. A regression test that checks “place an order with a discount and verify the invoice total” would have caught it in minutes, before customers received wrong invoices.

This is the pattern regression testing protects against: a change in one place causes a failure somewhere that looks unrelated.

Why is regression testing important?

  • Protects what already works: your most-used features are also the most costly to break.
  • Makes frequent releases safe: teams can ship weekly or daily without fear.
  • Finds bugs while they are cheap: a regression caught the same day is a quick fix; one found by customers costs time, money and trust.
  • Supports refactoring and upgrades: developers can clean up code or update libraries with a safety net.

What are the types of regression testing?

Teams use different scopes of regression testing depending on how big the change is and how much time they have.

TypeWhat it meansWhen to use it
Retest-allRun the entire regression suiteMajor releases, big refactors, platform upgrades
SelectiveRun only the tests linked to the changed code and the areas around itMost everyday changes, to save time
ProgressiveUpdate and add test cases because the requirements changedNew features that change existing behaviour
CorrectiveRe-run existing tests unchanged when the requirements haven't changedSmall fixes, configuration or environment changes
Unit regressionRe-run unit tests for the changed code in isolationOn every commit, as the fastest check
Visual regressionCompare screenshots to catch layout and styling changesUI updates, CSS changes, new browser versions

Regression testing vs retesting, smoke and sanity testing

These terms are often mixed up. The difference is what each one is checking.

Testing typeWhat it checksScope
Regression testingThat a change did not break existing featuresWide: existing features across the app
RetestingThat a specific reported bug is now fixedNarrow: the failed test case only
Smoke testingThat a new build is stable enough to test furtherShallow: critical flows only
Sanity testingThat a specific change or fix works as expectedNarrow and quick: the changed area

A typical order is: smoke test the build, retest the fixed bugs, run a sanity check on the change, then run regression tests to make sure nothing else broke.

How do you choose test cases for regression testing?

Choose by risk. Include the tests that would hurt most if they failed, and the tests closest to what changed.

  • Business-critical flows: login, sign-up, search, checkout, payment and core APIs.
  • Areas linked to the change: the modules, screens and APIs that share code or data with what changed.
  • Features with a history of bugs: places that have broken before tend to break again.
  • Most-used features: check your analytics to see what customers use every day.
  • Integrations: payment gateways, email and SMS, ERPs and third-party APIs.
  • Recently fixed bugs: add a test for every serious bug, so it never comes back unnoticed.

Review the suite every few months. Remove tests for features that no longer exist, and merge duplicate tests.

How to perform regression testing, step by step

  • 1. Identify the change: read the release notes, pull requests and tickets.
  • 2. Select the tests: use the risk-based list above to pick the regression set.
  • 3. Prepare the environment and data: use a stable staging environment and realistic, safe test data.
  • 4. Run the tests: automated tests first, then manual checks for anything not yet automated.
  • 5. Analyse failures: separate real regressions from test or environment problems.
  • 6. Report and fix: log real bugs with clear steps, fix them, then retest.
  • 7. Update the suite: add tests for new features and for any bugs that slipped through.

Manual vs automated regression testing

Regression tests repeat with every release, so they are usually the first tests teams automate. Manual testing still matters for new features and exploratory checks.

FactorManual regressionAutomated regression
SpeedHours or days per cycleMinutes to a few hours
Cost over timeGrows with every releaseHigher upfront, then mostly maintenance
ConsistencyDepends on the testerSame steps every time
Best forNew, changing or visual featuresStable, repeated, high-value flows
Runs overnightNoYes, in your CI/CD pipeline

For help deciding what to automate first, read manual vs automated testing. To see what automation costs and when it pays back, see our software testing cost guide.

How to run regression tests in a CI/CD pipeline

Split the regression suite by speed, so developers get fast feedback without waiting for every test.

Pipeline stageWhat to runTarget time
Every commitUnit regression testsA few minutes
Every pull requestSmoke set and API tests for critical flowsUnder about 15 minutes
NightlyFull UI and API regression suite, across browsersA few hours is fine
Before releaseFull suite plus visual and key manual checksAgreed release window

Jenkins, GitHub Actions and GitLab CI can all run these stages. Our guide to setting up a CI/CD pipeline shows the full set-up.

How to handle flaky regression tests

A flaky test passes and fails without any change to the code. Left alone, flaky tests teach the team to ignore red builds, and real regressions slip through.

  • Track them: record any test that fails and then passes on a re-run.
  • Quarantine them: move flaky tests out of the blocking pipeline until they're fixed, but keep running them.
  • Fix the usual causes: fixed waits instead of waiting for elements, shared test data, test order dependencies and unstable environments.
  • Use better tools: modern frameworks like Playwright wait for elements automatically. See Selenium vs Playwright.

Which tools are used for regression testing?

ToolTypeGood for
SeleniumWeb UI, open sourceMany languages and browsers; large existing suites
PlaywrightWeb UI, open sourceFast, reliable tests with auto-waiting and built-in screenshot comparison
CypressWeb UI, open sourceJavaScript teams testing front-end apps
AppiumMobile, open sourceAndroid and iOS app regression
Postman / REST AssuredAPIFast API regression checks
Apache JMeterPerformance, open sourceChecking that response times haven't got worse
Jenkins / GitHub Actions / GitLab CICI/CDRunning the suite automatically on every change

How do you measure regression testing?

  • Defect leakage = bugs found in production after a release ÷ total bugs found for that release × 100. Lower is better.
  • Automation coverage = automated regression test cases ÷ total regression test cases × 100.
  • Flaky rate = test runs that failed then passed on re-run without a code change ÷ total test runs × 100.
  • Suite run time: how long the full suite takes; watch for it creeping up.
  • Pass rate per build: a sudden drop usually means a real regression or a broken environment.

Regression testing checklist

  • Critical business flows have automated regression tests.
  • Every serious bug fixed has a test that would catch it again.
  • Tests are grouped into smoke, pull request, nightly and release sets.
  • The suite runs automatically in the CI/CD pipeline.
  • Test environments are stable and match production.
  • Test data is realistic, safe and reset between runs.
  • Flaky tests are tracked and quarantined.
  • Failures are reviewed the same day.
  • The suite is reviewed and cleaned up every few months.
  • Defect leakage and automation coverage are tracked each release.

How INNOVISCENT can help

Our QA automation team in Mumbai and Ahmedabad builds and maintains automated regression suites for web, mobile and APIs with Selenium, Playwright and Appium, and connects them to your CI/CD pipeline. Need extra hands during a release crunch? We can also add dedicated QA engineers to your team.

Frequently Asked Questions

What is regression testing in simple words?

Regression testing means re-checking features that already worked after the software is changed, to make sure the change did not break them.

What is an example of regression testing?

After adding a coupon field to an online checkout, a team re-runs its existing order tests and finds that invoice totals are now wrong. The coupon worked, but the change broke something else, which regression testing caught.

What is the difference between regression testing and retesting?

Retesting checks that a specific bug has been fixed. Regression testing checks that the fix, or any other change, has not broken other features that were working before.

How often should regression testing be done?

After every code change. Most teams run a fast set of regression tests on every pull request and the full suite nightly or before each release.

Can regression testing be automated?

Yes. Regression tests are the best candidates for automation because they are repeated with every release. Tools such as Selenium, Playwright, Cypress and Appium are commonly used.

What are the main types of regression testing?

Common types are retest-all, selective, progressive, corrective, unit regression and visual regression testing. They differ in how much of the application is re-tested and why.

Which test cases should be included in regression testing?

Include business-critical flows, areas linked to the change, features with a history of bugs, the most-used features, integrations and tests for recently fixed bugs.

Talk to an Automation Engineer, Not a Sales Script

We Build
Test Automation 

Tell us about your release process, back-office workload or device idea. In a free call we will point out what is worth automating first and how long it would take.

Get Free Consultation
Whatsapp Now