Utilizando módulos do xk6 com k6
Tags: go, k6, testing, performance
Published: 2023-07-05 11:14:19

O K6 é uma ferramenta que oferece uma série de módulos oficiais de alto desempenho. Esses módulos foram cuidadosamente analisados pela equipe responsável pelo desenvolvimento da ferramenta, garantindo sua qualidade e confiabilidade.

Esses módulos são frequentemente nativos do K6 e podem ser facilmente acessados usando importações como `k6/http` e `k6/data`, entre outros exemplos.

Nesse artigo veremos como podemos utilizar o xk6, ferramenta de linha de comando que permite adicionar módulos personalizados a ferramenta.

### Entendendo o xk6📚

Até algumas versões atras, o K6 permitia o uso apenas de módulos oficiais nativos da ferramenta e também módulos JS remotos. No entanto, em certas situações, pode ser necessário utilizar um módulo JS não otimizado da biblioteca jslib.k6, o que pode resultar em alguns problemas graves, tais como:

- Falta de suporte para APIs do sistema em JavaScript.
- Quedas de desempenho devido ao tempo de execução do JavaScript.

Módulos oficiais superam as limitações acima, pois se beneficiam de excelente desempenho e da flexibilidade de usar bibliotecas do Go.

O `xk6` é uma estrutura que possibilita a extensão do binário do K6, oferecendo oportunidades cruciais para ferramentas de código aberto, como:

- Permitir que a comunidade crie seus próprios módulos personalizados.
- Facilitação na contribuição da comunidade para o desenvolvimento de novos módulos.

Essa flexibilidade proporcionado pelo XK6, promove a colaboração e o crescimento contínuo do ecossistema do K6, permitindo que os usuários estendam e personalizem as funcionalidades da ferramenta.

Dois exemplos práticos de módulos que nasceram de iniciativas independentes e hoje fazem parte do código do K6 são os módulos `k6/experimental/browser` e `k6/experimental/websockets`.

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

### Instalando o XK6🔨

Primeiramente, vamos nos certificar que o Go está instalado corretamente. Em qualquer ferramenta de linha de comando de sua preferencia utilize o comando `go version` para verificar a versão do Go instalada:

```
go version go1.19.5 windows/amd64
```
> Esse tutorial será feito em maquina com sistema windows, utilizando o git bash.

Para adicionar o xk6 binário ao seu Go path, utilize o seguinte comando:

```
go install go.k6.io/xk6/cmd/xk6@latest
```
> Caso você esteja enfrentando problemas relacionados à desativação de módulos pelo `GO111MODULE`, você pode resolver executando o seguinte comando: `go env -w GO111MODULE=on`. Isso irá ativar os módulos Go e permitir o correto funcionamento do gerenciamento de dependências.

O comando acima instalará o binário xk6 em `$GOPATH/bin`. É importante garantir que o GOPATH esteja configurado corretamente. Caso deseje configurar o GOPATH, você pode utilizar o seguinte comando ao iniciar o seu shell: `export PATH=$(go env GOPATH)/bin:$PATH`. 

Para obter mais informações sobre o GOPATH, consulte o seguinte material: [gopath](https://go.dev/doc/gopath_code#GOPATH).

### Utilizando o xk6😁

Com o xk6 instalado, temos duas oportunidades à nossa disposição: a criação de plugins personalizados para o K6 ou a utilização de plugins customizados desenvolvidos pela comunidade. Neste tutorial, seguiremos o segundo caminho e utilizaremos um plugin alternativo de dashboard de relatórios.

Para instalação do plugin [xk6-dashboard](https://github.com/szkiba/xk6-dashboard) podemos utilizar o seguinte comando:

```
xk6 build --with github.com/szkiba/xk6-dashboard@latest
```

Agora que o plugin está instalado, temos uma nova e poderosa opção para gerar relatórios.

vamos utilizar o seguinte script de exemplo para execução e visualização desse relatório:

```
import http from 'k6/http';
import { check } from 'k6';

export const options = {
    vus: 5,
    duration: '10s',
    thresholds: {
        http_req_failed: ['rate < 0.05'],
    }
}

export default function(){
    const BASE_URL = 'https://test-api.k6.io/public/crocodiles/';

    const res = http.get(BASE_URL);

    check(res, {
        'status code 200': (r) => r.status === 200
    });
}

```

Para construir e disponibilizar o dashboard utilizando o plugin xk6-dashboard em uma interface web, podemos utilizar o seguinte comando para execução:
```
k6 run --out dashboard=open test.js
```
> Observe que estamos passando um flag de saída `--out`, informando que nossa métricas devem estar disponíveis no xk6-dashboard. 

Em seguida, uma nova guia será aberta em seu navegador, permitindo que você acompanhe em tempo real uma série de indicadores da execução atual:

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

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

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

## Conclusão💖
O xk6 permite que a comunidade contribua para o amadurecimento e crescimento do K6 com a disponibilização de novos módulos para a ferramenta.

Podemos ver que o xk6-dashboard nos proporciona uma outra visão de nossas métricas.

Outros módulos xk6 valem a pena serem estudados, entre eles: 
- [xk6-sql](https://github.com/grafana/xk6-sql)
- [xk6-csv](https://github.com/szkiba/xk6-csv)
- [xk6-faker](https://github.com/szkiba/xk6-faker)
- [xk6-kubernetes](https://github.com/grafana/xk6-kubernetes)

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) ✨