Como rastrear benchmarks do pytest-benchmark do Python em CI

Everett Pompeii
Agora que você aprendeu como fazer benchmark de código Python com pytest-benchmark, vamos ver como acompanhar esses benchmarks em CI. Benchmarking Contínuo é a prática de executar benchmarks em cada conjunto de mudanças para garantir que as alterações não introduzam regressões de desempenho. A maneira mais fácil de implementar o Benchmarking Contínuo com benchmarks pytest-benchmark é usar o Bencher.
O que é o Bencher?
Bencher é um conjunto de ferramentas de benchmarking contínuas. Já teve algum impacto de regressão de desempenho nos seus usuários? Bencher poderia ter prevenido isso. Bencher permite que você detecte e previna regressões de desempenho antes que cheguem à produção.
- Execute: Execute seus benchmarks localmente ou no CI usando suas ferramentas de benchmarking favoritas. O CLI
bencher
simplesmente envolve seu harness de benchmark existente e armazena seus resultados. - Rastreie: Acompanhe os resultados de seus benchmarks ao longo do tempo. Monitore, consulte e faça gráficos dos resultados usando o console web do Bencher baseado na branch de origem, testbed e medida.
- Capture: Capture regressões de desempenho no CI. Bencher usa análises personalizáveis e de última geração para detectar regressões de desempenho antes que elas cheguem à produção.
Pelos mesmos motivos que os testes de unidade são executados no CI para prevenir regressões de funcionalidades, benchmarks deveriam ser executados no CI com o Bencher para prevenir regressões de desempenho. Bugs de desempenho são bugs!
Passos para o Bencher Cloud
- Crie uma conta no Bencher Cloud.
- Crie um token de API e adicione-o ao seu CI como um segredo.
- Crie um fluxo de trabalho para o seu CI, como GitHub Actions ou GitLab CI/CD.
- Instale o Bencher CLI no seu fluxo de trabalho CI.
-
Execute seus benchmarks com o
bencher run
subcomando no seu fluxo de trabalho CI usando o adaptadorpython_pytest
.
Passos para Bencher Self-Hosted
- Crie uma instância Bencher Self-Hosted.
- Crie uma conta em sua instância Bencher Self-Hosted.
- Crie um token de API e adicione-o ao seu CI como um segredo.
- Crie um fluxo de trabalho para o seu CI, como GitHub Actions ou GitLab CI/CD.
- Instale o Bencher CLI no fluxo de trabalho do seu CI. Certifique-se de que a versão do CLI corresponda à versão da sua instância Bencher Self-Hosted.
-
Execute seus benchmarks com o
bencher run
subcomando no fluxo de trabalho do seu CI usando o adaptadorpython_pytest
e configure a opção--host
para a URL da sua instância Bencher Self-Hosted.
🐍 Python Pytest
O Adaptador Pytest do Python (python_pytest
) espera a saída do pytest-benchmark em formato JSON (ou seja --benchmark-json results.json
).
Essa saída JSON é salva em um arquivo, então você deve usar o argumento --file
da CLI bencher run
para especificar o caminho desse arquivo.
A Medida de latência
(ou seja, nanoseconds (ns)
) é coletada.
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"
Há duas opções para a Métrica:
média
(padrão): Os valoreslower_value
eupper_value
são um desvio padrão abaixo e acima da média (ou seja,value
) respectivamente.mediana
: Os valoreslower_value
eupper_value
são um intervalo interquartil abaixo e acima da mediana (ou seja,value
) respectivamente.
Isso pode ser especificado no subcomando da CLI bencher run
com o argumento opcional --average
.
Acompanhe seus benchmarks no CI
Alguma vez teve uma regressão de desempenho que afetou seus usuários? O Bencher poderia ter evitado que isso acontecesse com o benchmarking contínuo.