No results for

Powered byAlgolia

JavaScript Compatibility Mode

k6 soporta la ejecución de scripts de prueba con diferentes modos de compatibilidad de ECMAScript utilizando la opción CLI run --compatibility-mode o la variable de entorno K6_COMPATIBILITY_MODE.

Actualmente hay dos modos disponibles:

Base

CLI Parameter
Environment Variable
$ k6 run --compatibility-mode=base script.js

VM JavaScript puro de Golang que soporta ES5.1+. Utilice este modo si sus scripts ya están escritos utilizando sólo las características de ES5.1, o fueron previamente transformados por Babel, para reducir el tiempo de inicio, el uso de RAM y mejorar el rendimiento. Consulte el proyecto k6-es6 para ver un ejemplo de configuración de Webpack que realiza esta transformación fuera de k6.

Ejemplo básico

base-example.js
1const http = require('k6/http');
2const k6 = require('k6');
3
4module.exports.options = {
5 vus: 10,
6 duration: '30s',
7};
8
9module.exports.default = function () {
10 http.get('http://test.k6.io');
11 k6.sleep(1);
12};

⚠️ Sobre require()

Tenga en cuenta que require() es una implementación personalizada de k6 para la carga de módulos, que no se comporta de la misma manera que la llamada require() en Node.js. Específicamente, sólo maneja la carga de módulos incorporados en k6, scripts en el sistema de archivos local, y scripts remotos a través de HTTP(S), pero no soporta el algoritmo de resolución de módulos de Node.js.

Ejemplo avanzado

advanced-example.js
1const http = require('k6/http');
2const metrics = require('k6/metrics');
3const k6 = require('k6');
4
5module.exports.options = {
6 stages: [
7 { duration: '30s', target: 20 },
8 { duration: '1m30s', target: 10 },
9 { duration: '20s', target: 0 },
10 ],
11 thresholds: {
12 'failed requests': ['rate<0.1'],
13 },
14};
15
16const myFailRate = new metrics.Rate('failed requests');
17
18module.exports.default = function () {
19 const res = http.get('https://httpbin.test.k6.io/');
20 const checkRes = k6.check(res, {
21 'status was 200': function (r) {
22 return r.status == 200;
23 },
24 });
25 if (!checkRes) {
26 myFailRate.add(1);
27 }
28 k6.sleep(1);
29};

Extended

CLI Parameter
Environment Variable
$ k6 run --compatibility-mode=extended script.js

Transforma los scripts a ES5.1 utilizando Babel con el preajuste ES2015. Este es el modo por defecto, proporcionando una mayor compatibilidad con JavaScript, a expensas del tiempo de inicio, el uso de RAM y el rendimiento.

Comparación de rendimiento

Hay una diferencia sustancial en el rendimiento entre ambos modos, como se muestra en el tiempo de GNU a continuación, especialmente cuando se ejecutan pruebas con un gran número de VUs:

Base Mode
Extended Mode
$ /usr/bin/time -v k6 run \
--compatibility-mode=base \
--vus 3500 \
--duration=60s \
script.js
[...]
User time (seconds): 15.10
System time (seconds): 10.02
Percent of CPU this job got: 40%
Elapsed (wall clock) time (h:mm:ss or m:ss): 1:01.88
Average shared text size (kbytes): 0
Average unshared data size (kbytes): 0
Average stack size (kbytes): 0
Average total size (kbytes): 0
Maximum resident set size (kbytes): 903612
Average resident set size (kbytes): 0
Major (requiring I/O) page faults: 1
Minor (reclaiming a frame) page faults: 352090
Voluntary context switches: 558479
Involuntary context switches: 4689
Swaps: 0
File system inputs: 0
File system outputs: 78856
Socket messages sent: 0
Socket messages received: 0
Signals delivered: 0
Page size (bytes): 4096
Exit status: 0