No results for

Powered byAlgolia

Tags y Groups

El análisis de los resultados de la carga es un paso necesario para encontrar los problemas de rendimiento; una prueba de carga suele tener como objetivo un servicio que implica diferentes subsistemas y recursos, lo que hace difícil encontrar el/los problemas que degradan su rendimiento.

k6 proporciona dos APIs de scripting para ayudarle durante el análisis y visualizar, ordenar y filtrar fácilmente los resultados de sus pruebas.

  • Grupos (groups): organice su script de carga en torno a una lógica común.
  • Etiquetas (tags): clasifique sus Checks, Thresholds, métricas personalizadas y solicitudes con etiquetas para un filtrado en profundidad.

Groups

Los grupos son opcionales, y permiten "agrupar" su script de carga. Los grupos pueden ser anidados, y permiten el estilo BDD de pruebas.

groups.js
1import { group } from 'k6';
2
3export default function () {
4 group('visit product listing page', function () {
5 // ...
6 });
7 group('add several products to the shopping cart', function () {
8 // ...
9 });
10 group('visit login page', function () {
11 // ...
12 });
13 group('authenticate', function () {
14 // ...
15 });
16 group('checkout process', function () {
17 // ...
18 });
19}

Groups do the following tasks internally:

  • For each group() function, k6 emits a group_duration metric that contains the total time to execute the group function.

  • When a taggable resource: checks, requests, or custom metrics runs within a group, k6 will set the tag group with the current group name. Read more about it in Tags.

Both options, the group_duration metric and group tagging, could help you analyze and visualize better the results of more complex tests. Check out how they work in your k6 result output.

Discouraged use cases

Wrapping each individual request within a group might add boilerplate code and be unnecessary.

group-antipattern.js
1import { group, check } from 'k6';
2import http from 'k6/http';
3
4const id = 10;
5
6// reconsider this type of code
7group('get post', function () {
8 http.get(`http://example.com/posts/${id}`);
9});
10group('list posts', function () {
11 const res = http.get(`http://example.com/posts`);
12 check(res, {
13 'is status 200': (r) => r.status === 200,
14 });
15});

If your code looks like the example above, consider the following alternatives to write cleaner code:

  • For dynamic URLs, use the URL grouping feature.
  • To provide a meaningful name to your request, set the value of tags.name.
  • To reuse common logic or organize your code better, group logic in functions or create a local Javascript module and import it into the test script.
  • If you need to model advanced user patterns, check out Scenarios.

Tags

Las etiquetas (tags) son una forma sencilla y potente de clasificar las entidades de k6 para el posterior filtrado de resultados.

k6 proporciona dos tipos de etiquetas:

  • Tags definidas por el usuario: las que usted ha añadido al escribir su script.
  • Tags del sistema: etiquetas asignadas automáticamente por k6.

System tags

Actualmente, k6 crea automáticamente las siguientes etiquetas por defecto:

TagDescripción
protoEl nombre del protocolo utilizado (por ejemplo, HTTP/1.1)
subprotoEl nombre del sub protocolo (utilizado por los websockets)
statusEl código de estado HTTP (por ejemplo, 200, 404, etc.)
methodEl método HTTP (por ejemplo, GET, POST, etc.) o el nombre del método RPC para gRPC
urlURL de la petición HTTP
nameNombre de la petición HTTP
groupRuta completa del grupo
checkNombre del check
errorUn string con un mensaje de error no HTTP (por ejemplo, un error de red o de DNS)
error_codeañadido en la versión v0.24.0 de k6, se trata de un número único para los distintos tipos de error; puede encontrar una lista de los códigos de error actuales en la página de Códigos de error
tls_versionLa versión del TLS
scenarioNombre del escenario donde se emitió la métrica
serviceNombre del servicio RPC para gRPC
expected_responseresponseCallback

Si lo desea, puede deshabilitar algunas de las etiquetas anteriores utilizando la opción systemTags, sólo tenga en cuenta que algunos recolectores de datos (por ejemplo, la nube) pueden requerir que ciertas etiquetas estén presentes. Además, puedes habilitar algunas etiquetas adicionales del sistema, si las necesitas:

TagDescription
vuel ID del VU que ejecutó la solicitud
iterel número de iteración
ipLa dirección IP del servidor remoto
ocsp_statusel estado del Protocolo de Estado de los Certificados en Línea (OCSP) HTTPS

Etiquetas definidas por el usuario

Las etiquetas definidas por el usuario le permiten categorizar las entidades de k6 basándose en su lógica. Las siguientes entidades pueden ser etiquetadas:

  • checks
  • thresholds
  • custom metrics
  • requests
tagging-example.js
1import http from 'k6/http';
2import { Trend } from 'k6/metrics';
3import { check } from 'k6';
4
5const myTrend = new Trend('my_trend');
6
7export default function () {
8 // Add tag to request metric data
9 const res = http.get('http://httpbin.test.k6.io/', {
10 tags: {
11 my_tag: "I'm a tag",
12 },
13 });
14
15 // Add tag to check
16 check(res, { 'status is 200': (r) => r.status === 200 }, { my_tag: "I'm a tag" });
17
18 // Add tag to custom metric
19 myTrend.add(res.timings.connecting, { my_tag: "I'm a tag" });
20}

Etiquetas a lo largo de la prueba

Además de adjuntar etiquetas a las solicitudes, comprobaciones y métricas personalizadas, puede establecer etiquetas para toda la prueba que se aplicarán a todas las métricas. Puede establecer las etiquetas en la CLI utilizando uno o más indicadores --tag NAME=VALUE o en el script:

test-wide-tags.js
1export const options = {
2 tags: {
3 name: 'value',
4 },
5};

Etiquetas en los resultados de salida

output.js
1{
2 "type ": "Point ",
3 "data ": {
4 "time ": "2017-05-09T14:34:45.239531499+02:00 ",
5 "value ": 459.865729,
6 "tags ": {
7 "group ": "::my group::json ",
8 "method ": "GET ",
9 "status ": "200 ",
10 "url ": "https://httpbin.test.k6.io/get "
11 }
12 },
13 "metric ": "http_req_duration "
14}

Lea más sobre la sintaxis de la salida de resultados de k6 para ver cómo las etiquetas afectan a la salida de los resultados de las pruebas.