k6 installation is surprisingly easy, but the real magic is how it lets you define complex load scenarios with simple JavaScript.
Let’s see k6 in action. Imagine you want to simulate 100 users hitting your API’s /users endpoint every second for 30 seconds. Here’s how you’d write that script:
import http from 'k6/http';
import { sleep } from 'k6';
export const options = {
vus: 100, // Virtual Users
duration: '30s', // Duration of the test
};
export default function () {
http.get('http://your-api.com/users');
sleep(1); // Wait for 1 second between iterations
}
To run this, you’d first install k6 (more on that below). Then, save the code as script.js and execute:
k6 run script.js
Within seconds, k6 will spin up 100 virtual users, each making a request to /users every second for half a minute. You’ll see output like this in your terminal, showing request rates, latencies, and error rates:
/\ | cyclohexane |
/\ / \ / \
/ \ / \ / \
/ \ / \ / \
/______\/______\/______\
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
http_req_failed=0.00%
http_req_sending=0ms avg=0ms min=0ms max=0ms p(90)=0ms p(95)=0ms p(99)=0ms
http_req_waiting=50ms avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
http_req_connecting=0ms avg=0ms min=0ms max=0ms p(90)=0ms p(95)=0ms p(99)=0ms
http_req_tls_handshake=0ms avg=0ms min=0ms max=0ms p(90)=0ms p(95)=0ms p(99)=0ms
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
data_received=1.2MB 50.0KB/s
data_sent=780B 32.5B/s
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms) avg=50ms min=50ms max=50ms p(90)=50ms p(95)=50ms p(99)=50ms
checks=1.00% ✓
http_req_failed=0.00%
http_req_duration=(50ms,50ms,50ms)