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.
Current test run duration in milliseconds
Number of completed iterations
Number of interrupted iterations
Number of currently active VUs
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.
Executor type (e.g., “ramping-vus”, “constant-vus”)
Scenario start time (Unix timestamp in milliseconds)
Scenario progress (0 to 1)
Current VU’s iteration number in this instance
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.
VU ID within the local instance (1-based)
VU ID globally across all instances (1-based)
Current iteration number for this VU in the instance
Current iteration number for this VU in the scenario
Dynamic object for getting/setting VU tags
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.
Consolidated test options (read-only)
Aborts the test execution immediately
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).