Blog | Gatling

10 Performance testing metrics to watch before you ship | Gatling Blog

Written by Diego Salinas | Jun 24, 2025 12:39:32 PM

10 Performance testing metrics to watch before you ship

Last week, a friend at a major e-commerce company texted me at 2 AM: "Our checkout is down. Black Friday traffic. Everything tested fine last week. What did we miss?"

What they missed wasn't a bug. It was performance testing.

We've all been there—everything looks great in staging, your test suite is green, deployment frequency is through the roof. Then real traffic hits and your perfectly tested system starts melting. Or worse, you get that slow performance degradation that creeps up over months until suddenly your app is "just slow" and nobody knows why.

Here's the uncomfortable truth: 63% of customer-impacting outages come from performance issues, not bugs. Your perfectly tested, beautifully deployed code might be a ticking time bomb waiting for real users to light the fuse. That's where performance testing metrics come in.

The performance testing paradox of modern DevOps

We've gotten really good at shipping fast. DORA metrics tell us exactly how quickly we can push code and how often things break.

But they're silent on the most critical question: How will this perform when 10,000 users hit it simultaneously?

Think of it this way: DORA metrics are like your car's speedometer: they tell you how fast you're going. On the other hand, performance metrics from load testing are your engine temperature gauge: they warn you before things explode. Without proper testing metrics, you're driving blind.

10 performance testing metrics that actually matter

Forget generic dashboards. Here are the testing metrics that reveal what's really happening under load:

1. Error rate

This is basically your "how badly did we screw up" metric in any performance test. The error rate tracks the percentage of requests that fail—5xx errors, timeouts, the works. It's a fundamental test metric that every testing tool should capture.

Here's the thing: a sudden spike in error rate after deployment is like your app screaming "HELP!" during load testing. Could be bugs, could be a feature flag gone rogue, could be that API you depend on having a bad day.

The smart move? Slice this data by endpoint and version in your test environment. That way, when things go sideways, you can pinpoint exactly which commit to blame.

Pro tip: Set up separate error rate alerts for different endpoints. Your payment API having a 0.1% error rate is way more critical than your user avatar endpoint hitting 1%. Not all errors are created equal.

2. TCP connect-timeout rate

Ever had your app logs show everything's fine while stress testing reveals users can't connect? Yeah, that's because your server logs are lying to you. TCP timeout rate catches what your servers can't see—connections that never even make it to your app during performance tests.

When this testing metric climbs while your servers are practically napping at 20% CPU utilization, you know your network infrastructure is the bottleneck.

Maybe your load balancer is overwhelmed during load tests, maybe there's packet loss, maybe your firewall is being overzealous. But you'll only know if you're watching from the client side with proper performance testing tools.

Pro tip: Correlate TCP timeouts with your cloud provider's network metrics. AWS Network ELB metrics or GCP load balancer logs often reveal connection limits you didn't know existed. Set your timeout thresholds based on your P95 connection times, not arbitrary numbers.

3. TLS handshake-timeout rate

Remember when you decided to encrypt everything? (Good call, by the way.) Well, there's a cost that shows up in performance testing. Every HTTPS connection needs a cryptographic handshake, and when you're handling thousands of connections per second during load testing, those milliseconds add up fast.

Watch this metric spike during stress testing and volume testing—it's usually your CPUs crying uncle from all that math. And with HTTP/2 throwing in renegotiations for fun, this can become your surprise performance bottleneck right when you need system performance most.

Pro tip: Enable TLS session resumption and OCSP stapling in your load tests to match production behavior. Many teams test without these optimizations and get nasty surprises when real traffic hits. Also, test with different cipher suites—that ECDSA certificate might be secure, but it's also 3x more CPU intensive than RSA.

4. Average response time

I'm going to be controversial here: average response time is mostly useless for anything urgent in performance tests. It's like checking your average speed after a road trip—sure, it's interesting, but it won't tell you about that time you were stuck in traffic for an hour.

Where it shines in software testing? Trend analysis. Plot it over weeks of performance testing and you'll spot that slow creep that nobody notices day-to-day. But for the love of all that's holy, don't set alerts on it. Your 99% fast requests will hide that 1% of test cases having a terrible time.

Pro tip: Use average response time for week-over-week comparisons, not real-time monitoring. Calculate the percentage change between releases. If your average creeps up 5% every sprint, you'll have doubled your response time in 14 releases. That's how performance death happens: slowly, then suddenly.

5. Response-time standard deviation

This test metric is your chaos detector. Low standard deviation in your performance test means your app is predictable—boring, but in a good way. High standard deviation? Your users are playing performance roulette.

