Evaluating CodeRabbit? Same review, plus real test runs. See why

API Testing11 min readUpdated October 23, 2026

Performance Testing Tools: 10 Load and Stress Testing Tools

A
Technical PM, Qodex
Latency bars for a load test of five hundred virtual users: the median is fast, the ninety ninth percentile breaks the budget

Performance testing tools send generated traffic at an application and measure how fast and how reliably it answers. The open-source core is Apache JMeter, Grafana k6, Gatling, Locust and Artillery. Tricentis NeoLoad, OpenText LoadRunner, BlazeMeter, Azure App Testing and Postman add managed scale, recorders or enterprise protocols. Pick by how your team writes tests: a GUI, JavaScript, Java, Python or YAML.

A load test tells you how fast an API answers, so check first that the answers are right. Qodex is an AI QA agent that writes and runs functional and security tests for APIs and web apps from a chat.

Performance testing tools compared

Every fact and price below was read on the vendor's own pages on 23 October 2026, and each section links its source. A dash means the vendor publishes no price.

ToolTests written inLicencePaid plans (read 23 Oct 2026)Best fit
Apache JMeterGUI test plans, GroovyApache 2.0None, freeMany protocols, GUI-first teams
Grafana k6JavaScript, TypeScriptAGPL-3.0Cloud Pro $19/month plus usageDevelopers who gate CI on results
GatlingJava, Kotlin, Scala, JS, TSApache 2.0 coreBasic €99/monthJVM teams, very high user counts
LocustPythonMITNot verifiedPython teams
ArtilleryYAML, JavaScript, TypeScriptMPL-2.0Team $199/monthNode.js teams, browser load with Playwright
Tricentis NeoLoadCodeless designer, YAMLTrial on request-SAP and packaged enterprise apps
OpenText LoadRunnerScripts, TruClient recorderCommercial-180+ protocols, large QA teams
BlazeMeterYour JMeter and open-source scriptsCommercialBasic $149/monthRunning JMeter at cloud scale
Azure App TestingYour JMeter and Locust scriptsCommercialPer virtual user hourTeams already on Azure
PostmanPostman collectionsCommercialCloud runs $0.04 per VU hourTeams whose API tests live in Postman

The 10 performance testing tools

1. Apache JMeter

Apache JMeter homepage: Apache JMeter project page with its list of supported protocols
Apache JMeter homepage, captured 23 October 2026

JMeter is the Apache Software Foundation's load testing application, written in pure Java. Its homepage lists HTTP and HTTPS, SOAP and REST, FTP, JDBC databases, LDAP, JMS, mail protocols, TCP and shell commands. You build a test plan in a desktop IDE, record it from a browser, or script samplers in Groovy. For real runs you use the command-line mode, and one JMeter client can control any number of remote engines.

  • Version: 5.6.3, which requires Java 8 or later; the changes page recommends Java 17.
  • Watch out: remote engines do not split the load. In the docs' own words, "each runs the full test plan."
  • Price: free under the Apache 2.0 licence.

JMeter versus a commercial suite is its own decision; our NeoLoad vs JMeter comparison covers it.

2. Grafana k6

Grafana k6 homepage: The best developer experience for load testing
Grafana k6 homepage, captured 23 October 2026

k6 is an open-source load tester from Grafana Labs, written in Go and scripted in JavaScript or TypeScript. Its README lists HTTP, WebSockets, gRPC and browser testing. Thresholds are part of the script, and a failed threshold ends the run with exit code 99, so any CI job that runs k6 fails on a missed budget. The stress test later on this page is a k6 script.

  • Version: v2.3.0, released 21 September 2026 (GitHub releases). Licence AGPL-3.0.
  • Price: the k6 binary is free. Grafana Cloud runs it as a service, and its Free tier is "Limited to 500 virtual user hours per month". Pro is a $19 monthly platform fee with 500 virtual user hours, then from $0.15 per virtual user hour. Enterprise has a $25,000 yearly minimum.
  • Best for: developers who want load tests in the same repo and review flow as their code.

3. Gatling

Gatling homepage: Continuous Performance Intelligence, powered by AI
Gatling homepage, captured 23 October 2026

