How to Write a Test Plan
A test plan is the project- or release-level document that says what will be tested, how, by whom, when, in which environments and against which criteria testing starts and stops. It applies the organisation’s test strategy to one scope and records every decision specific to it: which features are in and out, how deep each is tested, what the schedule depends on, and which risks could derail testing itself.
This guide lists the contents of a complete plan, explains the four kinds of criteria that control it, covers prioritisation, scheduling and resourcing, and gives a copy-ready template, a lightweight one-page variant for agile teams and a worked excerpt for a fictional release.
What a test plan is for
A plan answers the questions stakeholders ask before and during testing: what exactly are we testing, what are we deliberately not testing, when will we know enough to release, what do you need from us, and what could stop you. If those answers exist only in the QA lead’s head, the plan does not exist, whatever the document says.
The classic outline comes from IEEE 829, whose test plan sections (test items, features to be tested and not to be tested, approach, pass/fail criteria, suspension and resumption, deliverables, environment, responsibilities, schedule, risks, approvals) are still recognisable in most templates. IEEE 829-2008 has since been superseded by the ISO/IEC/IEEE 29119 series; its part 3, ISO/IEC/IEEE 29119-3, is now the international reference for test documentation and treats the test strategy chosen for a project as part of the test plan. The ISTQB CTFL v4.0 syllabus describes the typical content of a test plan in similar terms: the context of testing, assumptions and constraints, stakeholders, communication, a risk register, the test approach, and budget and schedule.
The plan is a living document. It is written before test design starts, reviewed with development, product and operations, approved, and then updated whenever scope, dates or risks change — with a version number so everyone knows which one they are reading.
What a test plan contains
- Scope — the release or project, the test items (builds, services, apps, versions) and the boundaries of the system under test.
- Test objectives — what this round of testing must find or demonstrate, for example "no Critical defect in payments" or "every acceptance criterion of release 4.0 verified".
- Features to be tested — listed by requirement or story ID with a risk level, so the depth of testing per feature is visible.
- Features not to be tested — with the reason (unchanged, out of release, owned and tested by a vendor). This section prevents the most expensive misunderstandings.
- Approach — test levels and types, design techniques per feature, what is automated and where it runs, regression scope, non-functional testing, and any deviation from the strategy with its justification.
- Entry, exit, suspension and resumption criteria — see the next section.
- Environments — which environments, versions, integrations and sandboxes, devices and browsers, and who provides access.
- Test data — where it comes from (synthetic, generated), volumes, how it is reset, and privacy constraints.
- Schedule and milestones — test activities with dates and their dependencies on development, design and operations milestones.
- Resources, roles and responsibilities — who designs, executes, automates, triages, reports and signs off; allocation and any training needed.
- Risks and mitigations — project risks to the testing itself (late builds, unstable environments, missing skills), each with an owner. Product risks belong to the risk analysis that sets test depth.
- Assumptions and dependencies — what the plan takes as given and what testing needs from other teams, by when.
- Deliverables — test cases, automated tests, status reports, defect reports, the test completion report.
- Approvals — who approves the plan and, separately, who takes the release decision.
Try it: Requirements → Test Cases Try it: AI Test Coverage Analyzer
Entry, exit, suspension and resumption criteria
Criteria turn arguments into checks. Entry criteria define when a test activity may start; exit criteria define when it may be considered complete. Suspension criteria define when testing should pause because continuing would waste effort, and resumption criteria define what must be fixed before it restarts. The end-to-end quality assurance guide explains how entry and exit criteria act as release gates; the plan’s job is to make them specific and measurable for its scope.
| # | From | To | Criterion |
|---|---|---|---|
| 1 | Not startedStart | Testing | Entry criteria met, e.g. build deployed to the test environment, smoke suite green |
| 2 | Testing | Suspended | Suspension criterion hit: smoke fails on a new build, a key environment or sandbox is unavailable longer than agreed, or one defect blocks a large share of tests |
| 3 | Suspended | Testing | Resumption criteria met: a fixed build passes smoke, the environment is restored, or the blocking defect is verified as fixed |
| 4 | Testing | CompleteEnd | Exit criteria met, e.g. planned tests executed, no open Blocker or Critical defects |
Complete does not mean released: the release decision is a separate approval based on the exit criteria. Write every criterion so that two people would reach the same yes/no answer.
- Entry — build deployed to the test environment, smoke suite green, acceptance criteria reviewed, test data loaded, required integrations reachable.
- Exit — planned tests executed (for example all High-risk tests and at least a stated percentage of the rest), no open Blocker or Critical defects, remaining defects accepted by the product owner, regression suite green, non-functional targets met.
- Suspension — smoke test fails on a new build, a key environment or sandbox is unavailable for longer than an agreed time, or a single defect blocks a large share of the planned tests.
- Resumption — a fixed build passes the smoke test, the environment is restored, or the blocking defect is verified as fixed.
- Write every criterion so that two people would reach the same yes/no answer; "sufficiently tested" is not a criterion.
Prioritisation, schedule and resources
Order the test work by risk first: the features with the highest likelihood and impact of failure are designed and executed first, so that if time runs out, what is left untested is the least dangerous. Within that order, respect dependencies — a feature cannot be tested before its build and data exist — and prefer early testing of anything that could force redesign, such as integrations with payment or identity providers. Coverage-based and requirements-based ordering are useful secondary rules.
Build the schedule backwards from the release decision. Leave explicit time for defect fixing and re-testing, for the final regression run, and for non-functional tests that need a stable build. Resource planning is more than headcount: record who has the domain knowledge, device access and automation skills each activity needs, and what happens when that person is unavailable. The effort figures themselves come from the estimate, which the test estimation guide covers.
- Schedule the riskiest and most dependency-heavy testing first, not the easiest.
- Plan at least one fix-and-retest cycle; plans without one assume there will be no defects.
- Keep a named backup for every critical skill: payments domain, mobile devices, performance tooling.
- Tie milestones to events, not only dates: "cycle 1 starts when entry criteria are met", with the target date alongside.
Try it: Risk-Based Test Generator Try it: AI Risk-Based Test Generator
A test plan template
Copy the outline below and delete what your context does not need. A section that stays empty should say why ("No performance testing: no server-side change in this release") rather than disappear, because the absence is a decision.
TEST PLAN - <product> <release or project> ID: TP-<nnn> Version: <x.y>
Status: Draft | In review | Approved Owner: <QA lead> Date: <yyyy-mm-dd>
Strategy reference: <link to test strategy and its version>
1. Introduction and context
Purpose, release summary, links to requirements, designs and the risk register
2. Scope
2.1 Test items builds, services, apps, platforms and versions under test
2.2 Features to be tested <ID> <feature> - risk level - depth of testing
2.3 Features not to be tested <feature> - reason
3. Test objectives what this round of testing must find or show
4. Approach
Levels and types; design techniques per feature; automation (what runs where);
regression scope; non-functional testing; deviations from the strategy and why
5. Criteria
5.1 Entry 5.2 Exit 5.3 Suspension 5.4 Resumption
6. Test environments environments, versions, sandboxes, devices, browsers, access
7. Test data sources (synthetic), volumes, reset procedure, privacy rules
8. Schedule and milestones activities, target dates, dependencies
9. Resources and responsibilities roles, people, allocation, backups, training needs
10. Estimates effort ranges and the assumptions behind them
11. Risks and mitigations project risk - likelihood/impact - mitigation - owner
12. Assumptions and constraints
13. Dependencies what testing needs from whom, by when
14. Deliverables test cases, automated tests, status reports,
defect reports, test completion report
15. Communication and reporting cadence, channel, audience, escalation path
16. Approvals name - role - decision - dateTry it: Test Plan Generator Try it: AI QA Checklist Generator
A lightweight test plan for agile teams
In Scrum and similar frameworks the long-lived decisions sit in the strategy and the Definition of Done, and much of the plan lives in the backlog: each story carries its acceptance criteria and the team plans testing tasks in sprint planning. What is still worth writing down per sprint or release is short: the goal, what is in and out, the top risks and how they are tested, what regression runs, what the environment and data depend on, and any additions to the Definition of Done. One page, kept in the team wiki and linked from the sprint board, is enough.
SPRINT TEST PLAN - Bustan Market, sprint 42 (fictional) one page, team wiki
Goal: Customers can pay with Apple Pay on iOS and web; saved-card flow unchanged
In scope: BUS-812 Apple Pay (iOS app, Safari), BUS-815 order confirmation email (ar/en)
Out: Android wallet payments (planned for sprint 44), seller portal
Top risks: R1 payment captured but order not created (L4 x I5)
-> idempotency and retry tests at API level, automated in CI
R2 Arabic email totals misaligned (L3 x I3) -> RTL rendering check
Approach: API tests for the new payment endpoint; one exploratory session per story;
regression = automated checkout suite + manual saved-card check on 2 devices
Env/data: staging + payment provider sandbox; synthetic customers only
DoD adds: acceptance criteria pass; 0 open Blocker/Critical; regression green; demo done
Who: Sara (QA, iOS), Omar (QA, web/API); developers own unit and API tests
If blocked: sandbox outage -> use mocked gateway responses; raise in daily stand-upWorked example: an excerpt from a release test plan
For example, the excerpt below comes from a plan for release 4.0 of Bustan Market, the fictional Saudi marketplace used in the test strategy guide. It shows the sections people most often leave vague: features with risk and depth, features not tested with reasons, measurable criteria, a schedule with a fix-and-retest cycle, and project risks with owners.
TEST PLAN TP-040 - Bustan Market 4.0 "One-page checkout" (fictional excerpt) v1.1
2.2 Features to be tested Risk Depth
CHK-01 One-page checkout, web + apps (ar/en) High boundaries, negative,
exploratory, auto regression
CHK-02 Coupon and promotion stacking rules High decision table (14 rules),
automated API tests
CHK-03 Cash-on-delivery limit (max 2,000 SAR) Medium 1,999.99 / 2,000.00 / 2,000.01
CHK-04 Delivery slot picker (Hijri/Gregorian display) Medium both calendars, ar/en, RTL
CHK-05 Order confirmation SMS and email Low content check ar/en, one pass
2.3 Features not to be tested
Seller portal - unchanged in 4.0; covered by the nightly regression suite only
Courier tracking internals - partner-owned; our webhook handling IS in scope
5. Criteria
Entry: 4.0.0-rc deployed to staging; smoke green; acceptance criteria reviewed;
payment sandbox reachable; synthetic data set v7 loaded
Exit: all High-risk tests executed and passed (or waived in writing by the PO);
>= 95% of all planned tests executed; 0 open Blocker/Critical;
<= 3 open Major defects, each with a fix date; regression green two nights
running; p95 checkout API < 800 ms at 3x normal peak
Suspend: smoke fails on a new build; sandbox down > 4 working hours;
> 30% of planned tests blocked by one defect
Resume: fixed build passes smoke; sandbox restored; blocking defect verified
8. Schedule (working days)
D1-D3 design + data setup D4-D11 execution, cycle 1 (High risk first)
D12-D13 fix verification + full regression D14 load test D15 go/no-go
11. Project risks Mitigation Owner
Payment sandbox instability mocked gateway for negative paths QA lead
Late delivery of CHK-02 promotions API-level tests first, UI last Dev lead
One tester on leave D8-D10 developer pairs on regression runs Eng. managerCommon test plan mistakes
- A plan that restates the strategy and says nothing about this release.
- No "features not to be tested" section — then everyone assumes their feature is covered.
- Exit criteria that cannot be measured ("adequate coverage", "stable build").
- No time for fixing and re-testing, or a schedule that ends on the release date with no buffer for the go/no-go decision.
- Mixing product risks (what could fail for users) with project risks (what could stop testing) in one undifferentiated list.
- Written once for approval and never updated; by mid-release it describes a different project.
- Approvals from people who never read it — review the scope, criteria and risks with them in a meeting instead.
Frequently asked questions
What is the difference between a test plan and a test strategy?
The strategy is the long-lived, organisation- or product-level description of how testing is done. The test plan applies it to one project or release: this scope, these criteria, this schedule, these people, these risks.
What are the main sections of a test plan?
Scope and test items, objectives, features to be tested and not to be tested, approach, entry/exit/suspension/resumption criteria, environments, test data, schedule, resources and responsibilities, risks and mitigations, assumptions and dependencies, deliverables and approvals.
Do agile teams need a test plan?
They need the decisions a plan records, not necessarily a long document. A one-page sprint or release test plan with the goal, scope, top risks, approach, regression, environment and Definition of Done additions is usually enough, with the rest in the backlog and the strategy.
Who writes and approves the test plan?
The QA lead or test manager usually writes it with input from the team. The product owner or project manager, the development lead and, where relevant, operations approve it. The release decision itself is a separate approval based on the exit criteria.
What are suspension and resumption criteria?
Suspension criteria define when testing should pause because continuing would waste effort — a failed smoke test, an unavailable environment, one defect blocking many tests. Resumption criteria define what must be true to restart, such as a fixed build passing the smoke test.
Is IEEE 829 still used for test plans?
Its outline is still familiar and many templates are based on it, but IEEE 829-2008 has been superseded by the ISO/IEC/IEEE 29119 series, and ISO/IEC/IEEE 29119-3 is now the international standard for test documentation. Use either as a checklist of content, not as a form to fill.
References
- ISO/IEC/IEEE 29119-3:2021 — Software and systems engineering — Software testing — Part 3: Test documentationTemplates and content for test documentation — test policy, strategy, plan, status and completion reports, incident reports.
- ISTQB Certified Tester Foundation Level (CTFL) v4.0The foundation syllabus of software testing: test levels and types, test design techniques, test management and tools.
- Certified Tester Advanced Level Test Management (CTAL-TM) v3.0ISTQB's advanced syllabus on managing testing: test planning and estimation, risk-based testing, monitoring, metrics and reporting.
- ISO/IEC/IEEE 29119-2:2021 — Software and systems engineering — Software testing — Part 2: Test processesThe test process model: organisational, test management and dynamic test processes, with their activities and outcomes.
- Agile Testing: A Practical Guide for Testers and Agile Teams (Lisa Crispin, Janet Gregory)The agile testing quadrants and how testers work inside a delivery team — the basis of "testing at the right layer".
- The 2020 Scrum GuideThe definition of Scrum: its accountabilities, events and artifacts, including the Definition of Done that testing helps meet.
Practice exercise
Repair a weak test plan for a banking app release
A new team member wrote the first draft of the test plan for release 6.1 of a bank’s mobile app (fictional). The release brief and the draft are below. The go/no-go meeting is on the twelfth working day of the plan (D12), and the product owner wants to approve the plan this week.
Review the draft against what a test plan must contain, list at least six problems, then rewrite the sections that decide the most: features to be tested and not to be tested, the four kinds of criteria, the schedule and the risks. Do not invent facts beyond the brief; where it is silent, write the question you would ask. Thresholds such as percentages and hours are your decisions: write them so that they can be checked.
RELEASE BRIEF - mobile banking app 6.1 of a retail bank (fictional)
Days: working days; D1 is the first day of the plan
New: Scheduled transfers - one-off on a future date, or monthly on a chosen day,
between own accounts and to saved local beneficiaries. A monthly transfer
whose day does not exist in a month runs on the last day of that month.
A customer can edit or cancel a scheduled transfer before it runs.
Changed: Beneficiary list redesign - search, nicknames, new selection screen
Unchanged: Login, card freeze, statement download (no code change in 6.1)
Not in 6.1: International transfers (planned for 6.3)
Platforms: iOS and Android apps, Arabic and English
Build: 6.1.0-rc1 reaches staging on D3; go/no-go meeting on D12
Staging: The core banking sandbox is shared with another team; it was down
several times last month. The scheduler that executes due transfers
runs once a night.
Team: Huda (QA, knows the payment flows; on leave D6-D7)
Faisal (QA, automation, looks after the test devices)
Automation: Nightly regression suite covers login, card freeze and statements
DRAFT TEST PLAN TP-061 v0.1
Scope: Test the app.
Features: Scheduled transfers, beneficiary list, login, card freeze, statements,
Arabic and English.
Approach: Manual testing of all features. Automation if time allows.
Entry: Build is ready.
Exit: Testing is complete, the app is stable and coverage is adequate.
Schedule: D1-D12 testing, go/no-go on D12.
Risks: Money sent twice; transfer runs on the wrong day; sandbox is down;
Huda on leave; Arabic amounts look wrong.
Team: Huda, Faisal.
Approval: QA lead.- Read the brief and the draft. Mark every sentence two people could answer differently, and every section of the guide’s contents list that the draft lacks.
- Rewrite the scope: each feature to be tested with an ID, a risk level and the depth of testing; each feature not to be tested with its reason.
- Write entry, exit, suspension and resumption criteria that each give a yes/no answer.
- Build the schedule backwards from the go/no-go on D12, with test design before the build arrives, a fix-and-retest cycle, a final regression run and the tester’s leave taken into account.
- Split the risk list into product risks and project risks, and give each project risk a mitigation and an owner.
Show the model answer
Problems in the draft (finding six or more of these completes the first part): (1) The scope names no test items and no boundaries: not the app version, not the platforms, not what is out. (2) The feature list mixes new, changed and unchanged features with no risk level or depth, and there is no "features not to be tested" section, so nobody can see that login, card freeze and statements will get only the regression suite. (3) "Manual testing of all features" and "automation if time allows" are not an approach: no test levels, techniques, regression scope or automation decision. (4) The entry criterion ("build is ready") and the exit criteria ("complete", "stable", "adequate") cannot be measured; two people would answer them differently.
(5) There are no suspension or resumption criteria, although the sandbox is known to fail. (6) The schedule starts testing on D1 although the build arrives on D3; it has no time for test design, no fix-and-retest cycle, no final regression run and no buffer before the go/no-go, and it ignores Huda’s leave. (7) The risk list mixes product risks (money sent twice, wrong day, Arabic amounts) with project risks (sandbox, leave) and gives no likelihood, impact, mitigation or owner. (8) The team line has no roles or backups, and only the QA lead approves: the product owner and the development lead should approve the plan too, and the release decision is a separate approval. (9) Environments, test data, test objectives, deliverables and the dependency on the nightly scheduler are missing.
Features to be tested (your IDs and wording may differ): STR-01 one-off scheduled transfer — High — boundary values of the allowed dates, executed exactly once on the due date, editing and cancelling before the run, negative cases such as insufficient balance on that day or a beneficiary deleted before the run. STR-02 monthly scheduled transfer — High — chosen days 28 to 31 in February of a leap and a non-leap year and in 30-day months (the last-day rule), exactly one debit per month, editing and cancelling a series, plus automated API-level checks that a repeated scheduler run does not debit the same transfer twice. BEN-01 beneficiary list — High — the beneficiary paid is the one selected and shown on the confirmation screen, search with Arabic and Latin names, similar or identical nicknames. LOC-01 Arabic and English on the new screens — Medium — amounts, dates and right-to-left layout in both languages on iOS and Android. Add one exploratory session per feature.
Features not to be tested: login, card freeze and statement download — no code change in 6.1, covered by the nightly regression suite only (the smoke test still logs in); international transfers — not in 6.1, planned for 6.3; the core banking system itself — a separate system the app calls through the shared sandbox, not a test item of this plan (confirm with its owners who tests it), while the app’s calls to it and its handling of the responses are in scope.
Entry criteria for cycle 1: 6.1.0-rc1 deployed to staging and installed on the iOS and Android test devices; the smoke test passes (log in, view accounts, one immediate transfer between own accounts); acceptance criteria of STR-01, STR-02 and BEN-01 reviewed; synthetic customers, accounts and beneficiaries loaded; the core banking sandbox reachable; the scheduler can be triggered on demand in staging.
Exit criteria: all High-risk tests executed and passed, or each failed test waived in writing by the product owner; at least 95% of all planned tests executed; no open Blocker or Critical defect; at most 2 open Major defects, each accepted by the product owner with a target fix version; nightly regression suite green on the final release candidate; every acceptance criterion of 6.1 linked to at least one executed test. Suspension criteria: the smoke test fails on a new build; the sandbox is unavailable for more than 4 working hours; one defect blocks more than 30% of the planned tests (for example, no scheduled transfer can be saved). Resumption criteria: a new build passes the smoke test; the sandbox is restored and one test transfer completes; the blocking defect is fixed and its confirmation test passes.
Schedule, built backwards from the go/no-go: D1–D2 test design, data setup and review of the acceptance criteria (no build needed); D3 entry check on rc1 — cycle 1 starts when the entry criteria are met, target D3; D3–D5 Huda runs the scheduled-transfer tests, High risk first, with Faisal pairing on D3 and running the beneficiary list tests on D4–D5; D6–D7 Faisal runs the Arabic and English checks on both platforms and automates the scheduler checks while Huda is on leave; D8–D9 fix verification (confirmation testing) on the next candidate and re-run of the affected tests; D10 full regression on the final candidate; D11 buffer for a late fix and the test completion report; D12 go/no-go against the exit criteria.
Product risks go to the risk analysis, where they set the depth above: a scheduled transfer executed twice (High), a transfer executed on the wrong day (High), money sent to the wrong beneficiary after the redesign (High), Arabic amounts or dates shown incorrectly (Medium). Project risks, each with a mitigation and an owner: the shared sandbox fails — agree fixed test windows with the other team and use mocked core banking responses for negative paths, owner QA lead; Huda, the only payments expert, is away on D6–D7 — schedule her tests before the leave, pair Faisal with her and keep her test cases detailed enough for others to run, owner QA lead; the scheduler runs only at night — developers add an on-demand trigger before D3, owner development lead.
Also add: test items (the 6.1.0-rc builds and the iOS and Android versions under test), test objectives (scheduled transfers execute exactly once, on the right date, to the selected beneficiary; no Blocker or Critical defect in the new flows), an approach (system testing of the new and changed features on both platforms and system integration testing with the core banking sandbox, using the techniques above; automated API-level scheduler checks; regression = the nightly suite plus the full run on D10), environments and test data (staging, the sandbox, the devices, synthetic customers only, reset before each cycle), dependencies (development provides the on-demand scheduler trigger before D3 and the next release candidate by D8), deliverables (test cases, automated scheduler checks, a daily status report, defect reports, the test completion report), and approval by the product owner and the development lead, with the go/no-go as a separate decision. Raise the plan to version 0.2 and record what changed.
Questions for the team, because the brief is silent: Can the scheduler be triggered on demand, or the system date moved forward, in staging? What should happen when the balance is insufficient on the execution day, and is the customer notified? Which future dates may a one-off transfer use? Are identical nicknames allowed?
Check your own work: thresholds such as 95%, 4 hours or 2 Major defects are team decisions and yours may differ. What matters is that every criterion gives two readers the same yes/no answer, every excluded feature has a reason, every project risk has an owner, and the schedule starts execution no earlier than D3, contains a fix-and-retest cycle and a regression run, and ends before the go/no-go.
Your progress on this topic
Not started
Mark the topic complete when you have studied it and done the exercise.
Sign in to track your progress
Mark topics complete, continue where you left off and unlock specialisation exams.
Part of the QA Roadmap
Before this topic
Tools mentioned in this guide
Generate a test plan from a template: pick website, mobile app, API, agile sprint or release, fill in what you know and get a complete Markdown plan to edit.
Score features by likelihood and impact, then generate a prioritised risk-based test plan.
Identify risks for a feature or release and generate a prioritised risk-based test plan with Mutqan AI.
Convert a list of numbered requirements into traceable test cases with a requirement-to-test matrix.
Generate a tailored QA checklist (functional, UI, API, security, performance, accessibility, release) for any feature with Mutqan AI.
Generate regression scenarios from a change description and a list of affected and related modules.
Compare requirements or a user story against existing test cases to find untested areas, with Mutqan AI.