Quick answer: The types of software testing fall into two big groups: functional testing (does the feature do what it should? e.g. unit, integration, system, smoke, sanity, regression, UAT) and non-functional testing (how well does it do it? e.g. performance, load, security, usability, accessibility, compatibility). Each type can be done manually or with automation, at different levels (unit → integration → system → acceptance), using black box, white box or grey box techniques.
If you are preparing for your first QA interview, switching from manual testing, or studying software engineering in college, “what are the types of software testing?” is the question you will hear first. Most tutorials answer it with a long, flat list of 50+ names. That is hard to remember and even harder to explain in an interview.
This guide does it differently. First you get a simple map of how testing types are classified. Then you get 25 types of testing in software testing, each with a one-line definition and a concrete example from the same app — a food-delivery app — so you can see how the types fit together on a real project. Finally, we cover the confusions interviewers love (smoke vs sanity, retesting vs regression), which types you can automate with Playwright, and which ones matter most for QA jobs in India.
New to testing altogether? Start with our software testing tutorial for beginners, then come back here.
How Software Testing Types Are Classified
Every testing type you will ever hear about can be placed on four axes. Learn these four and the long lists suddenly make sense.
1. By what you test: functional vs non-functional
- Functional testing checks what the system does against the requirements. “When I apply a valid coupon, the order total reduces.”
- Non-functional testing checks how well the system does it — speed, security, usability, reliability. “The checkout page stays fast when thousands of users are ordering at dinner time.”
2. By how you test: manual vs automated
- Manual testing: a human executes the steps and judges the result. Best for exploratory, usability and one-off checks.
- Automation testing: a script (Playwright, Selenium, Postman/Newman, JUnit) executes the steps and asserts the result. Best for repetitive checks like regression and smoke suites. Our automation testing guide explains the basics.
3. By level: unit, integration, system, acceptance
The four levels of testing follow the order in which software is built and assembled:
- Unit testing — one function or class in isolation (usually written by developers).
- Integration testing — two or more modules talking to each other.
- System testing — the complete, integrated application against the requirements (the main job of the QA team).
- Acceptance testing (UAT) — the business or end users confirm the product is fit for release.
4. By approach: black box, white box, grey box
- Black box testing: you test inputs and outputs without seeing the code. Most manual QA work is black box. Techniques: equivalence partitioning, boundary value analysis, decision tables.
- White box testing: you design tests using knowledge of the code — statements, branches, paths. Mostly done by developers through unit tests.
- Grey box testing: partial knowledge of internals. Example: a tester who knows the database schema checks that placing an order writes the correct row in the
orderstable.
Also worth knowing: static testing (reviewing requirements, designs and code without running anything) vs dynamic testing (executing the software). Static testing is how you catch defects earliest and cheapest.
Functional Testing Types (With Examples)
All the examples below use the same imaginary food-delivery app: users sign up, search restaurants, add items to a cart, apply coupons, pay, and track the order.
1. Unit testing
Tests the smallest piece of code — a single function or method — in isolation. Example: a developer tests that calculateDeliveryFee(distanceKm) returns the right fee for 0 km, 3 km and 15 km.
2. Integration testing
Verifies that separate modules or services work together correctly. Example: after the payment service confirms a payment, the order service changes the order status from “Pending” to “Confirmed”.
3. System testing
Tests the complete, integrated application against the requirement specification. Example: QA runs every documented flow — signup, search, cart, payment, tracking, cancellation — on the staging build.
4. User acceptance testing (UAT)
Business users or clients confirm the software meets their needs before go-live. Its sub-types are alpha testing (inside the organisation) and beta testing (real users before full release). Example: the restaurant-partner team checks the new menu-upload feature works the way their partners actually upload menus.
5. Smoke testing
A quick, broad check that the most critical features of a new build work, so deeper testing is worth starting. Also called build verification testing. Example: on every new build: app opens, login works, search returns results, cart accepts an item, payment page loads.
6. Sanity testing
A quick, narrow check of one area after a small change or bug fix. Example: the coupon logic was patched, so you check coupon apply, remove and expiry — nothing else.
7. Regression testing
Re-running existing tests to make sure new changes did not break features that already worked. Example: after adding UPI as a payment option, you re-run card payment, wallet payment, refunds and order history tests. Deep dive: regression testing in software testing.
8. Retesting (confirmation testing)
Re-executing the exact test case that failed, after the developer fixes the bug, to confirm the fix. Example: bug #412 said “coupon FIRST50 applies twice”; after the fix you run that same test with the same data.
9. End-to-end (E2E) testing
Tests a complete user journey across the UI, APIs, database and third-party services, just like a real user. Example: a new user signs up, orders a biryani, pays, and sees “Order delivered” in history. See our Playwright end-to-end testing guide.
10. API testing
Tests the backend endpoints directly — status codes, response body, headers, error handling — without the UI. Example: POST /api/orders with an empty cart must return 400 with a clear error message. Learn how in the Playwright API testing guide.
11. UI / GUI testing
Checks the visible interface: buttons, forms, validation messages, navigation, layout behaviour. Example: entering a 9-digit mobile number on signup shows “Enter a valid 10-digit number” and keeps the Continue button disabled.
12. Exploratory testing
Simultaneous learning, test design and execution — the tester explores the app guided by experience instead of a script, usually inside a time-box. Example: a 60-minute session on “what happens if the network drops during payment?”
13. Ad-hoc testing
Informal, unplanned testing with no documentation, aimed at breaking the app. Similar to exploratory testing but less structured. Example: rapidly double-tapping “Place Order” to see if two orders get created.
14. Database testing
Validates data integrity, constraints, stored procedures and that the UI/API writes the correct data. Example: after cancelling an order, run a SQL query to confirm status = 'CANCELLED' and the refund row exists.
Non-Functional Testing Types (With Examples)
15. Performance testing
The umbrella term for measuring speed, responsiveness and stability under a workload. Example: measuring that restaurant search responds within the agreed time limit under typical traffic.
16. Load testing
Checks behaviour under the expected peak number of users. Example: simulating the expected Saturday-night dinner traffic and confirming response times stay within the target.
17. Stress testing
Pushes the system beyond its limits to find the breaking point and see how it fails. Example: keep increasing virtual users during a sale event until errors appear — does it show a friendly error or crash?
18. Security testing
Finds vulnerabilities such as broken authentication, SQL injection, XSS and data exposure. Example: logged in as user A, change the order ID in the URL — you must not see user B’s order and address.
19. Usability testing
Evaluates how easy and intuitive the product is for real users. Example: watch five first-time users try to add a delivery address and note where they hesitate.
20. Accessibility testing
Ensures people with disabilities can use the app (screen readers, keyboard-only use, colour contrast), usually against WCAG guidelines. Example: can you complete checkout using only the keyboard, and does the screen reader announce the “Place Order” button? See Playwright accessibility testing.
21. Compatibility / cross-browser testing
Verifies the app works across browsers, operating systems, devices and screen sizes. Example: the order-tracking map works in Chrome, Firefox and Safari, and on a small Android screen.
22. Visual testing
Compares screenshots against an approved baseline to catch unintended visual changes. Example: a CSS change accidentally pushes the “Pay” button below the fold — the screenshot diff flags it. Read Playwright visual regression testing.
23. Localization testing
Checks the app is correctly adapted for a language and region: translations, date/time formats, currency, text fitting the layout. Example: switching the app to Hindi or Tamil — are labels translated, and does the longer text break the buttons?
24. Installation testing
Verifies install, upgrade and uninstall of the software work cleanly. Example: upgrading the Android app from the previous version keeps the user logged in and keeps saved addresses.
25. Recovery testing
Checks how well the system recovers from crashes, network loss or hardware failure. Example: kill the app mid-payment, reopen it, and confirm the order status is correct and the user is not charged twice.
Bonus: A/B testing
Strictly speaking, A/B testing is a product experiment, not a defect-finding test: two variants are shown to different users to see which performs better. QA’s job is to verify both variants work. Example: variant A shows a green “Order Now” button, variant B an orange one — both must place orders correctly.
Comparison Table: Which Testing Types Can You Automate With Playwright?
Playwright is a browser automation and test framework. It is excellent for some types and simply the wrong tool for others. Here is an honest breakdown:
| Testing type | Category | Can you automate it with Playwright? |
|---|---|---|
| Unit | Functional | Not its job — use Jest, Vitest, JUnit or pytest |
| Integration | Functional | Partly — service-to-service checks through its API client |
| System | Functional | Yes — through the UI and API |
| UAT | Functional | Partly — you can automate acceptance criteria, but sign-off is human |
| Smoke | Functional | Yes — tag tests @smoke and run with --grep |
| Sanity | Functional | Yes — run a focused subset of tests |
| Regression | Functional | Yes — its strongest use case |
| Retesting | Functional | Yes, if an automated test for that bug exists |
| End-to-end | Functional | Yes |
| API | Functional | Yes — built-in request fixture |
| UI / GUI | Functional | Yes |
| Exploratory | Functional | No — human-led; traces and AI agents can assist |
| Ad-hoc | Functional | No |
| Database | Functional | Indirectly — call a Node.js DB client inside your tests |
| Performance | Non-functional | Limited — can read browser timing for one user, not generate load |
| Load | Non-functional | No — use k6, JMeter, Gatling or Locust |
| Stress | Non-functional | No — same tools as load testing |
| Security | Non-functional | Limited — auth and access-control checks; use OWASP ZAP or Burp Suite for scanning |
| Usability | Non-functional | No — needs real users |
| Accessibility | Non-functional | Partly — with @axe-core/playwright; screen-reader checks stay manual |
| Cross-browser | Non-functional | Yes — Chromium, Firefox, WebKit plus device emulation (not real devices) |
| Visual | Non-functional | Yes — toHaveScreenshot() |
| Localization | Non-functional | Partly — set locale/timezoneId; translation quality needs a native reviewer |
| Installation | Non-functional | No — not applicable to browser automation |
| Recovery | Non-functional | Limited — can simulate offline mode and failed network calls |
Here is what tagging smoke and regression tests looks like in a Playwright project written in JavaScript:
import { test, expect } from '@playwright/test'; test('home page loads @smoke', async ({ page }) => { await page.goto('/'); await expect(page.getByRole('searchbox')).toBeVisible(); }); test('empty cart order is rejected @api @regression', async ({ request }) => { const res = await request.post('/api/orders', { data: { items: [] } }); expect(res.status()).toBe(400); }); // Run only smoke tests: npx playwright test --grep @smoke
Common Confusions Interviewers Love
Smoke testing vs sanity testing
| Point | Smoke testing | Sanity testing |
|---|---|---|
| Goal | Is the build stable enough to test? | Does this specific fix or change work? |
| Scope | Broad and shallow (whole app) | Narrow and deep (one area) |
| When | On every new build | After a minor change or bug fix |
| Documented? | Usually scripted | Often unscripted |
Honest note: many teams use these two words loosely. In an interview, give the textbook difference above, then add how your team actually used them — that shows real experience.
Retesting vs regression testing
| Point | Retesting | Regression testing |
|---|---|---|
| Goal | Confirm a specific bug is fixed | Confirm nothing else broke |
| Test cases | Only the ones that failed | Previously passed tests in affected areas |
| Automation | Often manual | The prime candidate for automation |
| Order | Usually done first | Done after retesting passes |
Verification vs validation
- Verification — “Are we building the product right?” Checks work products against specifications, mostly through reviews, walkthroughs and inspections (static testing).
- Validation — “Are we building the right product?” Checks the actual software meets the user’s needs by executing it (dynamic testing, UAT).
Functional vs non-functional testing
Functional = what the system does (login works). Non-functional = how well it does it (login is fast, secure and accessible). A login feature needs both.
Exploratory vs ad-hoc testing
Both are unscripted. Exploratory testing has a charter, a time-box and notes; ad-hoc testing is completely informal and usually undocumented.
Which Testing Types Matter Most for QA Jobs in India?
We are not going to invent salary or hiring numbers. But if you read QA job descriptions on Naukri, LinkedIn or company career pages, and sit through fresher and mid-level interviews at service companies and product startups, a clear pattern shows up:
- Must know cold (freshers and manual testers): functional, smoke, sanity, regression, retesting, system testing, UAT, black box techniques (boundary value analysis, equivalence partitioning), the STLC and the defect life cycle.
- Expected with 1–3 years’ experience: API testing (Postman or code-based), basic SQL for database testing, cross-browser testing, and at least one automation tool.
- Differentiators for automation roles: UI and E2E automation (Playwright or Selenium), regression suites running in CI/CD, visual and accessibility checks, and increasingly AI-assisted test generation.
- Specialist tracks: performance (JMeter, k6) and security testing are separate career paths with their own tools — useful to understand, not required for most QA openings.
The shift worth noticing: manual testing knowledge is the foundation, but the roles that grow are the ones where you can automate the repetitive types — smoke, regression, API and E2E. Our manual tester to automation engineer roadmap lays out that path step by step, and the software testing tools guide shows which tool fits which testing type.
Automating the Right Types With Playwright + Claude AI
You do not automate “testing” in general — you automate specific types. The highest-return types to automate first are smoke, regression, API and end-to-end, because they run on every build and are the most boring to repeat by hand.
This is where AI helps today. Claude AI can turn a user story into a list of functional, negative and boundary test cases in seconds. With the Playwright MCP Server, Claude can open a real browser, read the page and draft Playwright tests that you then review, run and commit. The human part — deciding which types of testing a feature needs and judging the results — stays with you. That judgement is exactly what this guide trains.
Preparing for interviews? Pair this guide with our Playwright interview questions.
Frequently Asked Questions
What are the main types of software testing?
The main types of software testing are functional testing and non-functional testing. Functional testing checks what the system does (unit, integration, system, acceptance, smoke, sanity, regression). Non-functional testing checks how well it does it (performance, load, security, usability, accessibility, compatibility).
What are the 4 levels of software testing?
The four levels of software testing are unit testing (individual functions), integration testing (modules working together), system testing (the complete application against requirements) and acceptance testing or UAT (business users confirming the product is ready for release).
What is the difference between smoke testing and sanity testing?
Smoke testing is a broad, shallow check run on every new build to confirm the critical features work and the build is stable enough to test. Sanity testing is a narrow, deeper check of one specific area after a minor change or bug fix. Smoke is usually scripted; sanity is often unscripted.
What is the difference between retesting and regression testing?
Retesting re-runs the exact test case that failed to confirm a specific bug is fixed. Regression testing re-runs previously passed tests to confirm the change did not break anything else. Retesting is usually done first and is often manual; regression testing is the main candidate for automation.
Is regression testing functional or non-functional?
Regression testing is usually classified as functional testing because it re-checks that existing features still behave correctly. However, the same idea applies to non-functional areas too, for example performance regression or visual regression testing.
Which types of testing can be automated?
Repetitive, stable checks are the best candidates: smoke, regression, API, UI, end-to-end, cross-browser and visual testing. Load and stress testing are automated with dedicated tools like k6 or JMeter. Exploratory, ad-hoc and usability testing need human judgement and are not automated.
Can Playwright be used for performance or load testing?
No, Playwright is not a load testing tool. It drives real browsers, so it can measure page timing for a single user, but it cannot efficiently simulate thousands of concurrent users. Use k6, JMeter, Gatling or Locust for load and stress testing, and Playwright for functional, API, visual and cross-browser testing.
Which testing types should a fresher learn first for QA interviews in India?
Start with functional testing, the four levels of testing, black box techniques, smoke vs sanity, retesting vs regression, verification vs validation, and the defect life cycle. Then add API testing, basic SQL and one automation tool such as Playwright to stand out from other freshers.
Asim Noaman
Senior QA Automation Engineer & AI Testing Specialist
With years of hands-on experience building test automation frameworks for production applications, Asim specializes in combining traditional QA methodologies with cutting-edge AI tools. He has helped teams adopt Playwright and AI-driven testing workflows to ship faster with fewer bugs.
Playwright + Claude AI Course
Know the Testing Types? Now Automate the Repetitive Ones
Smoke, regression, API and end-to-end tests are the types every QA team wants automated. The course shows you how to automate them with Playwright in JavaScript, and how to use Claude AI and the Playwright MCP Server to draft test cases and tests faster. 4.4★ from 116 ratings, 460+ students, 11.5 hours across 103 lectures.
- UI and end-to-end automation with Playwright from the ground up
- API testing with Playwright’s built-in request client
- Generate and refine tests with Claude AI and the Playwright MCP Server
- Run your regression suite in CI/CD with GitHub Actions