Transformando testes de API com Postman em testes de performance com K6🏋️‍♂️

marlo2222

Marlo Henrique

Posted on April 5, 2023

Transformando testes de API com Postman em testes de performance com K6🏋️‍♂️

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.

Image description

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:

Image description

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


Enter fullscreen mode Exit fullscreen mode

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


Enter fullscreen mode Exit fullscreen mode

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


Enter fullscreen mode Exit fullscreen mode

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


Enter fullscreen mode Exit fullscreen mode

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": ""
    }
  });
}


Enter fullscreen mode Exit fullscreen mode

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


Enter fullscreen mode Exit fullscreen mode

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


Enter fullscreen mode Exit fullscreen mode

E teremos como o seguinte resultado de saída:


      /\      |‾‾| /‾‾/   /‾‾/
 /\  /  \     |  |/  /   /  /
/  \/    \    |     (   /   ‾‾\
Enter fullscreen mode Exit fullscreen mode

/ \ | |\ \ | (‾) |
/ __________ \ || __\ ___/ .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
Enter fullscreen mode Exit fullscreen mode

running (03.1s), 0/2 VUs, 50 complete and 0 interrupted iterations
default ✓ [======================================] 2 VUs 3s

Enter fullscreen mode Exit fullscreen mode




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:

💖 💪 🙅 🚩
marlo2222
Marlo Henrique

Posted on April 5, 2023

Join Our Newsletter. No Spam, Only the good stuff.

Sign up to receive the latest update from our blog.

Related