Transformando testes de API com Postman em testes de performance com K6🏋️♂️
Marlo Henrique
Posted on April 5, 2023
Quando se trata de realizar testes de performance, uma das etapas essenciais é o planejamento cuidadoso dos testes. Durante essa fase, alguns pontos importantes devem ser definidos, tais como:
- o endpoint que será testado
- a massa necessária para a realização dos testes
- a necessidade de autenticação
- as validações necessárias para garantir a integridade dos resultados
É possível observar que algumas informações essenciais para a realização de testes de performance são semelhantes às informações necessárias para a execução de testes de API.
Neste artigo, você aprenderá como transformar seus testes de API, criados anteriormente em uma collection do Postman, em testes de performance com o K6.
Pré-requisitos📑
Mão na massa👩💻
O que é uma collection postman🤔
As coleções ou collections no Postman são uma maneira de organizar e executar conjuntos de requisições HTTP para testar APIs.
Ao criar uma coleção, é possível adicionar variáveis de ambiente, scripts, testes e outras configurações para ajudar a automatizar e aprimorar seus testes de API.
Isso permite que você personalize a sua coleção para atender às suas necessidades de teste específicas, permitindo que você execute uma variedade de testes.
Entendendo nossa collection😎
Embora nossa collection contenha apenas um exemplo simples de requisição a uma API pública do K6, nós consideramos pontos importantes para a sua execução, tais como headers e base URL, definidos como parâmetros de ambiente. Na imagem a seguir, é possível visualizar nosso teste de API no Postman:
A collection está disponível no repositório convert-postman-to-k6, e pode ser clonada utilizando o seguinte comando:
git clone https://github.com/marlo2222/convert-postman-to-k6.git
Depois de clonar o repositório, entre no diretório utilizando o comando cd convert-postman-to-k6
. A estrutura do projeto é simples e pode ser observada abaixo:
k6.json
README.md
Instalando a ferramenta postman-to-k6🔨
A ferramenta postman-to-k6
foi desenvolvida com o objetivo de simplificar a conversão de suas collections do Postman em testes de performance com o K6. Isso inclui a conversão de pontos importantes, como testes e variáveis globais expostas pelo Postman.
Para instalar a ferramenta, basta executar o seguinte comando:
npm install -g @apideck/postman-to-k6
Convertendo nossa collection 🎭
Após instalar a ferramenta, é possível realizar a conversão de forma simples. Dentro do diretório do projeto convert-postman-to-k6
, basta executar o seguinte comando:
postman-to-k6 k6.json -o k6-script.js
No comando acima, estamos utilizando a biblioteca postman-to-k6, passando a nossa collection k6.json e definindo o parâmetro de saída -o para gerar o nosso script de testes de performance com o nome k6-script.js.
Com a conversão realizada com sucesso, nosso arquivo de saída terá o seguindo formato:
// Auto-generated by the postman-to-k6 converter
import "./libs/shim/core.js";
export let options = { maxRedirects: 4 };
const Request = Symbol.for("request");
postman[Symbol.for("initial")]({
options,
collection: {
base_url: "https://test-api.k6.io"
}
});
export default function() {
postman[Request]({
name: "buscar todos os crocodilos",
id: "093fd7fc-646c-4982-af32-dcd2f1701760",
method: "GET",
address: "https://test-api.k6.io/public/crocodiles/",
headers: {
"Content-Type": ""
}
});
}
Executando nosso teste de performance🚀
Para executar o nosso teste de performance gerado a partir da collection do Postman, o processo é bastante simples. Basta executar o seguinte comando:
k6 run .\k6-script.js
Como o script gerado a partir da nossa collection do Postman não possui configurações padrão de carga de usuários ou duração, podemos definir essas configurações diretamente no script gerado ou passá-las pela CLI usando o seguinte comando:
k6 run -d 3s -u 2 .\k6-script.js
E teremos como o seguinte resultado de saída:
/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ || __\ ___/ .io
execution: local
script: .\k6-script.js
output: -
scenarios: (100.00%) 1 scenario, 2 max VUs, 33s max duration (incl. graceful stop):
* default: 2 looping VUs for 3s (gracefulStop: 30s)
data_received..................: 53 kB 17 kB/s
data_sent......................: 7.5 kB 2.4 kB/s
http_req_blocked...............: avg=12.65ms min=0s med=0s max=316.3ms p(90)=0s p(95)=0s
http_req_connecting............: avg=3.78ms min=0s med=0s max=95.01ms p(90)=0s p(95)=0s
http_req_duration..............: avg=109.14ms min=104.88ms med=108.29ms max=150.08ms p(90)=110.91ms p(95)=111.5ms
{ expected_response:true }...: avg=109.14ms min=104.88ms med=108.29ms max=150.08ms p(90)=110.91ms p(95)=111.5ms
http_req_failed................: 0.00% ✓ 0 ✗ 50
http_req_receiving.............: avg=42.61µs min=0s med=0s max=307µs p(90)=186.67µs p(95)=279.98µs
http_req_sending...............: avg=2.62µs min=0s med=0s max=66.5µs p(90)=0s p(95)=0s
http_req_tls_handshaking.......: avg=5.41ms min=0s med=0s max=135.79ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=109.1ms min=104.88ms med=108.29ms max=150.08ms p(90)=110.9ms p(95)=111.5ms
http_reqs......................: 50 16.182685/s
iteration_duration.............: avg=122.08ms min=104.88ms med=109.04ms max=429.52ms p(90)=111.28ms p(95)=133.48ms
iterations.....................: 50 16.182685/s
vus............................: 2 min=2 max=2
vus_max........................: 2 min=2 max=2
running (03.1s), 0/2 VUs, 50 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs 3s
Ponto de atenção🚧
É importante ter em mente que, como o K6 usa Go para executar JavaScript, algumas funcionalidades podem estar ausentes ou sem suporte, especialmente em relação às APIs de navegadores e Node.js. No entanto, é possível contornar essas limitações importando módulos JavaScript integrados. Uma lista de bibliotecas compatíveis pode ser encontrada em jslib.k6.
Além disso, é importante destacar que alguns recursos do Postman podem precisar passar por ajustes após a conversão para o K6. Por exemplo, pré-scripts contendo pm.sendRequest não são suportados e a forma como o Postman acessa dados em JSON, usando jsonData.hasOwnProperty, deve ser substituída pela sintaxe equivalente do K6 para extrair informações de resposta JSON, usando response.json(""). Para mais detalhes, é possível consultar a descrição oficial do repositório postman-to-k6.
Conclusão💖
Podemos considerar a conversão de collections postman em scripts de testes de performance com o módulo postman-to-k6 um dos diferenciais do K6 em relação a outras ferramentas do mercado. A ferramenta permite gerar rapidamente um script de testes de performance, mesmo que simples, para a realização de um teste com rapidez.
É importante ressaltar que algumas funcionalidades podem necessitar de ajustes após a conversão, mas com a documentação oficial do repositório postman-to-k6, é possível encontrar as informações necessárias para seguir a diante.
Além disso, o módulo é open source, o que permite a colaboração e o aprimoramento da ferramenta por parte da comunidade.
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:
Posted on April 5, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.