Markdown Editor

Performance Test Plan and Report Template

Performance plan and report: SLAs, workload mix, Little's law sizing, load, stress, soak and spike tests, percentiles, bottlenecks

Pengujian & KualitasLengkapperformancetestplanmath

Cara menggunakan: Use it before a launch, peak season or migration to prove latency and throughput targets. Agree numeric SLAs and build the workload model from production data first. The main pitfall is reporting averages instead of percentiles, which hides the slow requests users notice.

Pratinjau

Performance Test Plan and Report: [System or release name]

Combined performance test plan and results report. Part A plans the testing (objectives, workload model, test types, environment, criteria, scenarios); Part B records results, bottlenecks and recommendations. Based on common industry practice for load and performance engineering. Replace every [bracketed] value and every row marked Example.

Document control

FieldValue
Document ID[PTP-SYSTEM-001]
System / release[System name] [version]
Version[0.1]
Status[Draft / In review / Approved / Results final]
Owner[@performance-engineer]
Classification[Internal / Confidential]
Last updatedYYYY-MM-DD
Related documents[Test plan], [SLO document], [Architecture description], [Capacity plan]

Approvals

RoleNameDecisionDate
Performance engineer[@name][Approved]YYYY-MM-DD
Engineering lead[@name][Approved / Rejected / Approved with comments]YYYY-MM-DD
SRE / operations lead[@name][Decision]YYYY-MM-DD
Product owner[@name][Decision]YYYY-MM-DD

Revision history

VersionDateAuthorChange summary
0.1YYYY-MM-DD[@name]Plan draft
1.0YYYY-MM-DD[@name]Example: Plan approved
1.1YYYY-MM-DD[@name]Example: Results of load and stress runs added to Part B

Contents

Part A: Plan

Part B: Report

1. Introduction

1.1 Purpose

This document plans and reports performance testing for [system name] [version] ahead of [launch / seasonal peak / migration], to show that the system meets its latency, throughput and resource targets at forecast peak load plus headroom, and to find the limits before users do.

1.2 Scope

In scopeOut of scope
Example: Public web storefront and Orders APIBack-office reporting (batch, separate test)
Example: Checkout, search, product pagesThird-party payment provider capacity (contractual SLA)
Example: Database and cache tierCDN edge performance (vendor-managed)

1.3 System under test

[One paragraph or diagram reference describing the architecture: entry points, services, data stores, caches, queues and external dependencies, with the instance sizes used in production.]

2. Objectives and service level targets

IDTransaction or resourceMetricTargetAt load
SLA-01Example: Product pageServer response time p95<= 300 msPeak (100%)
SLA-02Example: SearchResponse time p95 / p99<= 500 ms / <= 1,200 msPeak
SLA-03Example: Checkout submitResponse time p95<= 1,500 msPeak
SLA-04Example: All transactionsError rate< 0.5%Peak
SLA-05Example: SystemSustained throughput>= 250 requests/s120% of peak
SLA-06Example: Orders API podsCPU utilisation< 70% averagePeak
SLA-07Example: DatabaseConnection pool usage< 80%Peak
[SLA-nn][Transaction][Metric][Target][Load]

Objectives beyond pass or fail:

  • Find the breaking point (load at which an SLA is first violated) and the failure mode.
  • Confirm the system recovers within [5 minutes] after overload ends.
  • Detect memory or connection leaks over a [8-hour] soak.

3. Workload model

3.1 Source data

Peak hour analysed: [YYYY-MM-DD HH:00, from APM and web analytics]. Forecast growth to the test date: [+35%]. Headroom applied: [20%].

3.2 Transaction mix

TransactionShare of requestsPeak rate (req/s)Think time (s)Notes
Example: Home page18%365Cached at CDN for anonymous users; test bypasses CDN
Example: Search25%508Query terms from top 2,000 production searches
Example: Product page32%641050,000 SKUs, Zipf distribution
Example: Add to cart12%246
Example: Checkout (3 steps)5%1015Payment stub with 400 ms delay
Example: Login8%164
Total100%200

3.3 Concurrency estimate

The number of concurrent users needed to produce the target throughput follows from Little's law:

N=X⋅RN = X \cdot R

where NN is the average number of users in the system, XX is throughput (requests per second) and RR is the average time each user spends per request cycle, including think time.

