Quality Assurance Labs
QA Testing

Performance Testing — Load, Stress & Benchmarks

Senior QA Engineer8 min readPublished Updated

Performance bugs don't show up in functional tests. They show up when 10,000 users arrive at once. Here's how to test for load, stress, and durability before your users do.

Server under pressure with load-testing gauges
#performance-testing#load-testing#k6#JMeter#scalability

Functional testing asks: does it work? Performance testing asks: does it work under pressure? Both matter. Only one is usually skipped.

Performance bugs are the silent killers of good products. The app works beautifully in dev with 10 users. Then marketing drives 10,000 users, and the site crashes.

The three types of performance testing

Load testing — Simulates expected peak traffic. Confirms the system handles it without degradation.

Stress testing — Pushes beyond expected peak to find the breaking point.

Soak testing — Runs moderate traffic for hours/days to find leaks and slow failures.

Metrics that actually matter

Throughput — Requests per second

Response time (P50, P95, P99) — Not averages

Error rate — % of requests that fail under load

Concurrency — Simultaneous users handled

Resource usage — CPU, memory, DB connections at load

Recovery time — Return to baseline after traffic drops

Skip "average response time" — it hides the P99 experience.

Tooling

k6 — Modern, developer-friendly. Our recommendation for most teams.

JMeter — Mature, feature-rich. Steeper learning curve.

Lighthouse — Frontend performance (different category).

Locust — Python-based.

Gatling — Scala-based.

How to run performance tests

Define your target: expected peak traffic + response time SLO

Build realistic scenarios (full user journeys, not single endpoints)

Baseline at low traffic

Load test at expected peak

Stress test beyond peak

Soak test for durability

Monitor everything

What we typically find

Database queries that scale linearly

Missing indexes causing slow queries

Connection pool exhaustion

Memory leaks that surface after hours

Third-party APIs that throttle unexpectedly

N+1 query patterns in ORMs

None of these show up in functional testing.

When to run performance tests

Before major launches — Non-negotiable

After infrastructure changes

After scaling milestones

Continuously in production (synthetic monitoring)

Common mistakes

Testing single endpoints instead of full journeys

Skipping soak testing

Not testing from realistic locations

Ignoring third-party API limits

Testing in dev instead of production-like environments

Key takeaways

  • Load, stress, and soak testing are all required
  • Track P95 and P99, not averages
  • k6 is the best starting point for most teams
  • Test full user journeys, not single endpoints
  • Run before launches, after infra changes, and continuously

Further reading

About the author

Senior QA Engineer →

Senior QA Engineer · Quality Assurance Labs

Notes from the lab.

Testing, engineering and growth — delivered to your inbox.

Need a performance testing sprint? Book a call

Let's talk →