DEV Community

Marlo Henrique
Marlo Henrique

Posted on • Edited on

1

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:

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more