Gatling is an open-source load testing tool with SDKs for Java, Kotlin and Scala, plus a JavaScript and TypeScript SDK (docs). The community core ships HTTP/1.1, HTTP/2, WebSocket, Server-Sent Events and JMS under Apache 2.0. Its gRPC, MQTT and GraphQL components use a separate licence and, in the free edition, are "capped at 5 concurrent users and 5 minute tests" (README).

  • Version: v3.16.0, released 29 September 2026. The Java SDK needs OpenJDK 11 to 25.
  • Price (pricing): Community Edition is free. Basic is €99 a month (up to 60,000 virtual users, 1 hour of testing, 1 load generator). Team is €396 a month (180,000 virtual users, 5 hours, 3 load generators). Enterprise is on request.
  • Best for: JVM teams who want load tests as code.

4. Locust

Locust homepage: An open source load testing tool
Locust homepage, captured 23 October 2026

Locust lets you define user behaviour in plain Python classes; its homepage shows the web UI with live request statistics. Its README says it "makes it easy to run load tests distributed over multiple machines." HTTP and HTTPS are built in; the docs show how to wrap gRPC, MQTT, SocketIO and other clients, as long as the library can be monkey-patched by gevent.

  • Version: 2.47.0, released 21 October 2026. Licence MIT.
  • Price: free. The homepage links a hosted Locust.cloud; we found no published price for it.
  • Best for: Python teams who want test logic in code they already know.

5. Artillery

Artillery homepage: When performance and reliability are not optional
Artillery homepage, captured 23 October 2026

Artillery describes itself as "a platform for Playwright E2E testing, scalable load testing, and synthetic monitoring with Playwright" (docs). Scripts are YAML, JavaScript or TypeScript. It tests HTTP, WebSocket, Socket.io and gRPC, and it can drive real headless browsers for browser-level load. Distributed runs go out from your own AWS or Azure account, or from Artillery's cloud runners.

  • Version: 2.0.34, released 14 August 2026. Licence MPL-2.0, except some Azure-specific modules under a BSL licence whose commercial or production use "requires a commercial license" (README).
  • Price (pricing): Free is $0 (30 reports a month, up to 5 workers and 30 minutes per test). Team is $199 a month (25 workers, 2 hours per test). Business is $499 a month with no worker or duration limit.
  • Best for: Node.js teams, and teams who want browser and API load in one tool.

6. Tricentis NeoLoad

Tricentis NeoLoad product page: Performance at any scale, confidence at AI speed
Tricentis NeoLoad product page, captured 23 October 2026

NeoLoad is Tricentis's enterprise performance testing platform. Its page says codeless design, "YAML as-code authoring", and CLI runs coexist in one product. Protocol coverage is its pitch: SAP GUI, Fiori, RFC and S/4HANA, plus Oracle, Citrix, Salesforce, Workday and mainframe, alongside a real-browser mode. Load is generated from a global cloud.

  • Price: no public price; the product page offers a trial and a demo.
  • Best for: large companies testing packaged enterprise applications, SAP above all.
  • Compare: NeoLoad vs JMeter sets the two side by side.

7. OpenText LoadRunner

OpenText LoadRunner product page: OpenText Professional Performance Engineering (LoadRunner Professional)
OpenText LoadRunner product page, captured 23 October 2026

OpenText now sells LoadRunner Professional as OpenText Professional Performance Engineering, next to Enterprise and Core editions. The product page claims "180+ protocols and technologies supported" across web, mobile, packaged and legacy applications. It offers TruClient recording and auto-correlation for scripting, and on-premises or cloud deployment.

  • Price: no public price; the page offers a free trial and a contact form.
  • Best for: enterprise QA teams with legacy protocols and an existing LoadRunner script library.

8. BlazeMeter

BlazeMeter homepage: Performance Testing That Runs Itself
BlazeMeter homepage, captured 23 October 2026

BlazeMeter, from Perforce, runs your existing JMeter scripts in the cloud, and its homepage says it supports "over 20 open-source frameworks like JMeter, Selenium, and Playwright." Load can come from its cloud, from private locations, or from an on-premises load generator.

  • Price (pricing): the Free Starter plan allows 50 concurrent users, 10 tests a month and 20-minute tests. Basic is $149 billed monthly for 1,000 concurrent users and 1-hour tests. Pro is $649 billed monthly for 5,000 concurrent users and 5-hour tests. Unleashed is priced on request.
  • Best for: teams who already write JMeter and want hosted scale and reports.

9. Azure App Testing

Azure App Testing product page: run high-scale tests with a fully managed Azure service
Azure App Testing product page, captured 23 October 2026

