Like unit testing, for performance.

k6 is a modern load-testing tool, built on our years of experience in the performance and testing industries. It’s built to be powerful, extensible, and full-featured. The key design goal is to provide the best developer experience.

Its core features are:

  • Configurable load generation. Even lower-end machines can simulate lots of traffic.
  • Tests as code. Reuse scripts, modularize logic, version control, and integrate tests with your CI.
  • A full-featured API. The scripting API is packed with features that help you simulate real application traffic.
  • An embedded JavaScript engine. The performance of Go lang, the scripting familiarity of JavaScript.
  • Multiple Protocol support. HTTP, Web sockets, gRPC, and more.
  • Large extension ecosystem. You can extend k6 to support your needs. And many people have already shared their extensions with the community!
  • Flexible metrics storage and visualization. Summary statistics or granular metrics, exported to the service of your choice.
import http from "k6/http";
import { check, sleep } from "k6";
 
// Test configuration
export const options = {
  thresholds: {
    // Assert that 99% of requests finish within 3000ms.
    http_req_duration: ["p(99) < 3000"],
  },
  // Ramp the number of virtual users up and down
  stages: [
    { duration: "30s", target: 15 },
    { duration: "1m", target: 15 },
    { duration: "20s", target: 0 },
  ],
};
 
// Simulated user behavior
export default function () {
  let res = http.get("https://test-api.k6.io/public/crocodiles/1/");
  // Validate response status
  check(res, { "status was 200": (r) => r.status == 200 });
  sleep(1);
}