Template

Load Test Plan Template with a Worked Example

Updated October 27, 2026•9 min read•Planning•Template

Written by

Reviewed by the LoadTester editorial team. Review process: see the editorial policy.

Published
2026-10-27
Last reviewed
2026-10-27
Author
Kristian Razum
Load Test Plan Template with a Worked Example: LoadTester illustration

A load test plan answers ten questions before any traffic is sent: why you are testing, what is in scope, what load model and numbers you will use, which test types run when, in which environment, with what data, what counts as a pass, what you will monitor, what could go wrong and how you stop it, and who signs off. Below is each section with a filled-in example for a fictional "Acme API checkout" service, followed by a blank Markdown version you can copy.

About the example

"Acme API checkout" is fictional. Every number in the example sections is illustrative, chosen to show how the sections fit together. Replace them with your own measurements.

1. Objectives and scope

State the decision the test supports. "Verify performance" is not an objective; "confirm checkout handles the holiday forecast with 50% headroom before the Nov 20 freeze" is. Scope should list what is in, what is out, and why.

FieldExample: Acme API checkout
ObjectiveConfirm the checkout API sustains 1.5x forecast peak with thresholds met, and find the breaking point.
Decision it supportsGo / no-go for the holiday promotion; whether to add a read replica.
In scopePOST /v1/cart, GET /v1/cart/{id}, POST /v1/checkout/quote, POST /v1/orders
Out of scopePayment provider (stubbed), email service, admin API, frontend rendering

2. Workload model

Write down where the numbers come from so reviewers can challenge the assumptions. Choose open (arrival rate, fixed RPS) or closed (fixed VUs) deliberately; for public APIs, an open model is usually closer to reality. See open vs closed workload models.

Measured peak (last holiday, 1-min resolution):  240 RPS across checkout endpoints
Growth since then:                               x 1.30
Forecast peak:                                   240 x 1.30 = 312 RPS
Target (1.5x headroom):                          312 x 1.5  = 468 RPS -> round to 470 RPS
Model:                                           open (arrival rate)
EndpointShareRPS at targetNotes
GET /v1/cart/{id}45%211Read, cacheable per user
POST /v1/cart30%141Write, session store
POST /v1/checkout/quote17%80Calls tax and shipping services
POST /v1/orders8%38Write, stock reservation, payment stub

The RPS calculator converts between users, sessions and requests if your source data is in users.

3. Test types and schedule

#TypeProfileDurationDate (example)
1Smoke10 RPS2 minMon, week 1
2BaselineCurrent peak, 240 RPS15 minTue, week 1
3LoadRamp 5 min to 470 RPS, hold30 minThu, week 1
4Stress / breakpoint+50 RPS every 5 min until thresholds breakUntil stopTue, week 2
5Spike240 to 625 RPS in 30 s, hold 5 min10 minWed, week 2
6Soak312 RPS4 hThu, week 2

Re-tests after fixes repeat test 3 and the failing test, with the same script and data.

4. Environment and test data

Document how the test environment differs from production, because every difference is a caveat on the result.

ItemProductionTest environment (example)
App instances6 x 2 vCPU6 x 2 vCPU (same)
DatabasePrimary, 8 vCPU, 420 GBPrimary, 8 vCPU, restored snapshot 410 GB
CDN / WAFYesWAF in front, load generator IPs allowlisted
Payment providerLiveStub with 300–800 ms latency

Data: 50,000 synthetic customer accounts, 20,000 SKUs with stock set high enough not to sell out mid-test, unique cart per virtual user. Test orders are tagged source=loadtest and deleted by script after each run.

5. Success criteria and thresholds

Numeric, per endpoint, agreed before the run. Thresholds are checked over the steady-state hold, excluding ramp-up.

Endpointp95p99Error rateAuto-stop if
GET /v1/cart/{id}< 150 ms< 400 ms< 0.5%p95 > 1 s for 1 min
POST /v1/cart< 250 ms< 600 ms< 0.5%p95 > 1 s for 1 min
POST /v1/checkout/quote< 500 ms< 1,200 ms< 1%errors > 5%
POST /v1/orders< 900 ms< 2,000 ms< 0.1%errors > 2%
OverallAchieved RPS within 2% of target during holdGenerator CPU > 85%

For why both p95 and p99 are listed, see p95 vs p99. Most tools can enforce these during the run; in LoadTester, for example, you set p95 and error-rate thresholds with auto-stop on breach so a failing stress test ends itself.

6. Monitoring

  • Client side: RPS, p50/p95/p99 per endpoint, error rate by type, active VUs.
  • Service: CPU, memory, GC pauses, request queue, HTTP client pool usage per instance.
  • Database: CPU, active connections vs max_connections, lock waits, slow query log at 200 ms.
  • Dependencies: tax and shipping service latency and error rate, stub latency.
  • Generator: CPU, network, open connections.

Name the dashboard links in the plan and sync clocks; mark each test start and stop on the dashboards. How to read load test results covers what to look for afterwards.

7. Risks and rollback

RiskLikelihoodMitigationStop / rollback
Test traffic affects shared database used by other teamsMediumRun in agreed window, notify #db-teamAbort test; auto-stop thresholds
Test orders reach fulfillmentLowTag orders, fulfillment filter on source=loadtestCleanup script, manual check
WAF blocks generators mid-testMediumAllowlist generator IPs beforehandInvalidate run, fix, repeat
Autoscaling adds cost or capacity that masks limitsMediumFix instance count for load and stress runsScale back after test

The production load testing checklist covers the extra safeguards if any run targets production.

