Executando testes de performance com Grafana Cloud K6

Marlo Henrique
7 min readOct 8, 2023

--

Ao abordarmos a realização de testes de performance, é essencial considerar a execução desses testes em ambientes de nuvem, utilizando serviços renomados, como AWS CodeBuild, Azure DevOps e outros serviços SaaS oferecidos pelos principais serviços de cloud. Entre os principais benefícios que podem ser destacados nesse contexto, incluem-se:

  • Escalabilidade.
  • Flexibilidade geográfica.
  • Redução de custos.
  • Confiança nos resultados.

O conceito de Performance Testing as a Service tem ganhado popularidade. Essas são plataformas dedicadas principalmente a fornecer serviços para a realização de testes de performance, simplificando a execução em várias zonas, com cargas de trabalho intensas e disponibilizando um conjunto abrangente de ferramentas para monitorar a execução e os resultados obtidos.

Neste artigo, exploraremos o Grafana Cloud K6 e discutiremos por que você deve conhecer essa poderosa ferramenta.

Adeus K6 Cloud. Bem vindo Grafana Cloud K6✨

O k6 Cloud é um produto SaaS criado pela equipe do K6 para ser o companheiro perfeito. Ele trouxe facilidade de uso, bem como gerenciamento de equipe e recursos de continuos testing para seus projetos de teste de performance.

A partir do lançamento do Grafana Cloud K6, não estão sendo aceitas novas inscrições no K6 Cloud. Os usuários existentes do K6 Cloud continuarão a utilizá-lo sem interrupções. Além disso, está sendo planejada a migração do K6 Cloud para o Grafana Cloud K6 em uma data posterior.

O Grafana Cloud K6 é uma solução que visa da suporte a grande maioria dos recursos oferecidos pela k6 cloud, enquanto se beneficia dos recursos da plataforma Grafana Cloud para Visualização de dados e Observability.

Com a aquisição pela Grafana labs do K6 em meados de 2021, iniciou-se um processo de unificação de serviços.

Benefícios do Grafana Cloud K6🏆

Um dos principais benefícios a serem destacados ao optar pelo Grafana K6 Cloud é a oferta de um plano gratuito para os usuários.

Ao criar uma conta, os usuários têm acesso a um plano free que inclui horas de execução de VUs (Usuários Virtuais) K6 mensais, sem nenhum custo. Além disso, o plano gratuito oferece outros benefícios relacionados aos serviços do Grafana Cloud.

Essa disponibilidade de recursos gratuitos torna o Grafana K6 Cloud uma opção acessível e atraente para aqueles que desejam iniciar ou aprimorar seus testes de performance.

Além disso, outra vantagem notável é possibilidade de executar testes de carga na nuvem com até 1 milhão de usuários virtuais simultâneos ou 5 milhões de solicitações/segundo, com a possibilidade de distribuição em 21 localizações geográficas para os planos Cloud Pro e Cloud Advanced.

No entanto, o aspecto que mais se destaca, é a capacidade de ter testes de desempenho e observabilidade integrados em uma única plataforma.

A capacidade de incorporar as visualizações do K6 aos seus painéis já existentes no Grafana e correlacionar os resultados dos testes de desempenho com métricas, logs e rastreamentos do servidor é verdadeiramente a cereja do bolo.

Isso proporciona uma abordagem completa e holística para analisar o desempenho do seu sistema, permitindo que você identifique rapidamente as principais causas de problemas e tome medidas corretivas de forma eficiente.

Execução via Grafana K6 Cloud💻

Pré-requisitos📑

Script utilizando📃

Nesta etapa prática faremos modificações em um script de teste de performance, que requer a adição de configuração para a execução via Grafana Cloud K6.

O exemplo de script que será utilizado é o seguinte:

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

export const options = {
stages: [
{ duration: '10s', target: 10 },
{ duration: '10s', target: 10 },
{ duration: '10s', target: 0 }
],
thresholds: {
checks: ['rate > 0.95'],
http_req_duration: ['p(95) < 200']
}
}

export default function(){

const BASE_URL = 'https://test-api.k6.io/public/crocodiles';
const res = http.get(BASE_URL)

check(res,{
'status 200': (r) => r.status === 200
});
sleep(1);
}

Obtendo token de acesso🔐

Uma vez autenticado na Grafana Cloud, acesse Start Testing para K6:

Você será redirecionado para a página de testes de performance do seu usuário. Um projeto padrão é automaticamente criado para sua conta, porém você tem a flexibilidade de criar outros projetos de acordo com suas necessidades.

O id do projeto pode ser encontrado quando você clicar no nome do projeto.

O token necessário para execução via Grafana Cloud K6 pode ser obtido na opção Settings:

Executando nosso script😃

Antes de executar o seu script, é necessário autenticar-se no Grafana Cloud K6. Para fazer isso, copie o token gerado na etapa anterior, e em qualquer CLI da sua escolha, utilize o seguinte comando:

k6 login cloud --token <TOKEN>

Além disso, é necessário adicionar ao escopo de configuração algumas propriedades que façam referência ao projeto que será executado. Vamos modificar o bloco options do nosso script da seguinte forma:

export const options = {
stages: [
{ duration: '10s', target: 10 },
{ duration: '10s', target: 10 },
{ duration: '10s', target: 0 }
],
thresholds: {
checks: ['rate > 0.95'],
http_req_duration: ['p(95) < 200']
},
ext: {
loadimpact: {
projectID: '3633734',
name: 'Exemplo de execução',
}
}
}

Por fim, podemos executar nosso script via cloud utilizando o seguinte comando:

k6 cloud script.js

No console você recebera uma saída semelhante a seguinte:


/\ |‾‾| /‾‾/ /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io

execution: cloud
script: script.js
output: https://marlo2222.grafana.net/a/k6-app/runs/1922864

scenarios: (100.00%) 1 scenario, 10 max VUs, 1m0s max duration (incl. graceful stop):
* default: Up to 10 looping VUs for 30s over 3 stages (gracefulRampDown: 30s, gracefulStop: 30s)

test status: Finished

Run [======================================] Finished

Run [======================================] Finished

Observe que a execution é destacada como via cloud, e um link de acesso ao output de execução está disponível, nele os dados de execução estarão disponíveis.

Acessando o relatório de execução, podemos ter acesso as métricas coletadas pela execução:

Execução local, com métricas em cloud😲

Uma outra possibilidade que a Grafana Cloud K6 nos proporciona, é a capacidade de executar nosso script localmente e enviar as métricas resultantes para o nosso projeto na nuvem no Grafana Cloud.

Para realizar isso, basta executar o seguinte comando na sua CLI:

k6 run --out cloud script.js

Como saída você terá todos as métricas que o K6 já disponibiliza no output da CLI:

          /\      |‾‾| /‾‾/   /‾‾/
/\ / \ | |/ / / /
/ \/ \ | ( / ‾‾\
/ \ | |\ \ | (‾) |
/ __________ \ |__| \__\ \_____/ .io

execution: local
script: script.js
output: cloud (https://marlo2222.grafana.net/a/k6-app/runs/1922875)

scenarios: (100.00%) 1 scenario, 10 max VUs, 1m0s max duration (incl. graceful stop):
* default: Up to 10 looping VUs for 30s over 3 stages (gracefulRampDown: 30s, gracefulStop: 30s)


✓ status 200

✓ checks.........................: 100.00% ✓ 168 ✗ 0
data_received..................: 235 kB 7.8 kB/s
data_sent......................: 52 kB 1.7 kB/s
http_req_blocked...............: avg=7.05ms min=0s med=0s max=281.88ms p(90)=0s p(95)=0s
http_req_connecting............: avg=3.43ms min=0s med=0s max=134.81ms p(90)=0s p(95)=0s
✓ http_req_duration..............: avg=121.31ms min=109.75ms med=120.41ms max=227.33ms p(90)=129.66ms p(95)=136.04ms
{ expected_response:true }...: avg=121.31ms min=109.75ms med=120.41ms max=227.33ms p(90)=129.66ms p(95)=136.04ms
http_req_failed................: 0.00% ✓ 0 ✗ 336
http_req_receiving.............: avg=21.66µs min=0s med=0s max=1.01ms p(90)=34.35µs p(95)=66.59µs
http_req_sending...............: avg=10.65µs min=0s med=0s max=766.1µs p(90)=0s p(95)=63.72µs
http_req_tls_handshaking.......: avg=3.44ms min=0s med=0s max=134.52ms p(90)=0s p(95)=0s
http_req_waiting...............: avg=121.27ms min=109.6ms med=120.34ms max=227.33ms p(90)=129.66ms p(95)=135.95ms
http_reqs......................: 336 11.164001/s
iteration_duration.............: avg=1.26s min=1.23s med=1.24s max=1.55s p(90)=1.28s p(95)=1.46s
iterations.....................: 168 5.582/s
vus............................: 2 min=1 max=10
vus_max........................: 10 min=10 max=10


running (0m30.1s), 00/10 VUs, 168 complete and 0 interrupted iterations
default ✓ [======================================] 00/10 VUs 30s

Mas ao acessar seu link de output da execução ou o próprio projeto na grafana cloud, você terá acesso as métricas coletadas:

Observe que a execução local para o mesmo cenário apresentou menor vazão(RPS) de requisições bem como um maior response time para o p(95), sendo quase 6 vezes maior.

Conclusão💖

Como evidenciamos anteriormente, o processo de integração entre K6 e Grafana Cloud K6 é descomplicado e traz consigo inúmeras vantagens, sendo a maior confiabilidade nas métricas obtidas uma das mais significativas.😄

Vale ressaltar, também, o período de uso gratuito mensal, no qual as horas disponibilizadas podem ser de extrema utilidade em provas de conceito, permitindo validar a confiabilidade dos dados coletados e demonstrar os benefícios de adotar um ambiente de Performance Testing as a Service.📚

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:

--

--

Marlo Henrique

Hi, my name is Marlo, I'm a Software Engineer at UFC and I've been working in the area of quality and testing for 3 years.💕 🎮