Teste de carga com K6 — Instalação e criação do primeiro teste

Pedro Henrique Joioso Martins
4 min readMar 27, 2023

--

Após ter entendido um pouco mais sobre os conceitos do teste de carga conforme foi escrito no artigo anterior, agora chegou a hora de instalarmos e configurarmos o k6 para então conseguirmos criarmos nosso primeiro teste de exemplo.

Pré-requisitos:

Conhecimento: Nenhum 🙌

  • IDE de Desenvolvimento (no meu caso estou utilizando o VSCode) ✅
  • Sistema operacional: Ubuntu 14.xx ou superior 👌

O processo de instalação do K6 é relativamente simples, para instalar o k6 no sistema operacional Debian/Ubuntu, basta abrir o terminal e instalar o k6 através do seguintes comandos:

sudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69
echo "deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main" | sudo tee /etc/apt/sources.list.d/k6.list
sudo apt-get update
sudo apt-get install k6

👉 Executar uma linha/comando por vez.

Com isso vamos ter o k6 instalado globalmente na nossa maquina, ou seja, se quisermos já podemos realizar nosso primeiro teste.

Criando primeiro teste

Com o k6 instalado, vamos iniciar um novo projeto. Com o terminal aberto, basta criarmos a pasta com o nome desejável do projeto, no meu caso:

mkdir Projetos/tests/k6-test

Acessar a pasta raiz do projeto:

cd Projetos/tests/k6-test/

Criar um novo arquivo JavaScript, chamado script.js.

touch script.js

Após a criação da pasta do projeto e do arquivo script.js, iremos abrir o “projeto” dentro da nossa IDE de desenvolvimento, no meu caso que estou usando o Visual Studio Code.

code .

Supondo que vamos testar a própria API do k6, que possui suas coleções de requisições através da seguinte URL: https://test.k6.io, vamos configurar o teste no arquivo script.js da seguinte maneira:

import http from 'k6/http';
import { sleep } from 'k6';

export default function () {
http.get('https://test.k6.io');
sleep(1);
}

☝️ Explicando: no código acima estamos importando o http para conseguirmos fazer as requisições dos nossos testes e o sleep para aguardar um determinado período de tempo. Depois criamos uma função default que faz uma simples requisição do tipo get na API do k6.

Para executar o teste via terminal basta executar o comando:

k6 run script.js

A execução do teste produzirá a seguinte saída:

Relatório do teste executado com k6.

👇 Explicando um pouco alguma das métricas geradas:

Explicação de algumas métricas geradas.

Adicionando mais UVs (Usuários Virtuais)

Para executar o mesmo testes, porém com mais de um UV e uma duração mais longa:

k6 run --vus 10 --duration 30s script.js
  • vus: parâmetro para especificação de quantos usuários virtuais serão simulados.
  • duration: parâmetro que determina o tempo de duração de execução do teste.

Usando options

Porém se analisarmos este modo de execução, logo percebemos que não é prático termos que passar os parâmetros toda vez que quisermos executar por linha de comando. A alternativa é inserir essas configurações no arquivo de teste da seguinte forma:

import http from 'k6/http'
import { sleep } from 'k6';
export const options = {
vus: 10,
duration: '30s',
};
export default function () {
http.get('<http://test.k6.io>');
sleep(1);
}

Desta forma, conseguimos indicar que o teste deverá ser realizado simulando 10 usuários virtuais, durante 30 segundos dentro da configuração dos OPTIONS. Podendo voltar a executar o teste da seguinte maneira:

k6 run script.js

Usando estágios de rampas up/down de VUs

Podemos configurar também testes que aumentam e/ou diminuem o número de VUs durante as exeecuções. Para configurar a rampa up/down nos testes, utilizamos a propriedade options.stages:

import http from 'k6/http';
import { check, sleep } from 'k6';

export const options = {
stages: [
{ duration: '30s', target: 20 },
{ duration: '1m30s', target: 10 },
{ duration: '20s', target: 0 },
],
};

export default function () {
const res = http.get('<https://httpbin.test.k6.io/>');
check(res, { 'status was 200': (r) => r.status == 200 });
sleep(1);
}

☝️ Explicando: no código acima estamos iniciando os testes com 1 usuário virtual, subindo até 20 VU’s que é o target(cada estágio tem seu target) durante o tempo de 30 segundos, depois diminuímos de 20 Usuários Virtuais para 10 VU’s durante 1 minuto e meio e finalizamos os testes diminuindo novamente de 10 VU’s para 0 usuário virtual, porém em um tempo mais curto de 20 segundos. Criamos uma função default que faz uma simples requisição do tipo get na API do k6 e checamos se o status code das requisições é igual a 200, ou seja, fazemos uma validação que as requisições foram executadas com sucesso.

Por fim, e reforçando, o k6 permite diversas configurações e possui uma infinidade de funcionalidades, como output do resultado customizados, métricas personalizadas, uma série de integrações, possibilidade de escrevermos scripts com limites e regras de aceitação, e boa parte de tudo isso nós vamos ver no próximo artigo.

Cheers! 🍻

Caso tenha alguma dúvida, sugestão de melhoria ou algum problema, deixe seu comentário. 👌

Caso tenha gostado ou tudo tenha ocorrido direitinho, me siga no Medium e deixa seu like. 😘

Referências

--

--

Pedro Henrique Joioso Martins

Engenheiro de teste, cervejeiro, churrasqueiro e pai. Sabe aplicação funcionando, cerveja gelada, churrasco bem-feito e família reunida?Não gosto, eu amo!