Skip to main content
The execution context API provides information about the current test execution state.

Import

import exec from 'k6/execution';

Properties

exec.instance

Provides information about the local k6 instance.
currentTestRunDuration
number
Current test run duration in milliseconds
iterationsCompleted
number
Number of completed iterations
iterationsInterrupted
number
Number of interrupted iterations
vusActive
number
Number of currently active VUs
vusInitialized
number
Number of initialized VUs
import exec from 'k6/execution';

export default function () {
  console.log(`Test duration: ${exec.instance.currentTestRunDuration}ms`);
  console.log(`Active VUs: ${exec.instance.vusActive}`);
}

exec.scenario

Provides information about the current scenario.
name
string
Scenario name
executor
string
Executor type (e.g., “ramping-vus”, “constant-vus”)
startTime
number
Scenario start time (Unix timestamp in milliseconds)
progress
number
Scenario progress (0 to 1)
iterationInInstance
number
Current VU’s iteration number in this instance
iterationInTest
number
Current VU’s iteration number across all instances
import exec from 'k6/execution';

export default function () {
  console.log(`Scenario: ${exec.scenario.name}`);
  console.log(`Progress: ${exec.scenario.progress * 100}%`);
  console.log(`Iteration: ${exec.scenario.iterationInInstance}`);
}

exec.vu

Provides information about the current VU.
idInInstance
number
VU ID within the local instance (1-based)
idInTest
number
VU ID globally across all instances (1-based)
iterationInInstance
number
Current iteration number for this VU in the instance
iterationInScenario
number
Current iteration number for this VU in the scenario
tags
object
Dynamic object for getting/setting VU tags
metrics
object
Object containing tags and metadata
import exec from 'k6/execution';

export default function () {
  console.log(`VU ID: ${exec.vu.idInInstance}`);
  console.log(`Iteration: ${exec.vu.iterationInInstance}`);
  
  // Set custom tags
  exec.vu.tags['custom_tag'] = 'value';
}

exec.test

Provides test-level information and control.
options
object
Consolidated test options (read-only)
abort([message])
function
Aborts the test execution immediately
fail([message])
function
Marks the test as failed but continues execution
import exec from 'k6/execution';
import http from 'k6/http';

export default function () {
  const res = http.get('https://test.k6.io');
  
  // Abort test if critical error
  if (res.status === 500) {
    exec.test.abort('Server returned 500');
  }
  
  // Mark test as failed but continue
  if (res.timings.duration > 5000) {
    exec.test.fail('Response too slow');
  }
  
  // Access test options
  console.log(`Test duration: ${exec.test.options.duration}`);
}

Examples

VU-specific Behavior

import exec from 'k6/execution';
import http from 'k6/http';

export default function () {
  const vuId = exec.vu.idInInstance;
  
  // Use different endpoints based on VU ID
  const endpoint = vuId % 2 === 0 ? '/api/v1' : '/api/v2';
  http.get(`https://test.k6.io${endpoint}`);
}

Progress Monitoring

import exec from 'k6/execution';

export default function () {
  const progress = exec.scenario.progress;
  
  // Log progress every 10%
  if (progress > 0 && progress % 0.1 < 0.01) {
    console.log(`Test is ${Math.floor(progress * 100)}% complete`);
  }
}

Conditional Abort

import exec from 'k6/execution';
import http from 'k6/http';

let errorCount = 0;

export default function () {
  const res = http.get('https://test.k6.io');
  
  if (res.status !== 200) {
    errorCount++;
  }
  
  // Abort if too many errors
  if (errorCount > 100) {
    exec.test.abort('Too many errors detected');
  }
}

Dynamic Tagging

import exec from 'k6/execution';
import http from 'k6/http';

export default function () {
  // Add scenario-specific tags
  exec.vu.tags['scenario'] = exec.scenario.name;
  exec.vu.tags['vu_id'] = exec.vu.idInInstance.toString();
  
  http.get('https://test.k6.io');
}

Iteration-based Logic

import exec from 'k6/execution';
import http from 'k6/http';

export default function () {
  const iteration = exec.scenario.iterationInInstance;
  
  // Warmup for first 10 iterations
  if (iteration < 10) {
    console.log('Warmup iteration');
    return;
  }
  
  // Normal test execution
  http.get('https://test.k6.io');
}
Execution context properties cannot be accessed in the init context. They are only available in the VU context (default function).

Build docs developers (and LLMs) love