Como Rastrear Referências na Integração Contínua com o Bencher
A maioria dos resultados de benchmark é efêmera. Eles desaparecem assim que o seu terminal atinge o seu limite de retrocesso. Alguns sistemas de benchmark permitem armazenar os resultados, mas a maioria o faz apenas localmente. Bencher permite que você rastreie os seus benchmarks tanto de execuções locais quanto de CI e compare os resultados, enquanto ainda utiliza seu sistema de benchmark favorito.
Há duas maneiras populares de comparar resultados de benchmark quando se pratica o Benchmark Contínuo, ou seja, benchmark em CI:
- Benchmark Contínuo Estatístico
- Acompanhar os resultados de benchmark ao longo do tempo para criar uma base de referência
- Usar essa base de referência junto com Limites Estatísticos para criar um limite estatístico
- Compara os novos resultados com este limite estatístico para detectar regressões de desempenho
- Benchmark Contínuo Relativo
- Executar os benchmarks para o código de base atual
- Usar Limites Percentuais para criar um limite para o código de base
- Mudar para a nova versão do código
- Executar os benchmarks para a nova versão do código
- Comparar os resultados da nova versão do código com os resultados do código de base para detectar regressões de desempenho
Benchmarking Contínuo Estatístico
Continuando de onde paramos nos tutoriais de
Início Rápido e Self-Hosted com Docker,
vamos adicionar o Benchmarking Contínuo Estatístico ao nosso projeto Save Walter White
.
🐰 Certifique-se de ter criado um token de API e configurado como a variável de ambiente
BENCHER_API_TOKEN
antes de continuar!
Primeiro, precisamos criar um novo Testbed para representar nossos runners de CI, apropriadamente nomeado ci-runner
.
bencher testbed create \--name ci-runner \save-walter-white-1234abcd
- Use o subcomando
bencher testbed create
da CLI. Veja a documentação dotestbed create
para mais detalhes. (ex:bencher testbed create
) - Defina a opção
--name
para o nome desejado do Testbed. (ex:--name ci-runner
) - Especifique o argumento do projeto como o slug do projeto
Save Walter White
. (ex:save-walter-white-1234abcd
)
Em seguida, precisamos criar um novo Threshold para o nosso Testbed ci-runner
:
bencher threshold create \--branch main \--testbed ci-runner \--measure Latency \--test t-test \--upper-boundary 0.95 \save-walter-white-1234abcd
- Use o subcomando
bencher threshold create
da CLI. Veja a documentação dothreshold create
para mais detalhes. (ex:bencher threshold create
) - Defina a opção
--branch
para o Branch padrãomain
. (ex:--branch main
) - Defina a opção
--branch
para o novo Testbedci-runner
. (ex:--testbed ci-runner
) - Defina a opção
--measure
para a MedidaLatency
embutida gerada pelobencher mock
. Veja a definição de Medida para mais detalhes. (ex:--measure Latency
) - Defina a opção
--test
para um Thresholdt-test
. Veja Thresholds & Alerts para uma visão geral completa. (ex:--test t-test
) - Defina a opção
--upper-boundary
para um Limite Superior de0.95
. Veja Thresholds & Alerts para uma visão geral completa. (ex:--upper-boundary 0.95
) - Especifique o argumento do projeto como o slug do projeto
Save Walter White
. (ex:save-walter-white-1234abcd
)
Agora estamos prontos para rodar nossos benchmarks no CI. Como cada ambiente de CI é um pouco diferente, o exemplo a seguir é mais ilustrativo do que prático. Para exemplos mais específicos, veja Benchmarking Contínuo no GitHub Actions e Benchmarking Contínuo no GitLab CI/CD.
Precisamos criar e manter uma linha de base histórica para nosso branch main
benchmarkeando cada mudança no CI:
bencher run \--project save-walter-white-1234abcd \--branch main \--testbed ci-runner \--adapter json \--err \bencher mock
- Use o subcomando
bencher run
da CLI para rodar os benchmarks do seu branchfeature-branch
. Veja a documentação do subcomandobencher run
para uma visão geral completa. (ex:bencher run
) - Defina a opção
--project
para o slug do Projeto. Veja a documentação do--project
para mais detalhes. (ex:--project save-walter-white-1234abcd
) - Defina a opção
--branch
para o nome do Branch padrão. Veja a seleção de branch para uma visão geral completa. (ex:--branch main
) - Defina a opção
--testbed
para o nome do Testbed. Veja a documentação do--tested
para mais detalhes. (ex:--testbed ci-runner
) - Defina a opção
--adapter
para o adaptador de harness de benchmark desejado. Veja os adaptadores de harness de benchmark para uma visão geral completa. (ex:--adapter json
) - Defina a flag
--err
para falhar o comando se um Alerta for gerado. Veja Threshold & Alerts para uma visão geral completa. (ex:--err
) - Especifique os argumentos do comando de benchmark.
Veja o comando de benchmark para uma visão geral completa.
(ex:
bencher mock
)
Finalmente, estamos prontos para detectar regressões de desempenho no CI.
É assim que rastrearemos o desempenho de um novo branch de funcionalidades, chamado feature-branch
, no CI:
bencher run \--project save-walter-white-1234abcd \--branch feature-branch \--branch-start-point main \--branch-start-point-hash 32aea434d751648726097ed3ac760b57107edd8b \--branch-reset \--testbed ci-runner \--adapter json \--err \bencher mock
- Use o subcomando
bencher run
da CLI para rodar os benchmarks do seu branchfeature-branch
. Veja a documentação do subcomandobencher run
para uma visão geral completa. (ex:bencher run
) - Defina a opção
--project
para o slug do Projeto. Veja a documentação do--project
para mais detalhes. (ex:--project save-walter-white-1234abcd
) - Defina a opção
--branch
para o nome do Branch de funcionalidades. Veja a seleção de branch para uma visão geral completa. (ex:--branch feature-branch
) - Defina a opção
--branch-start-point
para o ponto de início do Branch de funcionalidades. Veja a seleção de branch para uma visão geral completa. (ex:--branch-start-point main
) - Defina a opção
--branch-start-point-hash
para o hashgit
do ponto de início do Branch de funcionalidades. Veja a seleção de branch para uma visão geral completa. (ex:--branch-start-point-hash 32ae...dd8b
) - Defina a flag
--branch-reset
para sempre redefinir o Branch para o ponto de início. Isso evitará deriva de dados de benchmark. Veja a seleção de branch para uma visão geral completa. (ex:--branch-reset
) - Defina a opção
--testbed
para o nome do Testbed. Veja a documentação do--tested
para mais detalhes. (ex:--testbed ci-runner
) - Defina a opção
--adapter
para o adaptador de harness de benchmark desejado. Veja os adaptadores de harness de benchmark para uma visão geral completa. (ex:--adapter json
) - Defina a flag
--err
para falhar o comando se um Alerta for gerado. Veja Threshold & Alerts para uma visão geral completa. (ex:--err
) - Especifique os argumentos do comando de benchmark.
Veja o comando de benchmark para uma visão geral completa.
(ex:
bencher mock
)
Na primeira vez que este comando for executado no CI,
ele criará o Branch feature-branch
já que ele ainda não existe.
O novo feature-branch
usará o Branch main
no hash 32aea434d751648726097ed3ac760b57107edd8b
como seu ponto de início.
Isso significa que feature-branch
terá uma cópia de todos os dados e Thresholds
do Branch main
para comparar os resultados do bencher mock
para a primeira e todas as execuções subsequentes.
Benchmarking Contínuo Relativo
Continuando de onde paramos nos tutoriais Início Rápido e Docker Auto Hospedado, vamos adicionar o Benchmarking Contínuo Relativo ao nosso projeto Salve Walter White
.
🐰 Certifique-se de ter criado um token de API e configurado como a variável de ambiente
BENCHER_API_TOKEN
antes de continuar!
Primeiro, precisamos criar um novo Testbed para representar nossos executores CI, apropriadamente chamado de ci-runner
.
bencher testbed create \--name ci-runner \save-walter-white-1234abcd
- Use o subcomando CLI
bencher testbed create
. Veja a documentaçãotestbed create
para mais detalhes. (ex:bencher testbed create
) - Defina a opção
--name
para o nome desejado do Testbed. (ex:--name ci-runner
) - Especifique o argumento do projeto como o slug do projeto
Salve Walter White
. (ex:save-walter-white-1234abcd
)
O Benchmarking Contínuo Relativo executa uma comparação lado a lado de duas versões do seu código.
Isso pode ser útil ao lidar com ambientes de CI/CD ruidosos,
onde os recursos disponíveis podem ser altamente variáveis entre as execuções.
Neste exemplo, estaremos comparando os resultados da execução na branch main
com os resultados de execução em uma branch de recurso chamada feature-branch
.
Como cada ambiente de CI é um pouco diferente,
o seguinte exemplo destina-se a ser mais ilustrativo do que prático.
Para exemplos mais específicos, veja Benchmarking Contínuo no GitHub Actions
e Benchmarking Contínuo no GitLab CI/CD.
Primeiro, precisamos fazer checkout da branch main
com git
no CI:
git checkout main
Em seguida, precisamos executar nossos benchmarks na branch main
no CI:
bencher run \--project save-walter-white-1234abcd \--branch feature-branch \--branch-reset \--testbed ci-runner \--adapter json \bencher mock
- Use o subcomando CLI
bencher run
para executar seus benchmarks na branchmain
. Veja o subcomando CLIbencher run
para uma visão completa. (ex:bencher run
) - Defina a opção
--project
para o slug do Projeto. Veja a documentação--project
para mais detalhes. (ex:--project save-walter-white-1234abcd
) - Defina a opção
--branch
para o nome da branch de recurso. Veja seleção de branch para uma visão completa. (ex:--branch feature-branch
) - Defina a flag
--branch-reset
. Veja seleção de branch para uma visão completa. (ex:--branch-reset
) - Defina a opção
--testbed
para o nome do Testbed. Veja a documentação--testbed
para mais detalhes. (ex:--testbed ci-runner
) - Defina a opção
--adapter
para o adaptador de harness de benchmark desejado. Veja adaptadores de harness de benchmark para uma visão completa. (ex:--adapter json
) - Especifique os argumentos do comando de benchmark.
Veja comando de benchmark para uma visão completa.
(ex:
bencher mock
)
A primeira vez que este comando é executado no CI,
criará a branch feature-branch
já que ela ainda não existe.
A nova feature-branch
não terá um ponto de partida, dados existentes ou Limiares.
Nas execuções subsequentes, a versão antiga da feature-branch
será renomeada
e uma nova feature-branch
será criada sem um ponto de partida, dados existentes ou Limiares.
Em seguida, precisamos criar um novo Limiar no CI para nossa nova branch feature-branch
:
bencher threshold create \--branch feature-branch \--testbed ci-runner \--measure Latency \--test percentage \--upper-boundary 0.25 \save-walter-white-1234abcd
- Use o subcomando CLI
bencher threshold create
. Veja a documentaçãothreshold create
para mais detalhes. (ex:bencher threshold create
) - Defina a opção
--branch
para a nova branchfeature-branch
. (ex:--branch feature-branch
) - Defina a opção
--branch
para o Testbedci-runner
. (ex:--testbed ci-runner
) - Defina a opção
--measure
para a MedidaLatência
gerada porbencher mock
. Veja a definição de Medida para detalhes. (ex:--measure Latency
) - Defina a opção
--test
para um Limiar deporcentagem
. Veja Limiares & Alertas para uma visão completa. (ex:--test t-test
) - Defina a opção
--upper-boundary
para um Limite Superior de0.25
(ou seja,25%
). Veja Limiares & Alertas para uma visão completa. (ex:--upper-boundary 0.25
) - Especifique o argumento do projeto como o slug do projeto
Salve Walter White
. (ex:save-walter-white-1234abcd
)
Então, precisamos fazer checkout da branch feature-branch
com git
no CI:
git checkout feature-branch
Finalmente, estamos prontos para executar nossos benchmarks da feature-branch
no CI:
bencher run \--project save-walter-white-1234abcd \--branch feature-branch \--testbed ci-runner \--adapter json \--err \bencher mock
- Use o subcomando CLI
bencher run
para executar seus benchmarks dafeature-branch
. Veja o subcomando CLIbencher run
para uma visão completa. (ex:bencher run
) - Defina a opção
--project
para o slug do Projeto. Veja a documentação--project
para mais detalhes. (ex:--project save-walter-white-1234abcd
) - Defina a opção
--branch
para o nome da branch de recurso. Veja seleção de branch para uma visão completa. (ex:--branch feature-branch
) - Defina a opção
--testbed
para o nome do Testbed. Veja a documentação--testbed
para mais detalhes. (ex:--testbed ci-runner
) - Defina a opção
--adapter
para o adaptador de harness de benchmark desejado. Veja adaptadores de harness de benchmark para uma visão completa. (ex:--adapter json
) - Defina a flag
--err
para falhar o comando se um Alerta for gerado. Veja Limiar & Alertas para uma visão completa. (ex:--err
) - Especifique os argumentos do comando de benchmark.
Veja comando de benchmark para uma visão completa.
(ex:
bencher mock
)
Toda vez que este comando for executado no CI,
estará comparando os resultados da feature-branch
apenas com os resultados mais recentes da main
.
🐰 Parabéns! Você aprendeu como rastrear referências na Integração Contínua com o Bencher! 🎉