Load Testing & HTTP Load Tests

Load Testing & HTTP Load Tests for APIs (Performance Testing, Reports), a VS Code extension by Zovo

Load test an HTTP API from VS Code. Write a small YAML file, press Run, and watch requests per second and p50, p95 and p99 latency live. Free, no sign-in, no cloud and nothing else to install. The only network traffic is the load you send to the API you test.

Install in VS CodeOpen the Marketplace page

Free, MIT license. Needs VS Code 1.90.0 or newer. Extension ID zovo.zovo-load-testing, version 0.2.1.

A 30-second load test of a local Checkout API in VS Code. The test file is on the left. The dashboard on the right shows 711 requests per second, p95 30 ms, 0.35 % errors, the requests-per-second and latency charts, and three passed thresholds.

The dashboard takes its colors from your VS Code theme, light or dark:

The same run in the Default Light Modern theme: the test file, the dashboard tiles, the charts and the thresholds table.

Questions people ask

Is Load Testing & HTTP Load Tests free?

Yes. Load Testing & HTTP Load Tests is free and MIT licensed.

How do I install Load Testing & HTTP Load Tests?

Click "Install in VS Code" above, or search for zovo.zovo-load-testing in the Extensions view.

Try it in 30 seconds

Run "Load Testing: Try It on a Demo Server" from the Command Palette. The extension starts a small JSON API on your own computer (127.0.0.1) and runs a 23-second test against it, so you see the dashboard and the report before you point it at your own API.

Your first test

  1. Run "Load Testing: New Load Test" and enter the base URL of your API, for example http://localhost:3000.
  2. Edit the file. A complete test looks like this:
name: Orders API
target: http://localhost:3000
request:
  method: GET
  url: /api/orders?limit=20
  headers:
    accept: application/json
checks:
  status: 200
  maxLatency: 500ms
phases:
  - { name: ramp-up, duration: 10s, vus: [1, 20] }
  - { name: steady, duration: 30s, vus: 20 }
  - { name: ramp-down, duration: 5s, vus: [20, 0] }
thinkTime: [50ms, 150ms]
thresholds:
  - p95 < 300ms
  - errors < 1%
  1. Click "Run load test" above the first line, or the play button in the editor title bar.
  2. The first run against a host asks you to confirm it. The dialog names the host and the load.
The confirmation dialog: "Send load to localhost:62964? Checkout API: up to 30 virtual users for 30 s. Only test servers you own or may test." with Run and Remember Host, Cancel and Run.

Test file reference

KeyWhat it does
targetBase URL. Request URLs can then be paths.
requestOne request: method, url, headers, and body, json or form. query adds query parameters.
stepsSeveral requests in a row (one iteration). Each step can extract values from its JSON response for the next steps.
phasesA list of { duration, vus } or { duration, rate }. A number holds steady; [from, to] ramps in a straight line.
vus + durationShort form for one phase. rate + duration works the same way.
thinkTimePause after each iteration: 100ms, or [50ms, 200ms] for a random pause.
timeoutTime limit for one request (default 10 s).
checksstatus (200, [200, 201] or 2xx), maxLatency, bodyContains, bodyNotContains, jsonPath and header.
thresholdsRules on p50, p90, p95, p99, max, avg, errors, checks, rps and requests.
variablesValues for {{name}} placeholders. Built-ins: {{$uuid}}, {{$randomInt 1 100}}, {{$timestamp}}, {{$isoTimestamp}}, {{$vu}}, {{$iteration}}, {{$processEnv NAME}}.
dataA CSV file; each iteration takes the next row, and its columns become {{column}} values.
insecuretrue allows an invalid or self-signed TLS certificate. Off by default: such a request fails.
maxVusOpen model only: how many requests may wait at once.
maxBodyKBHow much of each response is kept for checks (default 1024 KB). The rest is read and counted, not stored.

A request fails on a network error, a timeout, or a status of 400 or more that your status check does not list. Latency is measured from sending the request to the last byte of the response. Time to first byte is in the report too.

Import requests you already have

Reports and compare

Each run is saved in load-test-results/ next to the test file: a JSON file with every number and a self-contained HTML report with charts. The report has no script and loads nothing from the network, so you can attach it to a ticket or a pull request. It follows the reader's light or dark setting.

"Load Testing: Compare Two Runs" shows the change in requests per second, p50 to p99, errors and checks, plus the latency curves of both runs. Use it before and after a change to the code or the database.

Run the same test in CI

The engine is plain Node with no dependency, so CI needs nothing beyond Node 18 or later:

# .github/workflows/load-test.yml (run it against a staging or local server you own)
- uses: actions/checkout@v4
- uses: actions/checkout@v4
  with: { repository: theluckystrike/load-testing-vscode, path: .load-testing }
- run: node .load-testing/scripts/ci-run.js tests/checkout.load.yaml --out load-test-results

The exit code is 0 when every threshold passes, 1 when one fails and 2 when the test file has a problem. The HTML report is written to --out.

Safety

Why this one

The two most installed load testing extensions on the Marketplace either run a separate program or need a cloud account. Their open and closed GitHub issues show the problems below. Each row links the issue and says what this extension does, with the number measured in the release gate (a real VS Code 1.142 with only this extension installed).

Problem reported by usersLinkWhat this extension does
"There's no option to stop the test once it has started."k6-vscode-extension #3 (6 reactions)A Stop button in the dashboard, the editor title bar and the status bar. In the release gate, Stop must close 100 hanging connections within 0.1 s.
A separate program must be installed: the k6 binary on the PATH, or Python and Locustdetect/index.ts ("make sure it is available in your PATH"), prerequisitesThe engine ships inside the extension. The engine is about 175 KB of JavaScript that runs in a worker thread. The gate installs the package into an empty VS Code profile, with no other extension and no setup step, and runs 20 files.
The extension stopped working after a change in the Copilot Chat extension it depends onazureloadtesting-extension #12, #11No dependency on another extension. The gate runs with VS Code's AI features turned off.
"loadtest.config.yaml gets overwritten"azureloadtesting-extension #13A run never writes to your test file. Results go to a separate folder. The gate checks the sha256 of the test files before and after the runs.
Results only as plain text in the Output panelk6-vscode-extension #13A live dashboard with charts, plus an HTML report for every run.
An Azure account is needed to run tests at scaleprerequisitesNo account of any kind. Load comes from your own computer.

Issue links and texts were read from GitHub on 2026-11-09. The k6 extension's repository is archived. For load across many machines, a cloud service is still the right tool; this extension is for quick, local, repeatable tests while you work.

How accurate is it

Measured on an Apple Silicon Mac (F = measured on 2026-11-09):

Limits: HTTP/1.1 only (no HTTP/2 or WebSocket), one machine, and no browser rendering. Redirects are not followed; a 3xx response is counted as it is.

Settings

SettingDefaultMeaning
loadTesting.maxVirtualUsers200Hard limit on users (and requests in flight in the open model)
loadTesting.maxRequestsPerSecond5000Hard limit on the rate
loadTesting.maxDurationMinutes60Longest test that may start
loadTesting.blockedHosts*.gov, *.milHosts that never receive load
loadTesting.saveResultstrueSave JSON and HTML for every run
loadTesting.resultsFolderload-test-resultsFolder next to the test file
loadTesting.maxImportMB200Largest file to import
loadTesting.maxDataFileMB100Largest CSV data file
loadTesting.askForRatingtrueOne rating question after 2 good runs in 2 sessions at least 4 hours apart; never after an error
loadTesting.showSupportLinkstrueThe small links under the dashboard

Free

Everything in this extension is free: single requests and multi-step scenarios, CSV data, the dashboard, thresholds, reports, compare, history and every import. There are no ads, no account and no time limit.

Privacy

No telemetry and no account. The extension sends requests only to the hosts in your test files, after you confirm them. The demo server listens on 127.0.0.1 and stops when VS Code closes. Nothing else leaves your computer.

License

MIT. Bundles yaml (ISC); see THIRD-PARTY-NOTICES.md.

Guides

Install Load Testing & HTTP Load Tests

Click the button to open VS Code and install it, or press Ctrl+P (Cmd+P on macOS) in VS Code and run ext install zovo.zovo-load-testing.

Free, MIT license. Needs VS Code 1.90.0 or newer. Extension ID zovo.zovo-load-testing, version 0.2.1.

Source code and issues are on GitHub.

All our VS Code extensions

Zovo Pro and support

Zovo Pro: USD 19 once, every Zovo viewer. It turns on the Pro tools in this extension and in the other Zovo extensions you use. The free features stay free.

After a card payment your license key shows on the next page. Paste it with the command "Zovo Pro: Enter a key".

You can also support the work with no Pro:

Need your format supported?

Open a format request with a sample file, and I reply there whether it can be done. For USD 299 once, through this GitHub Sponsors tier, I add your file format or a missing feature to this extension, with tests, within 7 days.