The sneaky scenario in load testing is when your average looks fine but standard deviation is through the roof.

That's when you know something's causing random slowdowns—maybe garbage collection, maybe that database query that sometimes does a full table scan, maybe resource contention with that noisy neighbor on your shared infrastructure. This is where best practices in performance monitoring really pay off.

Pro tip: Graph standard deviation alongside garbage collection frequency. If they spike together, you've found your culprit. For JVM apps, tune your heap size so minor GCs happen frequently (low impact) rather than major GCs happening rarely (high impact). Your standard deviation will thank you.

6. Peak response time percentiles (P95/P99)

Percentiles are where the truth lives in any performance test. Your P95 shows what your frustrated users experience during spike testing. Your P99? That's your "about to rage-tweet" crowd captured in test results.

Here's a reality check from performance testing: if your average response time is 100ms but your P99 is 2 seconds, you're not running one system, you're running two. One that works great for most people, and one that's completely broken for a meaningful minority. This is a classic performance issue that load testing metrics reveal.

Pro tip: Don't just track P95/P99. Track P99.9 for critical user paths like checkout or login. That 0.1% might seem tiny, but if you process 1M requests/day, that's 1,000 angry users. Also, use HDR histograms for percentile calculations; naive implementations can be off by 100x at high percentiles.

7. Complete business-process duration

This metric is like zooming out from individual test cases to see the entire user journey. Sure, each API call might be blazing fast at 50ms during scalability testing. But your checkout process calls 20 different services, hits 3 databases, and checks with 2 external payment providers.

Users don't care that each step passes its test case. They care that checkout takes 8 seconds.

Script your entire critical user journeys in your testing environment and measure them end-to-end. You might be surprised how all those "fast" services add up to poor app performance.

Pro tip: Include think time in your business process tests. Real users don't click instantly, they read, think, and fill forms. A checkout process that handles 1000 concurrent users with 0ms think time might crumble with realistic 3-5 second pauses between steps. This changes your connection pool dynamics completely.

8. CPU utilization

CPU usage seems straightforward until it isn't in performance testing. Yes, sustained 80%+ CPU utilization usually means you need to scale or optimize. But here's what trips people up in test automation: making sure you're measuring the right thing.

I've seen teams panic about high CPU during load tests only to realize their testing tools were the ones maxing out, not their app. Also, in containerized testing environments, are you measuring against your container limits or the host machine? Big difference. Get this wrong and you'll be optimizing the wrong performance bottleneck.

Pro tip: Always load test with CPU limits that match production. If you're running Kubernetes, test with the same CPU requests/limits. A service that runs great with 4 full cores might hit throttling constantly when limited to "2000m" CPU in K8s. Also track CPU steal time in cloud environments because your "idle" CPU might actually be waiting for the hypervisor.

9. Heap memory usage

Memory leaks in your test environment are cute. In production, after running for 72 hours straight during a sales event? Not so cute. This testing metric is your early warning system for the dreaded OutOfMemoryError that stress testing should catch.

But it's not just about leaks in software testing metrics. Watch for correlation with garbage collection pauses.

When heap usage gets high, GC gets aggressive, and suddenly your peak response time looks terrible. It's all connected, which is why you need to track it together as part of testing best practices.

Pro tip: Run extended duration tests (12+ hours) at 50% of peak load. Memory leaks often hide during short, intense load tests but reveal themselves under sustained moderate load. Also, capture heap dumps at the start and end of your test—even a 100MB growth over 12 hours means you'll OOM in a week of production runtime.

10. TCP connection details and network latency

This is your network's vital signs during performance tests—connection pool health, socket states, resets, the works. When your active connection count flat-lines at exactly 100 (or 200, or whatever your pool size is), congratulations: you've found your real bottleneck in load testing.

Bonus for error tracking: weird patterns here can tip you off to security issues. Seeing connection resets from the same IP ranges during testing? Might be a DDoS attempt. Connections dropping after exactly 30 seconds? Probably a misconfigured firewall or proxy timeout affecting network latency.

Pro tip: Test with realistic geographic distribution. A connection pool sized for 50ms latency from us-east-1 to us-east-1 will behave very differently with 200ms latency from Asia. Use tools like Gatling Enterprise that can distribute load generation across regions. Also, monitor TIME_WAIT socket states—default TCP settings can exhaust ephemeral ports under high connection churn.

The real cost of flying blind on performance testing

Before we dive into the key performance testing metrics, let's talk about what's at stake when you skip proper software testing:

Remember that "minor" recommendation engine update that passed all functional testing? In production, it generated 10x more database queries and created a massive performance bottleneck during peak hours. Oops.

The business impact: Connecting performance metrics to revenue

Let's get real about why these metrics matter to your business:

Response Time → Conversion Rate

Error Rate → Customer Lifetime Value

  • A 1% error rate during checkout = 1% direct revenue loss
  • But the real cost? Users who hit errors have 68% lower lifetime value
  • Payment API errors are 10x more costly than browse errors

System Availability → Brand Trust

Revenue Impact Calculator

Revenue Impact Calculator

Revenue = (Users × Conversion% × AOV) × Performance Factor
Revenue Impact
$23,750.00

Quick reference: key performance indicators for testing

Testing Metric 🟢 All Good 🟡 Warning 🔴 Hair on fire
Error rate < 0.1% 0.1-1% > 1% or sudden spike
TCP timeouts < 0.01% 0.01-0.1% > 0.1%
P99 response time < 3x average 3-10x average > 10x average
CPU utilization < 60% 60-80% > 80% sustained
Heap memory < 60% 60-85% > 85% or climbing
Blocked test cases percentage < 5% 5-10% > 10%

From testing metrics to action: performance testing best practices

  1. Start with the basics: If you're measuring nothing, begin with error rate and P95 response time in your load tests
  2. Add visibility incrementally: Layer in performance metrics as you identify blind spots through testing
  3. Automate the analysis: Set up dashboards that compare these test metrics across deployments
  4. Make it part of CI/CD: Performance requirements should fail builds just like broken test cases
  5. Create realistic test scenarios: Include spike testing, stress testing, and volume testing in your test automation strategy

Process metrics that drive testing success

Beyond individual performance tests, track these process metrics:

  • Test coverage: What percentage of critical user journeys have performance test cases?
  • Performance regression detection rate: How often do your tests catch issues before production?
  • Mean time to identify bottlenecks: How quickly can you pinpoint performance issues?
  • Test environment parity: How closely does your testing environment match production?

The competitive edge of smart performance testing

Companies that nail performance testing ship faster with confidence. When TUI implemented comprehensive load testing metrics, they cut response times by 50% AND accelerated their release cycle. TRAY went from 3-day manual performance validation to automated testing in hours.

The difference? They treat performance testing metrics as first-class citizens alongside functional testing results.

Assessing your performance testing maturity model

Level 1: Reactive - You test after problems occur

  • Track: Error rate, average response time
  • Business impact: Fire-fighting mode, customer complaints drive priorities

Level 2: Proactive - You test before major releases

  • Add: P95/P99, CPU/memory usage
  • Business impact: Fewer surprises, but still some production issues

Level 3: Continuous - Performance tests run with every deployment

  • Add: Business process duration, standard deviation
  • Business impact: Catch regressions early, stable user experience

Level 4: Predictive - You correlate performance with business KPIs

  • Add: Custom business metrics, capacity forecasting
  • Business impact: Performance drives product decisions, optimize for revenue

Level 5: Adaptive - Real-time performance optimization

  • Add: Chaos engineering, automatic scaling triggers
  • Business impact: Self-healing systems, maximum revenue capture

Most teams are stuck at Level 2. These 10 metrics help you reach Level 4 and beyond.

Ready to transform your performance testing?

You now know the 10 critical metrics that separate high-performing teams from those constantly fighting fires. You understand how each metric connects to real business impact.

The question is: how quickly can you implement them?

Here's the kicker: Building a comprehensive performance testing practice from scratch takes months. You need to:

  • Set up distributed load generators across multiple regions
  • Configure accurate percentile calculations with HDR histograms
  • Build dashboards that correlate technical metrics with business KPIs
  • Create realistic user scenarios with proper think times
  • Establish baseline performance across different load patterns

Or... you could start delivering value next week.

Gatling Enterprise was built by performance engineers who've lived these challenges. It's not just another testing tool—it's a complete platform that implements these 10 metrics (and more) out of the box:

Automatic HDR histogram implementation for accurate percentiles
Business process tracking with customizable user journeys
Real-time correlation between technical metrics and business impact
Geographic load distribution to test realistic user patterns
CI/CD integration that fails builds on performance regressions
Executive dashboards that translate metrics into revenue impact

Companies like TUI and Jiostar didn't achieve their performance transformations by building everything from scratch. They leveraged Gatling Enterprise to jump straight to Level 4 maturity.

Our performance engineers will show you exactly how to implement these metrics for your specific use case. No generic sales pitch—just engineers talking to engineers about solving real performance challenges.

Stop fighting fires. Start preventing them.