8. Roles and sign-off

RoleExampleApproves
Test ownerCheckout team engineerScripts, data, execution
Service ownerCheckout tech leadObjectives, thresholds, go / no-go
Environment ownerPlatform / SREEnvironment, window, abort criteria
Affected teamsDatabase, fulfillmentWindow and safeguards

Copyable Markdown template

Paste this into your wiki, repository or ticket and fill in the brackets. It mirrors the sections above.

# Load Test Plan: [service / feature]

Version: [x.y]  |  Owner: [name]  |  Last updated: [YYYY-MM-DD]

## 1. Objectives
- Objective: [what we want to learn, in one sentence]
- Decision this supports: [go/no-go, sizing, architecture choice]

## 2. Scope
- In scope: [endpoints / flows]
- Out of scope: [systems, and why; stubs used]

## 3. Workload model
- Source data: [where peak numbers come from, resolution]
- Measured peak: [N] RPS on [date]
- Growth / events: x [factor] ([reason])
- Forecast peak: [N] RPS
- Target: [N] RPS ([headroom] x forecast)
- Model: [open (arrival rate) | closed (VUs)], think time: [s]

| Endpoint / flow | Share | RPS at target | Notes |
|---|---|---|---|
| [GET /...] | [%] | [N] | [ ] |

## 4. Test types and schedule
| # | Type | Profile | Duration | Date |
|---|---|---|---|---|
| 1 | Smoke | [N] RPS | [min] | [date] |
| 2 | Baseline | [N] RPS | [min] | [date] |
| 3 | Load | ramp to [N] RPS, hold | [min] | [date] |
| 4 | Stress | +[N] RPS every [min] until break | until stop | [date] |
| 5 | Spike | [N] to [N] RPS in [s] | [min] | [date] |
| 6 | Soak | [N] RPS | [h] | [date] |

## 5. Environment
| Item | Production | Test env |
|---|---|---|
| App instances | [ ] | [ ] |
| Database | [ ] | [ ] |
| CDN / WAF | [ ] | [ ] |
| Third parties | [ ] | [stubbed? latency?] |

Known differences and their effect on results: [ ]

## 6. Test data
- Accounts / entities: [counts, how generated]
- Uniqueness: [per VU / per iteration]
- Cleanup: [how test records are tagged and removed]

## 7. Success criteria (checked over steady state, ramp excluded)
| Endpoint | p95 | p99 | Error rate | Auto-stop if |
|---|---|---|---|---|
| [ ] | < [ms] | < [ms] | < [%] | [condition] |
Overall: achieved RPS within [%] of target; generator CPU < [%]

## 8. Monitoring
- Client: [dashboard link]
- Service: [dashboard link]
- Database: [dashboard link]
- Dependencies: [ ]
- Generator health: [ ]

## 9. Risks and rollback
| Risk | Likelihood | Mitigation | Stop / rollback |
|---|---|---|---|
| [ ] | [L/M/H] | [ ] | [ ] |

Abort criteria: [conditions]  |  Who can abort: [names]
Communication channel during test: [#channel]

## 10. Sign-off
| Role | Name | Date |
|---|---|---|
| Test owner | [ ] | [ ] |
| Service owner | [ ] | [ ] |
| Environment owner | [ ] | [ ] |
| Affected teams | [ ] | [ ] |

## Results (fill in after each run)
| Run | Date | Achieved RPS | p95 | p99 | Errors | Pass/Fail | Link |
|---|---|---|---|---|---|---|---|
| [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] | [ ] |

Using the plan well

  • Review it before the first run, not after. The point is to agree on thresholds while nobody has a result to defend.
  • Keep it next to the test scripts. A Markdown file in the same repository as the scripts gets updated when the scripts change.
  • Record every run in the results table, including invalid ones and why they were invalid. Shareable result links save copying charts.
  • Revisit the workload model each quarter or before any major event; the forecast is the assumption most likely to be wrong.
Next step

Copy the template, fill in sections 1 to 3 first (objective, scope, workload model) and get the service owner to agree on them. The rest follows from those numbers. For where load tests fit in the release cycle overall, see the load testing strategy guide.

FAQ

How long should a load test plan be?

One to three pages for most services. The plan exists so that everyone agrees on the target, the pass criteria and the risks before the test runs. If a section does not change a decision, cut it.

Who should sign off on a load test plan?

The service owner who will act on the results, whoever owns the environment being tested (often platform or SRE), and anyone whose systems the test touches indirectly, such as a database team or a third-party integration owner. For production tests, add the on-call lead for the test window.

What is the difference between a load test plan and a load testing strategy?

A strategy describes how an organization approaches performance testing in general: which test types, when in the release cycle, which tools. A plan is specific to one test effort: this service, these targets, these dates, these people. Plans should reference the strategy rather than repeat it.

How do I choose the target load for the plan?

Start from measured production peaks at 1-minute resolution, apply expected growth and known events, and add headroom, typically 1.5x to 2x for peak tests. Write the derivation into the workload model section so reviewers can challenge the assumptions rather than the number.

Should the plan include pass/fail thresholds or just goals?

Thresholds. Vague goals such as 'the system should be fast' lead to arguments after the test. Write numeric thresholds per endpoint for p95, p99 and error rate, agreed before the run, so the result is a fact rather than an opinion.

Run this as a real load testFree plan: 10 VUs, 50 RPS, live p95/p99 and error charts, no credit card. Starter $19/mo (250 VUs) or Pro $49/mo (2,000 VUs) with a 7-day free trial when you need more.
Start freeCompare plans