Choosing the correct workload model is one of the most consequential decisions in load test design. Get it wrong, and your simulation will measure something fundamentally different from what your real system experiences under production traffic — giving you false confidence or misleading bottleneck analysis. Gatling explicitly separates open and closed workload models at the API level, making the choice explicit rather than accidental.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/gatling/gatling.io-doc/llms.txt
Use this file to discover all available pages before exploring further.
Open vs Closed Workload Models
Real-world systems fall into one of two behavioral categories when under load:Closed Systems
The number of concurrent users is capped. A new user can only enter the system once another exits. Throughput is bounded by user count × service rate.
Open Systems
Users arrive at a given rate regardless of how many are already being served. The system has no mechanism to queue or block arriving traffic.
Closed System Examples
A closed system enforces a maximum concurrency ceiling. New arrivals must wait or are rejected when the system is at capacity:- A call center where all operators are busy — callers queue until an agent is free.
- A ticketing website with a virtual waiting room — users are held until capacity is available.
Open System Examples
An open system accepts traffic continuously. Response times may degrade, but users keep arriving:- Most public websites — browsers send requests regardless of current server load.
- REST APIs called by external services — clients retry or fire-and-forget without awareness of server capacity.
Choosing the Right Model
Ask this question: does my system push back excess traffic, or does it accept all arrivals?| System characteristic | Model to use |
|---|---|
| Queueing or rate-limiting at the entry point | Closed (injectClosed) |
| Users arrive regardless of server state | Open (injectOpen) |
Open and closed workload models are mutually exclusive within a single injection profile. You cannot mix
injectOpen and injectClosed steps for the same scenario.