No results for

Powered byAlgolia

Ejecución de k6

Ejecutando los tests localmente

Primeramente vamos a comenzar corriendo el script de manera local. Copie el siguiente código, pégalo en tu editor favorito y luego guarda el script como: "script.js":

script.js
1import http from 'k6/http';
2import { sleep } from 'k6';
3
4export default function () {
5 http.get('http://test.k6.io');
6 sleep(1);
7}

Luego ejecute el archivo K6 usando el siguiente comando:

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

Agregando más usuarios virtuales (VUs)

Ahora vamos a ejecutar una prueba de carga con más de un usuario y una duración mayor:

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

Ejecutando una prueba de carga de 10 usuarios en 30 segundos

k6 funciona usando el concepto de usuarios virtuales (VUs), los cuales ejecutan los scripts en paralelo mientras que sea verdadero while(true). Los scripts son desarrollados usando JavaScript, como módulos ES6, lo cual permite separar pruebas grandes en pequeñas porciones de prueba, o reutilizar estas porciones de prueba.

Los scripts deben contener al menos una función predeterminada, que defina los puntos de entrada para los VUs, similar a la función main() de otros lenguajes:

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

El contexto de inicio y la función predeterminada

Nos podemos preguntar, ¿Por qué no ejecutar mi script normalmente, desde el inicio hasta el final? La respuesta es: Sí, se puede hacer, pero el código dentro y fuera de la función predeterminada puede hacer cosas diferentes. El código predeterminado de adentro es llamado “VU Code”, y se ejecuta una y otra vez mientras el test está ejecutándose. El código de afuera es comúnmente llamado “init Code” y se ejecuta una vez por VU.

// init code
export default function () {
// vu code
}

El “VU Code” puede hacer peticiones HTTP, proveer métricas, y generalmente hace todo lo que se espera en una prueba de carga, no puede cargar nada desde su sistema de archivos local ni importar ningún otro módulo. Todo esto debe hacerse desde el “init Code”. Lea más acerca de diferentes etapas del ciclo de vida de una prueba k6

Usando las opciones

Si quiere evitar escribir --vus 10 y --duration 30s todo el tiempo, también puede incluir estas configuraciones dentro de su archivo JavaScript.

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}

Luego solo ejecute el script con esos parámetros por línea de comando.

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

Escenarios: Periodo de subida/bajada de los VUs

Además puede tener el nivel de periodo de subida (ramp up) y de bajada (ramp down) de los VU durante la prueba. La propiedad options.stages te permite configurar el comportamiento de los periodos de subida y bajada.

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}

Esto también se puede lograr con una configuración más avanzada utilizando escenarios y el ejecutor ramping-vus.

Modos de ejecución

k6 soporta tres modelos de ejecución para ejecutar los tests: local, cluster, and cloud.

El objetivo de k6 es permitir cambiar el modo de ejecución con mínimos cambios. El objetivo es soportar ejecutar el test en los differentes modos de ejecución sin modificar el script de k6. Ésto te permitirá reutilizar los tests independientemente del entorno de tu equipo de trabajo.

  1. Local: la ejecución del test es local en una máquina, container or servidor de CI.

    k6 run script.js
  2. Distribuido: la ejecución del test es distribuida en un cluster de Kubernetes.

    Running
    k6-resource.yml
    1kubectl apply -f /path/k6-resource.yml
  3. Cloud: la ejecución del test es en k6 Cloud.

    k6 cloud script.js

    Adicionalmente, k6 Cloud puede ejecutar cloud tests en tu propia infraestructura cloud, y acepta los resultados de un test local o distribuido en k8s.