Example: With X=200X = 200 req/s and an average cycle of response time 0.3 s plus think time 7.7 s, R=8R = 8 s, so N=200×8=1,600N = 200 \times 8 = 1{,}600 virtual users at peak. At 120% of peak, the test needs 1,9201{,}920 users.

3.4 User journeys

JourneyStepsShare of virtual users
BrowserHome, search, 3 product pages55%
BuyerLogin, search, product page, add to cart, checkout15%
Returning customerLogin, order history, product page20%
API partnerStock query batch via API10%

4. Test types

Test typePurposeLoad profileDurationPass criteria
BaselineReference figures at low load10% of peak15 minRecorded, no criteria
LoadVerify SLAs at expected peakRamp to 100% over 10 min, hold60 minSLA-01 to SLA-07 met
StressFind breaking point and failure modeIncrease 20% every 10 min until SLA breach or errors over 5%Until breakBreaking point documented; graceful degradation
Soak (endurance)Detect leaks and degradation over time80% of peak, constant8 hNo upward trend in memory, latency or errors
SpikeCheck behaviour under sudden surge30% to 250% of peak in 30 s, hold 5 min, back to 30%30 minNo crash; recovery within 5 min
ScalabilityCheck autoscalingStep load with autoscaling enabled45 minNew capacity serves traffic within 3 min

Tests run in the order shown; stress, soak and spike start only after the load test passes or its failures are understood.

5. Test environment and data

ComponentProductionTest environmentDifference and effect
Example: Orders API6 pods, 2 vCPU / 4 GB6 pods, 2 vCPU / 4 GBNone
Example: Database8 vCPU primary + 2 replicas8 vCPU primary + 1 replicaRead capacity lower; read-heavy results conservative
Example: Cache3-node cluster3-node clusterNone
Example: Payment providerLiveStub with fixed 400 ms latencyReal latency variance not modelled
[Component][Production][Test][Difference]

Data: database populated with [2 million orders, 500,000 customers, 50,000 SKUs] of synthetic data matching production distributions. No personal data. Caches warmed for [10 minutes] before measured runs.

Load generators: [4 instances in the same region, 8 vCPU each]; generator CPU kept under 70% so the generator is never the bottleneck.

6. Tools and monitoring

PurposeToolNotes
Load generation[k6 / JMeter / Gatling / Locust]Scripts in perf/ in the repository
Application metrics and traces[APM tool]Per-endpoint latency, traces for slow requests
Infrastructure metrics[Prometheus and Grafana / cloud monitoring]CPU, memory, network, disk per node
Database[Query statistics, slow query log]Top queries by total time
Logs[Log platform]Error rates and exceptions

Metrics captured for every run: response time percentiles (p50, p90, p95, p99, max) per transaction; throughput; error rate by type; CPU, memory, garbage collection; connection pools; queue depths; database locks and slow queries.

7. Entry and exit criteria

Entry criteriaExit criteria
Functionally stable build deployed (smoke test passes)All planned test types executed
Environment matches section 5; differences approvedSLAs met in load test, or deviations accepted by product owner
Test data loaded and verifiedBreaking point and failure mode documented
Monitoring dashboards in place for all componentsNo leak trend in soak test
Scripts reviewed and validated at low loadReport reviewed and approved

8. Test scenarios

Run IDTest typeJourneys and mixUsers / rateDurationBuildStatus
PT-01BaselineAll, mix 3.2160 users15 min[build][Planned]
PT-02LoadAll, mix 3.21,600 users60 min[build][Planned]
PT-03Load (120%)All, mix 3.21,920 users60 min[build][Planned]
PT-04StressAll, mix 3.2+320 users per 10 minUntil break[build][Planned]
PT-05SoakAll, mix 3.21,280 users8 h[build][Planned]
PT-06SpikeAll, mix 3.2480 to 4,000 users30 min[build][Planned]

9. Risks, assumptions and schedule

IDRisk or assumptionMitigation
R-01Example: Shared environment used by other teams during runsBook exclusive windows; check for foreign traffic in dashboards
R-02Example: Payment stub hides provider latency spikesAdd variable delay profile in a second checkout run
R-03Example: Production traffic mix shifts after marketing campaignRe-validate mix one week before launch

