No results for

Powered byAlgolia

¿Qué es un check?

Checks son aserciones, pero difieren en que no detienen la ejecución, en su lugar, sólo almacenan el resultado de la comprobación, pase o no, y dejan que la ejecución del script continúe. Echa un vistazo a Thresholds para una forma de detener la ejecución. Checks son excelentes para codificar aserciones relacionadas con peticiones/respuestas HTTP, asegurándose de que el código de respuesta es 2xx, por ejemplo:

check.js
1import { check } from 'k6';
2import http from 'k6/http';
3
4export default function () {
5 let res = http.get('http://test.k6.io/');
6 check(res, {
7 'is status 200': (r) => r.status === 200,
8 });
9}

En el ejemplo anterior, se especificó una comprobación, pero puede añadir tantas como necesite en una llamada a check(). Cuando se ejecuta el script anterior se puede ver cómo k6 muestra los resultados de las llamadas de comprobación en la siguiente salida:

salida check

En la salida anterior puede ver que nuestra comprobación "is status 200" tuvo éxito el 100% de las veces que fue llamada.

También puede añadir múltiples comprobaciones dentro de una única sentencia check(), como esta:

checks.js
1import { check } from 'k6';
2import http from 'k6/http';
3
4export default function () {
5 let res = http.get('http://test.k6.io/');
6 check(res, {
7 'is status 200': (r) => r.status === 200,
8 'body size is 1176 bytes': (r) => r.body.length == 1176,
9 });
10}

multiple checks output

Usando los checks en los entornos CI

Una cosa importante que hay que entender con respecto a las comprobaciones es que una comprobación fallida no fallará toda la prueba de carga.

Las comprobaciones ayudan a mantener el código organizado y fácil de leer, pero cuando se ejecuta una prueba de carga en un conjunto de pruebas de CI es posible que desee comprobar las condiciones de error que fallan toda la prueba de carga. En este caso, es posible que desee combinar Checks con thresholds para obtener lo que desea:

check_thresholds.js
1import http from 'k6/http';
2import { check } from 'k6';
3import { Rate } from 'k6/metrics';
4
5export let errorRate = new Rate('errors');
6export let options = {
7 thresholds: {
8 errors: ['rate<0.1'], // <10% errors
9 },
10};
11
12export default function () {
13 const res = http.get('http://httpbin.org');
14 const result = check(res, {
15 'status is 200': (r) => r.status == 200,
16 });
17
18 errorRate.add(!result);
19}

El script anterior declara una métrica personalizada de Rate (llamada "errores") para mantener la información sobre los errores que hemos visto durante la prueba, luego utiliza un Threshold en esa métrica personalizada para fallar la prueba cuando encuentra demasiados errores. Si sustituimos la URL "http://httpbin.org" por una que genere un error, k6 saldrá con un valor de salida distinto de cero, indicando un resultado FAIL a, por ejemplo, un sistema CI que lo haya ejecutado:

threshold results

Como puede ver arriba, el código de salida generado por k6 después de esta ejecución fue 99. Cualquier código de salida distinto de cero es comúnmente interpretado por los shells de Un*x, los servidores de CI y los sistemas de monitorización como un "fallo".

Observe también que utilizamos el valor de retorno de check() para decidir si incrementamos nuestra tasa de error. Cuando alguna de las condiciones de comprobación dentro de una llamada a check() falla, check() devuelve false, lo que hará que se incremente la tasa de error. Sólo si todas las condiciones de comprobación pasan, check() devolverá true.

Consulte check() en la referencia de la API de scripts para obtener más detalles sobre su funcionamiento.

Comprobaciones en los resultados de k6 Cloud

En k6 Cloud Results, Checks están disponibles en su propia pestaña para su análisis.

Aquí podemos ver rápidamente qué comprobaciones están fallando, y al hacer clic en cualquier comprobación, ver el recuento de pases/fallos en determinados puntos de la prueba. También se puede añadir la comprobación a la pestaña de análisis, para su posterior comparación con otras métricas.

Pestaña de Checks en k6 Cloud