Microsoft renamed Azure Load Testing: its product page now reads "Azure Load Testing is now Azure App Testing." It is a managed Azure service that runs "existing Apache JMeter, Locust, or Playwright scripts at scale", where Playwright is for functional tests. You can also build a simple HTTP load test in the Azure portal and send traffic from several regions at once.

  • Limits: one load test runs up to 24 hours, and anything over 3 hours needs a support ticket to raise the quota.
  • Price: billed per virtual user hour on the pricing page; the page we read showed no figures.
  • Best for: teams on Azure who already have JMeter or Locust scripts.

10. Postman

Postman homepage: for your agents, with the Postman CLI install command
Postman homepage, captured 23 October 2026

Postman's performance testing turns a collection into a load test: "The collection you use to develop and functionally test your API is also your load test." Your pm.test() assertions run under load as well. Local runs work on every plan; cloud runs are on paid plans, need at least 10 virtual users, and spread the load across Postman's machines.

  • Price (pricing): every plan includes "Unlimited local performance testing". Cloud runs cost $0.04 per virtual user hour. Paid plans start at Solo, $9 a month billed annually.
  • Best for: API teams whose requests and tests already live in Postman collections.

Run a stress test with k6

Stress testing can be automated like any other test: a script raises the load in steps, a threshold defines "broken", and the tool stops and fails the run when it gets there. Here is a complete example you can run on your own machine. It needs Node.js and k6; we ran it with Node.js 26 and k6 v2.3.0.

First, a small API to test. It waits 20 to 40 milliseconds of simulated work per request and, to stand in for a real capacity limit, returns 503 once 50 requests are in flight.

// server.js: a small API to load test on your own machine
const http = require('node:http');

const CAPACITY = 50; // simulated limit: past 50 requests in flight, answer 503
let inFlight = 0;
const orders = new Map();

function send(res, status, body) {
  res.writeHead(status, { 'content-type': 'application/json' });
  res.end(JSON.stringify(body));
}

http.createServer((req, res) => {
  if (inFlight >= CAPACITY) return send(res, 503, { error: 'overloaded' });
  inFlight++;
  res.on('close', () => inFlight--);
  let raw = '';
  req.on('data', (chunk) => (raw += chunk));
  req.on('end', () => {
    // 20 to 40 ms of simulated work per request
    setTimeout(() => {
      if (req.method === 'GET' && req.url === '/products') {
        return send(res, 200, [{ id: 1, name: 'Keyboard', price: 49 }]);
      }
      if (req.method === 'POST' && req.url === '/orders') {
        let order;
        try { order = JSON.parse(raw); } catch { return send(res, 400, { error: 'invalid JSON' }); }
        if (!Number.isInteger(order.productId) || !Number.isInteger(order.qty) || order.qty < 1) {
          return send(res, 422, { error: 'productId and qty must be positive integers' });
        }
        const id = String(orders.size + 1);
        orders.set(id, { id, ...order });
        return send(res, 201, orders.get(id));
      }
      const match = req.url.match(/^\/orders\/(\d+)$/);
      if (req.method === 'GET' && match && orders.has(match[1])) {
        return send(res, 200, orders.get(match[1]));
      }
      send(res, 404, { error: 'not found' });
    }, 20 + Math.random() * 20);
  });
}).listen(3333, '127.0.0.1', () => console.log('API listening on http://127.0.0.1:3333'));

Then the stress test. It climbs to 300 virtual users in three steps and aborts as soon as more than 1% of requests fail.

// stress-test.js: keep adding users until the API breaks, then stop
import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
  stages: [
    { duration: '20s', target: 50 },
    { duration: '20s', target: 150 },
    { duration: '20s', target: 300 },
    { duration: '10s', target: 0 },
  ],
  thresholds: {
    // stop the run as soon as more than 1% of requests fail
    http_req_failed: [{ threshold: 'rate<0.01', abortOnFail: true, delayAbortEval: '5s' }],
    http_req_duration: ['p(95)<200'],
  },
};

export default function () {
  const res = http.get('http://127.0.0.1:3333/products');
  check(res, { 'status is 200': (r) => r.status === 200 });
  sleep(0.1);
}

Start the server in one terminal with node server.js, then run k6 run stress-test.js in another. The end of our run, from the log:

  █ THRESHOLDS

    http_req_duration
    ✓ 'p(95)<200' p(95)=38.78ms

    http_req_failed
    ✗ 'rate<0.01' rate=2.05%

    http_req_failed................: 2.05%  692 out of 33746
    http_reqs......................: 33746  674.995127/s
    vus............................: 224    min=3            max=224

