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 Estatístico Contínuo
Dando continuidade ao que foi visto nos tutoriais
Início Rápido e Auto- Hospedagem com Docker,
vamos adicionar o Benchmarking Contínuo Estatístico ao nosso projeto Salvar Walter White
.
🐰 Certifique-se de ter criado um token de API e configurado como a variável de ambiente
BENCHER_API_TOKEN
antes de prosseguir!
Primeiro, precisamos criar um novo Testbed para representar nossos runners de CI, apropriadamente chamado ci-runner
.
- 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
Salvar Walter White
. (ex:save-walter-white-1234abcd
)
Em seguida, precisamos criar um novo Limiar para nosso Testbed ci-runner
:
- 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 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 MedidaLatência
incorporada, que é gerada pelobencher mock
. Veja a definição de Medida para detalhes. (ex:--measure Latency
) - Defina a opção
--test
para um Limiar det-test
. Veja Limiares & Alertas para uma visão completa. (ex:--test t-test
) - Defina a opção
--upper-boundary
para um Limite Superior de0.95
. Veja Limiares & Alertas para uma visão completa. (ex:--upper-boundary 0.95
) - Especifique o argumento do projeto como o slug do projeto
Salvar Walter White
. (ex:save-walter-white-1234abcd
)
Agora estamos prontos para executar 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 nossa branch main
executando benchmarks de todas as mudanças no CI:
- Use o subcomando CLI
bencher run
para executar os benchmarks da sua branchfeature-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 padrão. Veja seleção de branch para uma visão completa. (ex:--branch main
) - Defina a opção
--testbed
para o nome do Testbed. Veja a documentação--tested
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 opção
--err
para falhar o comando se um Alerta for gerado. Veja Limiares & 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
)
Finalmente, estamos prontos para detectar regressões de desempenho no CI.
Assim é como acompanharíamos o desempenho de uma nova branch de recurso, chamada feature-branch
, no CI:
- Use o subcomando CLI
bencher run
para executar os benchmarks da sua branchfeature-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
--branch-start-point
para o ponto de início da branch de recurso. Veja seleção de branch para uma visão completa. (ex:--branch-start-point main
) - Defina a opção
--branch-start-point-hash
para o hashgit
do ponto de início da branch de recurso. Veja seleção de branch para uma visão completa. (ex:--branch-start-point-hash 32ae...dd8b
) - Defina a opção
--testbed
para o nome do Testbed. Veja a documentação--tested
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 opção
--err
para falhar o comando se um Alerta for gerado. Veja Limiares & 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
)
A primeira vez que este comando for executado no CI,
ele criará a branch feature-branch
uma vez que ela ainda não existe.
A nova feature-branch
usará a 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 Limiares
da branch main
para comparar os resultados do bencher mock
contra,
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
.
- 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:
Em seguida, precisamos executar nossos benchmarks na branch main
no CI:
- 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
:
- 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:
Finalmente, estamos prontos para executar nossos benchmarks da feature-branch
no CI:
- 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! 🎉