Teste de carga com K6 — Instalação e criação do primeiro teste
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:
👇 Explicando um pouco alguma das 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. 😘