Schedule: scripts ready YYYY-MM-DD; PT-01 to PT-03 YYYY-MM-DD; PT-04 to PT-06 YYYY-MM-DD; report YYYY-MM-DD; retest window YYYY-MM-DD.

10. Results summary

SLATargetResult (run)Verdict
SLA-01 Product page p95<= 300 msExample: 212 ms (PT-02)Pass
SLA-02 Search p95 / p99<= 500 / 1,200 msExample: 640 / 1,850 ms (PT-02)Fail
SLA-03 Checkout p95<= 1,500 msExample: 1,180 ms (PT-02)Pass
SLA-04 Error rate< 0.5%Example: 0.12% (PT-02)Pass
SLA-05 Throughput at 120%>= 250 req/sExample: 241 req/s (PT-03)Fail
[SLA][Target][Result][Pass / Fail]

Overall verdict: [Pass / Pass with conditions / Fail]. Example: Fail on search latency and throughput at 120%; see 12.1. Breaking point at about 2,250 users, where search errors exceeded 5%.

11. Detailed results

11.1 Run PT-02 (load, 100% of peak)

TransactionSamplesp50 (ms)p90 (ms)p95 (ms)p99 (ms)Max (ms)Errors
Example: Home page129,600851401682901,0200.02%
Example: Search180,0003105206401,8504,9000.31%
Example: Product page230,4001201802124101,6000.05%
Example: Checkout submit36,0006901,0201,1801,7003,3000.20%
[Transaction][n][ms][ms][ms][ms][ms][%]
ResourceAveragePeakTarget
Example: Orders API CPU54%71%< 70% average
Example: Search service CPU83%97%< 70% average
Example: DB connections61%78%< 80%

Raw results: [link to result files and dashboards snapshot].

11.2 Other runs

RunKey observationEvidence
PT-04 StressExample: Search degrades first; at 2,250 users p95 reaches 3 s and errors 5.4%; other transactions within SLA[Link]
PT-05 SoakExample: Heap stable; latency flat; DB connections stable[Link]
PT-06 SpikeExample: Autoscaling added 4 pods in 2 min 40 s; 1.8% errors during first 60 s; full recovery in 3 min[Link]

12. Bottleneck analysis

IDSymptomEvidenceRoot causeConfidence
BN-01Example: Search p95 640 ms, p99 1,850 ms at peakSearch CPU 97% peak; traces show 70% of time in relevance scoringSearch service under-provisioned; scoring function not cachedConfirmed
BN-02Example: Throughput plateaus at 241 req/sSearch thread pool saturated; queue wait 400 msThread pool size 50, fixedConfirmed
[BN-nn][Symptom][Evidence][Cause][Confirmed / Hypothesis]

12.1 Capacity projection

With utilisation U=X⋅SU = X \cdot S (throughput times service demand), the search service at S=16S = 16 ms CPU per request on 1 vCPU saturates near X=1/0.016≈62X = 1 / 0.016 \approx 62 req/s, and at the peak search rate of 50 req/s it runs at U=50×0.016=0.8U = 50 \times 0.016 = 0.8, which matches the 83% observed. Meeting 120% of peak search load with CPU under 70% needs roughly ⌈60×0.016/0.7⌉=2\lceil 60 \times 0.016 / 0.7 \rceil = 2 vCPU for search alone, so [describe the sizing change].

13. Recommendations

IDRecommendationAddressesExpected effectOwnerRetest run
REC-01Example: Cache relevance scores for top 2,000 queries for 5 minutesBN-01Search p95 below 400 ms[@search-lead]PT-02R
REC-02Example: Raise search thread pool to 120 and add 2 podsBN-02Throughput above 280 req/s[@sre]PT-03R
REC-03Example: Add search p99 alert at 1,000 ms in productionMonitoring gapEarlier detection[@sre]Not applicable
[REC-nn][Recommendation][BN][Effect][@name][Run]

Release recommendation: [Release / Release after REC-01 and REC-02 are verified by retest / Do not release].

Standard and licence note

Based on common industry practice for performance test planning and reporting, including workload modelling and queueing relationships such as Little's law and the utilisation law. This template is original text written for this collection. Template licence: MIT.

Templat terkait