running (0m50.0s), 000/300 VUs, 33566 complete and 224 interrupted iterations
time="2026-10-23T19:18:25-07:00" level=error msg="thresholds on metrics 'http_req_failed' were crossed; at least one has abortOnFail enabled, stopping test prematurely"

How to read it:

  • The failure point. k6 stopped the run at 50 seconds with 224 virtual users active, once failures passed 1% of all requests so far. Under this ramp, that is where the API broke; a slower ramp would place it more precisely.
  • Errors, not slowness. The 95th percentile stayed at 38.78 ms. This server sheds load with fast 503s, so it breaks by refusing work. Other systems break by slowing down, which is why the script watches both thresholds.
  • A CI-ready verdict. The process exited with code 99, k6's code for failed thresholds, so a pipeline step running this script turns red without extra parsing.

Run the same pattern against a staging copy of your system, never production, and raise the step targets until the threshold trips.

What a virtual user hour costs

Cloud plans bill in virtual user hours (VUH): one simulated user running for one hour. A test with 200 virtual users for 30 minutes uses 100 VUH. Say you run a 1,000-user test for one hour, which is 1,000 VUH. With the prices read on 23 October 2026:

ServiceWhat 1,000 VUH costsSource
Grafana Cloud k6 Pro$19 fee covers the first 500 VUH; the other 500 at $0.15 add $75grafana.com/pricing
Postman cloud runs1,000 at $0.04 is $40, on a paid planpostman.com/pricing
BlazeMeter Basic$149 a month, and the test fits its limits of 1,000 users and 1 hour per testblazemeter.com/pricing
JMeter, Locust, k6 or Gatling on your own machinesNo licence fee; you pay for the load generatorsLicence files on GitHub

Volume discounts and annual billing change these numbers, so treat the table as an example of how the units work, then price your own test shape on each page.

How to choose a performance testing tool

If your situation isStart with
Developers write the tests and CI must fail on a slow buildk6 or Gatling
The team works in PythonLocust
You need JDBC, LDAP, JMS or a GUI to build plansJMeter, hosted on BlazeMeter if you need scale
You test SAP, Citrix or mainframe applicationsNeoLoad or LoadRunner
Your API tests already live in PostmanPostman performance testing
You want browser-level load with PlaywrightArtillery
Your infrastructure is on AzureAzure App Testing with your JMeter or Locust scripts

Two checks before you commit. Write the same small scenario in your top two tools and compare the effort. Then confirm the tool reports the 95th or 99th percentile response time, not only the average, because averages hide the slow tail.

If you are new to the vocabulary, our guide to what load testing is explains load, stress, spike, soak and volume tests. For APIs in particular, see API load testing tools and how to load test an API. To measure page speed inside browser tests, read Playwright performance testing.

Conclusion

Start with the five open-source tools: JMeter for protocol breadth and a GUI, k6 and Gatling for tests as code, Locust for Python, Artillery for Node.js and browser load. The commercial platforms earn their price on scale, recorders and enterprise protocols. Whatever you pick, put thresholds in the script so every run ends in a pass or a fail.

Frequently Asked Questions

What are performance testing tools?

They are programs that simulate many users or requests against an application and record response times, throughput and errors. JMeter, k6, Gatling, Locust and Artillery are open source. NeoLoad, LoadRunner, BlazeMeter, Azure App Testing and Postman's performance testing are commercial or hosted services.

Is JMeter a performance testing tool?

Yes. The JMeter homepage says it "may be used to test performance both on static and dynamic resources, Web dynamic applications." It is free under Apache 2.0 and supports HTTP, JDBC, LDAP, JMS, FTP and other protocols.

Which performance testing tools are free?

Apache JMeter, Grafana k6, Gatling Community Edition, Locust, Artillery and Vegeta are free and open source. Free hosted tiers exist too: Grafana Cloud gives 500 virtual user hours a month, BlazeMeter's Free Starter allows 50 users, and Postman includes unlimited local performance runs (all read 23 October 2026).

Can stress testing be automated?

Yes. Write the load steps and the failure condition into the script, as the k6 example above does with abortOnFail. The tool then stops at the breaking point and exits with a non-zero code, which any CI system treats as a failed job.

What is the difference between load testing and stress testing tools?

They are the same tools used with different load shapes. A load test holds the traffic you expect and checks it meets your targets. A stress test keeps raising traffic past that point to find where the system breaks and how it recovers.

Ship continuously. Test continuously.

Qodex explores your app, writes runnable tests, and replays them on every change at zero LLM cost.