Teste de Performance usando K6.io + Docker Compose + InfluxDB + Grafana

Thiago Soares
Quality Assurance Stories
4 min readFeb 18, 2021

Seguindo a linha de ter maior qualidade no pipeline e oferecer alternativas viáveis de testes às aplicações clientes, eu fui estudar a questão de QA durante o pipelines, e me deparei com o K6.io.

http://k6.io

Irei falar um pouco sobre essa ferramenta, e a experiência adquirida com ela nesse artigo.

Na empresa temos outra ferramenta, mantida por uma equipe de homologação e performance o Grou.

https://github.com/globocom/grou

Durante as minhas pesquisas eu verifiquei grande potencial nessa ferramenta, existem outras semelhantes, como o Grou e o Locust.io. Escrevi um artigo falando desse último:

https://medium.com/docker-um-canivete-su%C3%ADco/teste-de-performance-usando-docker-93970f56c2ff

Uma das vantagens é, que o desenvolvedor poderia escrever o código de testes, e poderia rodar os testes durante o pipeline do Gitlab, de forma a dar total controle e autonomia ao desenvolvedor/QA.

Tipos de testes que a ferramenta é capaz de fazer:

Vantagens

Existe uma farta gama de documentações e artigos sobre essa ferramenta, já sendo bem consolidada no mercado e usada por grandes empresas.

Exemplo de Medium de boa leitura sobre ela:

https://medium.com/swlh/beautiful-load-testing-with-k6-and-docker-compose-4454edb3a2e3

Como listei os tipos de testes que ela é capaz de executar, implementa um poder de testes sem precedentes para a sua aplicação, algo que não vi em outras ferramentas.

Desvantagens

Como é uma ferramenta de performance, rodar com bastantes VUs — Virtual Users, irá consumir bastantes recursos computacionais da sua máquina, principalmente se estiver com outras aplicações gulosas de memória e processamento abertas; rede também irá ser consumida pelo teste em execução.

Em meus testes, o máximo conseguido foram 800 VUs concorrentes. Então se precisar de mais usuários concorrentes terá que fazer a execução em Cloud e/ou em máquinas com maiores recursos.

Essa aplicação apesar de opensource, possui uma parte própria da empresa em cloud. No meu caso não foi necessária a utilização, o Grafana substitui bem essa funcionalidade.

Exemplo Testado

Exemplos de códigos que podem ser escritos em Js, para realizar o teste de carga:

No meu Github, há um fork modificado, para poder fazer testes próprios com o Grafana e InfluxDB.

https://github.com/tsoarescruz/k6_test

O código mostrado acima é um dos samples que usei para teste.

Nesse teste, são usados os seguinte serviços:

Como rodar o teste

Ao rodar o o código o mesmo lhe informa dados de execução:

docker-compose run -v $PWD/scripts:/scripts k6 run --out influxdb=http://influxdb:8086/db0 -w /scripts/samples_test.js

Maiores detalhes, podem ser obtidos na documentação do K6 (http://k6.io)

Com a integração com o Grafana o resultado prático da execução é gravado no InfluxDB, e com o datasource no Grafana, é mostrado o resultado:

Nesse teste foi usado o seguinte dashboard:

https://grafana.com/grafana/dashboards/2587

Outros podem ser vistos em:

https://k6.io/docs/results-visualization/influxdb-+-grafana#custom-grafana-dashboard

Maiores informações, sobre as formas de output, pode ser obtidos em:

Como o output, pode ser enviado para um gama muito grande de agregadores e formas de saída como:

Amazon CloudWatch, Apache Kafka, Cloud, CSV, Datadog, InfluxDB, JSON, New Relick e StatsD.

Tornam essa ferramenta bem versátil na forma de visualização dos testes e geração de métricas e relatórios dos testes.

Podem ser feitos inserções de métricas customizáveis no código e o mesmo refletindo no Grafana:

Rodar no Pipeline

O exemplo abaixo de um .yml do Gitlab (k6_load_test.yml) de como ser configurado o pipeline para rodar no CI do Gitlab.

.load_performance:
variables:
K6_IMAGE: loadimpact/k6
K6_VERSION: latest
K6_TEST_FILE: ''
K6_OPTIONS: ''
K6_DOCKER_OPTIONS: ''
script:
- docker run --rm -v "$(pwd)":/k6 -w /k6 $K6_DOCKER_OPTIONS $K6_IMAGE:$K6_VERSION run $K6_TEST_FILE --summary-export=load-performance.json $K6_OPTIONS --out influxdb=http://grafana.com:8086/myk6db
artifacts:
reports:
load_performance: load-performance.json

Obs: Substitua o endereço do load-influxdb pelo seu endereço do Grafana. Os valores de variables são repassados pelas aplicações clientes durante o pipeline.

Conclusões finais:

Como informei nas vantagens e desvantagens, essa aplicação aumenta e muito a capacidade de testes da aplicação, ultrapassou todas as minhas expectativas em relação ao poder da mesma, porém não possuo poder computacional em minha máquina para escalar o meu teste. Algo que pode ser solucionado levando a mesma para uma cloud privada.

Recomendo a utilização da ferramenta.

--

--

Thiago Soares
Quality Assurance Stories

Data Science • DevOps Engineer GloboPlay • Dev Engineer na Globo.com