Skip to content

Arquitetura criada para testes de performance em K6. O objetivo é trazer a arquitetura mais escalável possível para trabalhar em testes de performance.

Notifications You must be signed in to change notification settings

Batissta/k6-performance-testing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Background Image

🚀 Testes de Performance com Arquitetura Escalável e Modular

k6 Prometheus Grafana Jenkins Docker Git

Este projeto demonstra uma arquitetura de testes de performance completa, utilizando K6 para execução, Prometheus para coleta de métricas e Grafana para visualização, tudo orquestrado por uma pipeline Jenkins em um ambiente Docker.

✨ Contribuidores


Foto do Usuário 1 no GitHub
Francinaldo Batista
Foto do Usuário 2 no GitHub
Marcos Castro
Foto do Usuário 3 no GitHub
Nathália Teixeira
Foto do Usuário 3 no GitHub
Vitória Cabral

🕵🏽 Sumário

🔧 Binários xK6 Utilizados

Para estender as funcionalidades do K6, o projeto utiliza os seguintes binários customizados:

  • xK6 Faker: Para gerar dados de teste dinamicamente.
  • xK6 Prometheus: Para enviar métricas de performance para o Prometheus.

📦 Início Rápido com Docker

Siga estes passos para configurar e executar o ambiente de testes.

  1. Construa a imagem customizada do Jenkins e inicie a stack de monitoramento (Prometheus + Grafana):
    docker compose up -d

⚙️ Configurando o Jenkins

Acesse a interface do Jenkins em http://localhost:8080.

  1. Login Inicial: Siga as instruções para realizar o primeiro login. A senha de administrador inicial pode ser encontrada nos logs do seu contêiner Jenkins.
  2. Criar a Pipeline: No Jenkins, crie um novo item do tipo Pipeline.
    • Nome: k6-smoke
    • URL do Repositório: https://github.com/Batissta/k6-performance-testing.git
    • Caminho do Jenkinsfile: ci/smoke/Jenkinsfile

🚦 Preparando o Ambiente de Teste

Para que os testes se conectem à sua aplicação (sem alterar nada no código), é necessário que sua API esteja em execução no endereço http://localhost:3333.

  • A pipeline do Jenkins foi configurada para passar a variável de ambiente --env BASE_URI=http://host.docker.internal:3333, direcionando o tráfego do contêiner de testes para a sua máquina local.
  • Se sua API não estiver em execução localmente, altere a BASE_URI no arquivo de configuração do seu projeto para o endereço correto.

📊 Configurando o Dashboard no Grafana

Acesse o Grafana em http://localhost:3000 para visualizar as métricas.

  1. Adicione a Fonte de Dados Prometheus:

    • Clique em "Connections" e depois em "Add new data source".
    • Procure e selecione Prometheus.
    • No campo nome, coloque Prometheus.
    • No campo URL, adicione: http://prometheus:9090
    • Salve e teste a conexão.
  2. Importe um Dashboard:

    • Busque por templates no site oficial do Grafana (preferencialmente modelos para Prometheus + K6).
    • Copie o ID do dashboard escolhido.
    • No menu lateral do Grafana, navegue para "Dashboards" e clique em "Import".

    Como alternativa, deixei um dashboard configurado para copiar e colar no caminho: util/grafana-dashboard.json.

    Demonstração de onde deves procurar o dashboard

    Nessa nova página, clique para criar um novo dashboard e clique em importar um dashboard.

    Você deve se encontrar nesta página
    Página correta

    O id do seu dashboard, deve ser colocado nesse campo
    Campo correto
    Agora, clique em Load, selecione o data source que você criou anteriormente e importe o dashboard.


🚀 Executando e Verificando

  1. Execute a Pipeline: No Jenkins, vá para a pipeline k6-smoke e clique em "Build Now".
    Demonstração de onde se encontra o botão de buildar a pipeline.

  2. Verifique os Dados: Após a execução, os dados começarão a aparecer no seu dashboard do Grafana em http://localhost:3000.


📁 Estrutura do Projeto

└── batissta-k6-performance-testing/
    ├── readme.md
    ├── docker-compose.yml
    ├── Dockerfile
    ├── prometheus.yml
    ├── ci/
    │   ├── endurance/
    │   │   └── Jenkinsfile
    │   ├── load/
    │   │   └── Jenkinsfile
    │   ├── smoke/
    │   │   └── Jenkinsfile
    │   └── stress/
    │       └── Jenkinsfile
    ├── config/
    │   ├── login/
    │   │   └── .gitkeep
    │   └── signUp/
    │       ├── signUp.js
    │       └── signUpGrafana.js
    ├── data/
    │   ├── dynamic/
    │   │   └── signUpDatapool.js
    │   └── static/
    │       └── .gitkeep
    ├── simulation/
    │   └── signUp.js
    ├── support/
    │   ├── base/
    │   │   ├── checks.js
    │   │   ├── constants.js
    │   │   ├── environment.js
    │   │   ├── imports.js
    │   │   └── metrics.js
    │   ├── libs/
    │   │   └── .gitkeep
    │   └── services/
    │       ├── baseRest.js
    │       └── requests/
    │           ├── loginRequest.js
    │           └── signUpRequest.js
    └── tests/
        ├── enduranceTests.js
        ├── loadTests.js
        ├── smokeTests.js
        └── stressTests.js

⚡ Maneiras de executar os testes

  1. Maneira básica, utilizada para debug na automação dos testes. Com um terminal aberto na raiz do repositório (a api para testes deve estar configurada), execute:
k6 run tests/smokeTests.js
  1. Segunda forma de execução para um debug mais detalhado e com uma maior visibilidade. Com um terminal aberto na raiz do repositório (a api para testes deve estar configurada), execute:
K6_CLOUD_TOKEN=<SEU_TOKEN_GRAFANA> k6 cloud run --local-execution tests/smokeTests.js
  1. A última forma prevista nessa documentação, serve para executar os testes de maneira mais profissional, com integração CI/CD com Jenkins e monitoramento, através de containers, com Prometheus e Grafana.

Essa maneira foi documentada acima no 📦 Início Rápido com Docker.








Documentação criada por Francinaldo Batista.

About

Arquitetura criada para testes de performance em K6. O objetivo é trazer a arquitetura mais escalável possível para trabalhar em testes de performance.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •