Realizando requisições com query params com K6
Tags: testing, performance, k6
Published: 2023-05-28 18:18:52

Uma das formas mais comuns de realização de requisições HTTP para consulta de dados é utilizando parâmetros de consulta, também conhecidos como query params. 

Essa é uma forma simples e eficiente de passar dados para uma página da Web ou API por meio da URL. 

Nesse artigo  veremos como podemos utilizar query params em testes de performance com K6.

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1rstn0npfu21mg87fj7f.png)


### Pré-requisitos📑
- [K6 instalado](https://k6.io/docs/get-started/installation/)

### Conhecendo a lib URL🧐

O K6 oferece uma variedade de bibliotecas oficiais otimizadas para realizar testes de desempenho usando a `jslib k6`. Um desses módulos é o [URL](https://github.com/grafana/k6-jslib-url).

Esse módulo permite construir URLs com várias informações, incluindo query params.

### Script de exemplo📚

Vamos modificar o script a seguir para que a nossa URL seja criada contendo parâmetros de consulta:

```
import http from 'k6/http';

export default function () {
  const base_url = https://k6.io';

  const res = http.get(base_url);
}
```

> Nesse script de exemplo teremos apenas as fases de inicialização e execução.

### Modificando nosso script🔨

O ponto de partida é adicionarmos o módulo `URL` a fase de inicialização do script. Para fazer isso, você pode simplesmente incluir a seguinte linha ao seu script:

```
import { URL } from 'https://jslib.k6.io/url/1.0.0/index.js';
```

Uma vez que o modulo URL foi adicionado na fase de inicialização, podemos realizar as modificações no script na fase de execução.

Agora, vamos criar nossa `base_url` utilizando o módulo `URL`. Para fazer isso, você pode realizar a seguinte modificação no seu script:

```
const base_url = new URL('https://k6.io');
```

Como nossa `base_url` é uma constante do tipo `URL`, podemos aproveitar todas as funções disponibilizadas pelo módulo, incluindo a `searchParams`, que nos permite buscar e manipular os parâmetros presentes na base_url. Além disso, podemos adicionar novos parâmetros facilmente usando o a função `base_url.searchParams.append('chave', 'valor')`.

> Parâmetros de consulta são anexados **ao final de uma URL** após um (?), e consistem em **pares chave-valor** separados por um (&).

Vamos adicionar alguns parâmetros de consulta a nossa `base_url`, sendo eles os seguintes:

```
  url.searchParams.append('utm_medium', 'organic');
  url.searchParams.append('utm_source', 'test');
  url.searchParams.append('multiple', ['foo', 'bar']);
```

Por fim, só precisamos fazer uma pequena modificação na url fornecida no `http.get`. Atualmente, estamos passando o objeto URL diretamente, mas para corrigir isso, basta acessar a propriedade toString() da seguinte forma:

```
const res = http.get(base_url.toString());
```
E então a `base_url` informada seria a seguinte: 

```
https://k6.io?utm_medium=organic&utm_source=test&multiple=foo%2Cbar
```

### Script pós modificações📋

Nosso script de exemplos após a modificações para a inclusão de parâmetros de consulta ficou da seguinte forma:

```
import { URL } from 'https://jslib.k6.io/url/1.0.0/index.js';
import http from 'k6/http';

export default function () {
  const base_url = new URL('https://k6.io');

  url.searchParams.append('utm_medium', 'organic');
  url.searchParams.append('utm_source', 'test');
  url.searchParams.append('multiple', ['foo', 'bar']);

  const res = http.get(base_url.toString());
}

```

### Conclusão💖

A jslib k6 oferece uma ampla gama de soluções que ajudam os testadores a conceber suas soluções de testes de desempenho de forma ideal. 😎

Os query params foram apenas um dos aspectos abordados, no entanto, o módulo é bastante robusto, permitindo a personalização de vários outros elementos da URL, como hash, host, porta, protocolo e muito mais. Esses pontos são detalhadamente explicados na documentação oficial do módulo [URL](https://github.com/grafana/k6-jslib-url).😄

Gostou do conteúdo e quer saber mais sobre testes de performance com K6? Então não deixe de conferir meu curso na Udemy:

- [Teste de performance com K6](https://www.udemy.com/course/teste-de-performance-com-k6/?referralCode=95CCD8BC9F22A2A96BDA) ✨