Las cookies HTTP son utilizadas por los sitios web y las aplicaciones para almacenar piezas de información de estado en el dispositivo del usuario. Un servidor indica al cliente, a través de una cabecera HTTP Set-Cookie, qué información quiere que se almacene en la máquina del usuario.
El navegador del usuario almacenará los datos de la cookie y los asociará con el nombre de host del servidor, y para cada solicitud posterior a ese nombre de host, incluirá los datos de la cookie almacenados en una cabecera Cookie.
A continuación, puede controlar reglas más específicas sobre cuándo deben enviarse o no los datos de la cookie, incluyendo la limitación a subdominios específicos del dominio o a una ruta específica. También es posible establecer una fecha de caducidad en la cookie y decirle al navegador que sólo la envíe a través de conexiones cifradas (SSL/TLS).
Cookies en k6
En la mayoría de los casos, k6 gestionará de forma transparente la recepción, el almacenamiento y el envío de cookies, tal y como se ha descrito anteriormente, de modo que las pruebas de su sitio web o aplicación basados en cookies funcionarán sin que usted tenga que hacer nada especial.
En algunos casos de uso, puede desear un mayor control sobre las cookies. En k6 tienes dos opciones, o bien manipular directamente las cabeceras HTTP, o utilizar la más ergonómica API de cookies. A continuación veremos esto último.
Simple configuración de las cookies
Para simular que una cookie ha sido previamente establecida por un navegador y ahora se supone que se incluye en una solicitud posterior al servidor, incluimos la cookie en el parámetro de solicitud de cookies:
Esto sólo aplicará la cookie para la solicitud en cuestión, pero no se enviará para las solicitudes posteriores. Si quieres hacer esto tienes que añadir la cookie a un cookies jar, y por defecto hay un cookies jar por VU, con el que podemos interactuar para establecer e inspeccionar las cookies:
El cookies jar por VU almacena todas las cookies recibidas del servidor en una cabecera Set-Cookie. También puede crear "cookies jar locales" que anulen el cookies jar por VU, pero puede encontrar más sobre esto más adelante.
También se puede especificar que una cookie debe ser anulada si ya forma parte del cookie jar por VU:
Accediendo a las cookies
Para ver qué cookies se establecieron para una respuesta en particular podemos mirar en la propiedad cookies del objeto respuesta:
La propiedad cookies del objeto de respuesta es un mapa en el que la clave es el nombre de la cookie y el valor es un array de objetos cookie de respuesta (ver más abajo la descripción). Es un array para soportar múltiples cookies que tengan el mismo nombre (pero diferentes atributos domain y/o path), lo cual es parte de la RFC6265.
Propiedades de un objeto de cookie de respuesta
Un objeto cookie de respuesta contiene las siguientes propiedades:
Propiedad | Tipo | Descripción |
---|---|---|
name | string | el nombre de la cookie |
value | string | el valor de la cookie |
domain | string | dominio que decide a qué nombres de host debe enviarse esta cookie |
path | string | limitar el envío de la cookie sólo si la ruta de la solicitud coincide con este valor |
expires | string | cuando la cookie expira, esto tiene que estar en el formato RFC1123 con un aspecto similar: Lun, 02 Ene 2006 15:04:05 MST |
max_age | number | se utiliza para el mismo propósito que expira pero se define como el número de segundos que una cookie será válida |
secure | boolean | si es verdadero, la cookie sólo se enviará a través de una conexión cifrada (SSL/TLS) |
http_only | boolean | si es verdadero, la cookie no se expondrá a JavaScript en un entorno de navegador |
Inspeccionando una cookie en el jar
Para ver qué cookies están establecidas, y almacenadas en el cookies jar, para una URL en particular podemos utilizar el método cookieForURL() del objeto cookies jar:
El objeto cookies devuelto por el método cookiesForURL() del jar es un mapa donde la clave es el nombre de la cookie y el valor es un array de valores de cookies (strings). Es un array para soportar múltiples cookies que tengan el mismo nombre (pero diferentes atributos domain y/o path), lo cual es parte de la RFC6265.
Configurando las cookies avanzadas con los atributos
Para establecer cookies que controlen de forma más estricta el comportamiento de la cookie debemos añadir la cookie a un cookies jar. Un ejemplo:
Jar de cookies local
Además del cookies jar por VU, también puede crear el jar de cookies locales que pueden anular el jar de cookies de VU por solicitud. Un ejemplo: