No results for

Powered byAlgolia

Running k6

Follow along to learn how to:

  1. Run a test.
  2. Add virtual users.
  3. Increase the test duration.
  4. Ramp the number of requests up and down as the test runs.

With these example snippets, you'll run the test with your machine's resources. But, if you have a k6 Cloud account, you can also use the k6 cloud command to outsource the test to k6 servers.

Run local tests

To run a simple local script:

  1. Create and initialize a new script by running the following command:

    CLI
    Docker
    Docker in Win PowerShell
    $ k6 new

    This command creates a new script file named script.js in the current directory. You can also specify a different file name as an argument to the k6 new command, for example k6 new my-test.js.

  2. Run k6 with the following command:

    CLI
    Docker
    Docker in Win PowerShell
    $ k6 run script.js

Add VUs

Now run a load test with more than one virtual user and a longer duration:

CLI
Docker
Docker in Win PowerShell
$ k6 run --vus 10 --duration 30s script.js

Running a 30-second, 10-VU load test

Virtual users

k6 runs multiple iterations in parallel with virtual users (VUs). In general terms, more virtual users means more simulated traffic.

VUs are essentially parallel while(true) loops. Scripts are written in JavaScript, as ES6 modules, so you can break larger tests into smaller pieces or make reusable pieces as you like.

The init context and the default function

For a test to run, you need to have init code, which prepares the test, and VU code, which makes requests.

Code in the init context defines functions and configures the test options (like duration).

Every test also has a default function, which defines the VU logic.

// init
export default function () {
// vu code: do things here...
}

Init code runs first and is called only once per VU. The default code runs as many times or as long as is configured in the test options.

To learn more about how k6 executes, read about the Test lifecycle.

Set options

Instead of typing --vus 10 and --duration 30s each time you run the script, you can set the options in your JavaScript file:

script.js
1import http from 'k6/http';
2import { sleep } from 'k6';
3export const options = {
4 vus: 10,
5 duration: '30s',
6};
7export default function () {
8 http.get('http://test.k6.io');
9 sleep(1);
10}

If you run the script without flags, k6 uses the options defined in the script:

CLI
Docker
Docker in Win PowerShell
$ k6 run script.js

Ramp VUs up and down in stages

You can ramp the number of VUs up and down during the test. To configure ramping, use the options.stages property.

stages.js
1import http from 'k6/http';
2import { check, sleep } from 'k6';
3
4export const options = {
5 stages: [
6 { duration: '30s', target: 20 },
7 { duration: '1m30s', target: 10 },
8 { duration: '20s', target: 0 },
9 ],
10};
11
12export default function () {
13 const res = http.get('https://httpbin.test.k6.io/');
14 check(res, { 'status was 200': (r) => r.status == 200 });
15 sleep(1);
16}

For more granular ramp configuration, you can use scenarios and the ramping-vus executor.

Execution modes

note

Portability is a major design goal of k6.

You can run the same test in different modes with minimal changes.

k6 supports three execution modes to run a k6 test: local, distributed, and cloud.