No results for

Powered byAlgolia

Peticiones HTTP

Haciendo peticiones HTTP

Al crear una nueva prueba de carga, lo primero que se suele hacer es definir las peticiones HTTP que se utilizarán para probar el sistema. Un ejemplo sencillo que sólo realiza una petición de tipo GET es el siguiente:

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

Una solicitud algo más compleja podría ser por ejemplo, una solicitud POST para autenticarse en un sitio web o servicio:

http_post.js
1import http from 'k6/http';
2
3export default function () {
4 const url = 'http://test.k6.io/login';
5 const payload = JSON.stringify({
6 email: 'aaa',
7 password: 'bbb',
8 });
9
10 const params = {
11 headers: {
12 'Content-Type': 'application/json',
13 },
14 };
15
16 http.post(url, payload, params);
17}

Available methods

Utilice el módulo http para realizar todo tipo de peticiones HTTP en sus pruebas de carga.

NombreDescripción
batch()Emitir múltiples peticiones HTTP en paralelo (como suelen hacer, por ejemplo, los navegadores).
del()Emitir una solicitud HTTP DELETE.
get()Emitir una solicitud HTTP GET.
options()Emitir una solicitud HTTP OPTIONS.
patch()Emitir una solicitud HTTP PATCH.
post()Emitir una solicitud HTTP POST.
put()Emitir una solicitud HTTP PUT.
request()Emitir una solicitud HTTP.

Tags en las solicitudes HTTP

k6 aplicará automáticamente etiquetas (tags) a sus peticiones HTTP. Estas etiquetas le permiten filtrar sus resultados durante el análisis.

NombreDescripción
expected_response (≥ v0.31)Por defecto, cuando el valor de response.status está entre 200 y 399, el valor es true. Cambia el compartamiento por defecto mediante setResponseCallback.
groupCuando una petición se ejecutan dentro de un group, el valor es el nombre del grupo. Por defecto está vacío.
namePor defecto será la URL solicitada
methodMétodos de la solicitud (GET,POST,PUT, entre otros)
scenarioCuando una petición se ejecutan dentro de un scenario, el valor es el nombre del grupo. Por defecto está vacío.
statusEstatus de la respuesta
urlURL de la solicitud

A continuación puede se ver cómo se registra un valor de la métrica HTTP (la duración de una solicitud HTTP), en formato JSON, incluyendo las diversas etiquetas mencionadas anteriormente:

data_point.json
1{
2 "type": "Point",
3 "metric": "http_req_duration",
4 "data": {
5 "time": "2017-06-02T23:10:29.52444541+02:00",
6 "value": 586.831127,
7 "tags": {
8 "expected_response": "true",
9 "group": "",
10 "method": "GET",
11 "name": "http://test.k6.io",
12 "scenario": "",
13 "status": "200",
14 "url": "http://test.k6.io"
15 }
16 }
17}

Agrupamiento de las URLs

Por defecto, las peticiones informan el nombre de la etiqueta con el valor de la URL de la petición. Para las URLs que contienen partes dinámicas, esto puede no ser deseable ya que puede introducir un gran número de URLs únicas en el flujo de métricas. El siguiente código muestra una situación en la que se accede a 100 URLs diferentes pero se desea que todas ellas se reporten usando una sola métrica:

grouping.js
1import http from 'k6/http';
2
3for (let id = 1; id <= 100; id++) {
4 http.get(`http://example.com/posts/${id}`);
5}
6
7// tags.name=\"http://example.com/posts/1\",
8// tags.name=\"http://example.com/posts/2\",

Puede agregar datos de URLs dinámicas estableciendo explícitamente una etiqueta de nombre:

explicit_tag.js
1import http from 'k6/http';
2
3for (let id = 1; id <= 100; id++) {
4 http.get(`http://example.com/posts/${id}`, {
5 tags: { name: 'PostsItemURL' },
6 });
7}
8
9// tags.name=\"PostsItemURL\",
10// tags.name=\"PostsItemURL\",

Lo que produciría una salida JSON como la siguiente:

1{
2 "type":"Point",
3 "metric":"http_req_duration",
4 "data": {
5 "time":"2017-06-02T23:10:29.52444541+02:00",
6 "value":586.831127,
7 "tags": {
8 "method":"GET",
9 "name":"PostsItemURL",
10 "status":"200",
11 "url":"http://example.com/1"
12 }
13 }
14}
15// and
16{
17 "type":"Point",
18 "metric":"http_req_duration",
19 "data": {
20 "time":"2017-06-02T23:10:29.58582529+02:00",
21 "value":580.839273,
22 "tags": {
23 "method":"GET",
24 "name":"PostsItemURL",
25 "status":"200",
26 "url":"http://example.com/2"
27 }
28 }
29}

Observe cómo el name es el mismo para las dos muestras de datos relacionadas con dos URLs diferentes. Si filtramos los resultados por el nombre de la etiqueta (name: PostsItemURL), obtendremos un conjunto de resultados que incluye todos los puntos de datos de las 100 URL diferentes.

Además, también puede utilizar el “wrapper” http.url para establecer el nombre de la etiqueta con un valor determinado:

1import http from 'k6/http';
2
3for (let id = 1; id <= 100; id++) {
4 http.get(http.url`http://example.com/posts/${id}`);
5}
6
7// tags.name="http://example.com/posts/${}",
8// tags.name="http://example.com/posts/${}",