PerfLoad No script HTTP load testing

PerfLoad / curl load test

Turn Any curl Command Into a Load Test

You already have the request: it's in your shell history, a bug report, or a browser's “Copy as cURL”. PerfLoad turns that curl command into a repeatable load test. Pick the number of virtual users and a duration, run it, and read p95, p99, requests per second, and error rate — without writing a test script first.

Start a Load Test →

PerfLoad runs in Docker on your machine or a server you control. The Workbench opens at http://localhost:3000/load-tester.html.

How it works

  1. curl command
  2. PerfLoad
  3. Configure users + duration
  4. Run load test
  5. p95 / p99 / RPS / errors
  1. Paste the command. Drop your curl into the Workbench. The method, URL, headers, and body come along with it.
  2. Check it with one request. Run Single sends a single request through the runner and shows the full response, so a bad token or a wrong URL fails here instead of under load.
  3. Set the load. Choose virtual users and a duration (or a fixed number of iterations), plus ramp-up and the pause between requests.
  4. Run the test. Run Test hands the request to k6 on the runner. You get live results and a latency chart while it runs.
  5. Read it, save it, run it again. Results include p95 and p99 latency, requests per second, and success/failure counts. The run stays in your history, so you can load its settings back and rerun it later.

An example, start to finish

Say you've just added an endpoint that creates orders. Here is the request as curl:

curl -X POST 'https://api.example.com/orders' \
  -H 'Authorization: Bearer YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"productId": "${productId}", "qty": 1}'

Paste it into the Workbench and PerfLoad picks up the POST, the URL, both headers, and the JSON body. ${productId} is a PerfLoad variable rather than shell syntax: define productId as a Sequential variable with the values 101, 102, 103, and each request uses the next value in turn instead of hammering one product.

For a first run against a real system, keep it small — a handful of users for 30 seconds — then raise the numbers once the endpoint holds up. Every run is saved, so the small run and the bigger one sit next to each other in your history for comparison.

What PerfLoad adds on top of your curl command

When a curl load test is the right tool

This workflow fits when the thing you want to test is a single HTTP request shape: checking an endpoint before a release, reproducing a “this is slow” report with the reporter's own curl, or getting a rough feel for how an API behaves as concurrency rises. It is not the right tool for scripted, multi-step user journeys with custom logic — for that, writing k6 scripts directly is a better fit.

Why not just loop curl in the shell?

You can get surprisingly far with xargs. This sends 200 requests, 20 at a time, and prints the total time for each:

seq 1 200 | xargs -P 20 -n 1 sh -c \
  'curl -s -o /dev/null -w "%{time_total}\n" https://api.example.com/health'

That works for a smoke check. What it leaves to you is everything after: holding a steady load for a fixed duration, ramping up, varying the payload, computing percentiles instead of eyeballing a column of times, counting failures, and keeping the results so you can compare next week's run against today's. That is the gap PerfLoad fills, using k6 under the hood to generate the load.

Try it locally

One container, one port, one volume for run history:

docker run -d --name perfload -p 3000:3000 -v perfload-runs:/app/runs perfload/perfload-runner:latest

Then open http://localhost:3000/load-tester.html and paste your command. The installation guide covers updates and Kubernetes.

FAQ

Does the load come from my browser?

No. The Workbench is only the interface. Both Run Single and Run Test are executed by the PerfLoad runner (Docker and k6), so results aren't limited by how much your browser can do, and the runner can sit close to the service you're testing.

Can I use dynamic data so requests aren't identical?

Yes. Use ${variableName} in the URL, headers, or body, and define the variable as constant, sequential, or random. With Run Test, variables resolve per virtual user and per iteration.

How many virtual users should I start with?

Start with 1–5 against anything real, confirm the response looks right with Run Single, and scale up from there.

Do I have to know k6?

No. PerfLoad generates and runs the k6 test for you from the request and the settings you choose.

Related guides

Turn your next curl command into a load test

Paste it, set users and duration, and see how the endpoint behaves.

Start a Load Test →