Introduction to Rounds
A Round represents a testing phase or cycle in the LPS Tool. Each round defines a set of configurations, including the base URL, the number of clients, and the iterations that simulate specific user interactions or requests. Rounds always run sequentially, respecting any configured startup delays between each round.
Key Attributes of a Round
- Name: Identifier for the round.
- Startup Delay: Time to wait before the round starts.
- Number of Clients: Specifies the number of simulated users for the test.
- Arrival Delay: Time in milliseconds to wait before each new client arrives.
- Run In Parallel: Specifies whether iterations within the round can execute in parallel.
- Tags: Allow grouping, organizing, and selectively executing specific rounds based on their assigned labels.
- Stages: An optional list of stages that let you vary concurrency within a single round (see Stages below).
Example
name: Example
rounds:
- name: ExampleRound
startupDelay: 5
numberOfClients: 10
arrivalDelay: 500
runInParallel: true
tags:
- test
- performance
Stages
Stages let you define multiple concurrency levels within a single round. Each stage specifies its own numberOfClients and arrivalDelay, and stages are spawned sequentially in the order they are listed.
When stages are defined, they override the round-level numberOfClients and arrivalDelay — those fields are ignored and each stage's values are used instead.
Why Use Stages?
Without stages, changing the number of concurrent users requires creating separate rounds. Stages simplify this by letting you ramp load up, step it down, or spike it — all inside one round.
Common patterns:
- Ramp-up: Gradually increase load across stages.
- Spike test: Jump from low to very high concurrency, then back down.
- Natural ramp-down: Unlike tools such as k6, LPS does not require an explicit stage targeting 0 clients. When a client finishes its iteration, it is gone — staggered arrivals naturally produce a ramp-down.
Stage Attributes
- numberOfClients (required): Number of simulated users for this stage. Must be greater than 0.
- arrivalDelay (required): Time in milliseconds between each client's start within this stage. Must be greater than 0 when
numberOfClientsis greater than 1. - startupDelay (optional, default: 0): Time in milliseconds to wait before this stage begins spawning clients (relative to the end of the previous stage). Must be greater than or equal to 0.
How Stages Execute
- Stages are processed in order. Each stage's clients are pre-scheduled upfront before any begin executing.
- The first client of a stage starts after all clients from the previous stage have been spawned (not completed), plus the current stage's
startupDelay. A stage does not wait for the previous stage's clients to finish their iterations. - Within a stage, clients are spawned one after another, separated by the stage's
arrivalDelay. - Spawning is sequential, but execution overlaps. A client begins executing its iterations as soon as it is spawned. While later stages are still spawning clients, earlier clients are already running their iterations concurrently.
Example: Ramp-Up
name: RampUpPlan
rounds:
- name: RampUpRound
startupDelay: 5
stages:
- numberOfClients: 10
arrivalDelay: 5000
- numberOfClients: 50
arrivalDelay: 1000
startupDelay: 5000
iterations:
- name: GetRequest
mode: D
duration: 120
httpRequest:
url: https://www.example.com
httpMethod: GET
What happens:
- Stage 1 — 10 clients, each arriving 5000 ms apart (spawn window: 45000 ms).
- Stage 2 — Waits 5000 ms after stage 1 finishes spawning, then 50 clients arrive 1000 ms apart.
All 60 clients share the same iterations and run concurrently once spawned.
Example: Spike Test
name: SpikeTestPlan
rounds:
- name: SpikeTestRound
stages:
- numberOfClients: 5
arrivalDelay: 1000
- numberOfClients: 100
arrivalDelay: 100
- numberOfClients: 5
arrivalDelay: 1000
iterations:
- name: HealthCheck
mode: D
duration: 60
httpRequest:
url: https://api.example.com/health
httpMethod: GET
What happens: A small baseline of 5 clients, followed by a sudden burst of 100 clients, then back to 5 — useful for testing how a system handles and recovers from traffic spikes.
Stages vs. Multiple Rounds
| Concern | Stages | Multiple Rounds |
|---|---|---|
| Shared iterations | Yes — all stages share the round's iterations | Each round defines its own iterations |
| Execution overlap | Yes — clients from all stages run concurrently | No — rounds run sequentially |
| Configuration scope | Single round | Separate rounds with independent settings |
| Use case | Varying concurrency for the same workload | Different workloads or endpoints |
Validation Rules
numberOfClientsmust be greater than 0.arrivalDelaymust be greater than 0 whennumberOfClientsis greater than 1.startupDelaymust be greater than or equal to 0.- Stages support placeholders (e.g.,
${myVar}) that are resolved at runtime.