Back to Automation BlogPerformance Testing

Your first realistic load model

How to turn production traffic into a workload model instead of guessing thread counts in JMeter.

6 min read30 April 2026Tech Vista Global

Threads are not users

Ramping 500 threads with no think time simulates nothing that exists. Start from production data: requests per hour per endpoint, peak-to-average ratio, and the distribution of journeys.

Build the model in four numbers

Concurrent users, journey mix, think time and test duration. Everything else in the tool is configuration around those four.

  • Concurrency = arrival rate × average journey duration
  • Journey mix taken from real analytics, not intuition
  • Think time of 3–8 seconds between page-level steps
  • Steady state of at least 30 minutes after ramp

Measure percentiles, watch saturation

Report p90, p95 and p99 alongside throughput and error rate. An average response time hides the tail that users complain about. Correlate with CPU, memory, connection pools and database wait events to find the actual bottleneck.

A k6 skeleton

Script the journey, not individual URLs, and keep thresholds in the script so the run fails itself.

export const options = {
  stages: [{ duration: '5m', target: 200 }, { duration: '30m', target: 200 }],
  thresholds: { http_req_duration: ['p(95)<800'], http_req_failed: ['rate<0.01'] },
};

Turn this into hands-on practice

Book a free demo class and work through these patterns with a mentor.