Skip to content

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.

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.

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.

  1. In the MaxoPerf console go to Tests → New test.
  2. Give the test a name and upload the YAML as the entrypoint.
  3. Bind the API_TOKEN secret under Settings → Secrets.
  1. Open the Configuration tab and select one or more locations.
  2. Click Run now.
  3. Open the run. During ramp-up, RPS climbs toward 200.

MaxoPerf lets you change the target RPS (throughput) while a run is active, with no restart.

  1. With the run open, locate the Live controls panel (top-right of the Overview tab).
  2. Click the Throughput control.
  3. Enter the new RPS value. For example, step it up to 300 to explore headroom or down to 100 to back off.
  4. Confirm. The change takes effect within a few seconds and shows in the RPS time-series chart.
  • 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.
  • Multiple scenarios with independent RPS: split into several execution entries, each with its own throughput and scenario.
  • RPS per location: MaxoPerf distributes the total throughput across locations proportionally to the weight setting in the Configuration tab.
  • VU (closed model) alongside RPS: run a second execution block without throughput to 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.