RPS-controlled throughput test
Problem: You want to send a precise number of requests per second (RPS) to your service instead of “n virtual users”. Your SLO is stated in RPS, and you want to control throughput separately from response time. You also want to turn RPS up or down live without stopping the run.
Test type: Load test with the open workload model.
Prerequisites
Section titled “Prerequisites”- A MaxoPerf account, workspace, and a test file.
- Familiarity with the open vs closed workload distinction. See Open vs closed workload models.
Open vs closed: why it matters for RPS
Section titled “Open vs closed: why it matters for RPS”A closed workload (the default in most tools) drives a fixed number of VUs. When the server slows down, each VU waits longer, so throughput drops. The server appears healthy even while it is under stress.
An open workload drives a fixed arrival rate (RPS). When the server slows down, queue depth grows, latency climbs, and errors appear. That is what happens to real users. Use the open model when your SLO is stated in RPS or when you are measuring at a service boundary.
Step by step in MaxoPerf
Section titled “Step by step in MaxoPerf”1. Write the Taurus scenario with throughput
Section titled “1. Write the Taurus scenario with throughput”execution: - scenario: rps-test throughput: 200 # target RPS concurrency: 500 # ceiling: max in-flight VUs ramp-up: 3m hold-for: 10m
scenarios: rps-test: requests: - label: GET /api/products url: https://api.example.com/api/products method: GET headers: Authorization: Bearer ${API_TOKEN}The throughput key turns on the open workload model in Taurus. concurrency is a safety
ceiling. If the server gets so slow that 500 requests are in flight at once, Taurus does
not spawn more.
2. Create the test and upload the file
Section titled “2. Create the test and upload the file”- In the MaxoPerf console go to Tests → New test.
- Give the test a name and upload the YAML as the entrypoint.
- Bind the
API_TOKENsecret under Settings → Secrets.
3. Configure locations and start the run
Section titled “3. Configure locations and start the run”- Open the Configuration tab and select one or more locations.
- Click Run now.
- Open the run. During ramp-up, RPS climbs toward 200.
4. Adjust RPS live
Section titled “4. Adjust RPS live”MaxoPerf lets you change the target RPS (throughput) while a run is active, with no restart.
- With the run open, locate the Live controls panel (top-right of the Overview tab).
- Click the Throughput control.
- Enter the new RPS value. For example, step it up to 300 to explore headroom or down to 100 to back off.
- Confirm. The change takes effect within a few seconds and shows in the RPS time-series chart.
Verify
Section titled “Verify”- The throughput (RPS) chart in the run overview shows a ramp-up to the target value followed by a flat plateau.
- The p95 latency chart stays below your SLO for the duration of the plateau.
- If you raised RPS live, the RPS chart steps up at the time you made the change.
- Error rate stays near zero at the nominal load. Errors appear, as expected, when you push beyond capacity.
Variations
Section titled “Variations”- Multiple scenarios with independent RPS: split into several
executionentries, each with its ownthroughputandscenario. - RPS per location: MaxoPerf distributes the total
throughputacross locations proportionally to theweightsetting in the Configuration tab. - VU (closed model) alongside RPS: run a second execution block without
throughputto model a mix of long-session users (closed) and stateless API callers (open). - Live VU control: you can also adjust the VU ceiling live in the same controls panel. See Staged ramp profile.
Where to go next
Section titled “Where to go next”- Staged ramp profile: multi-stage load shapes for soak, stress, and stepwise ramps.
- Failure criteria pass/fail gates: fail the run automatically when RPS or latency crosses a threshold.
- Open vs closed workload models: the full theory.
- Load test: what this test type measures.