Cómo seguir los benchmarks de pytest-benchmark de Python en CI

Everett Pompeii
Ahora que has aprendido cómo hacer benchmark del código Python con pytest-benchmark, veamos cómo rastrear esos benchmarks en CI. Benchmarking Continuo es la práctica de ejecutar benchmarks en cada conjunto de cambios para asegurar que los cambios no introduzcan una regresión en el rendimiento. La forma más fácil de implementar Benchmarking Continuo con benchmarks de pytest-benchmark es usar Bencher.
¿Qué es Bencher?
Bencher es un conjunto de herramientas de benchmarking continuo. ¿Alguna vez has tenido un impacto de regresión de rendimiento en tus usuarios? Bencher podría haber evitado que eso sucediera. Bencher te permite detectar y prevenir las regresiones de rendimiento antes de que lleguen a producción.
- Ejecutar: Ejecute sus benchmarks localmente o en CI usando sus herramientas de benchmarking favoritas. La CLI
bencher
simplemente envuelve su arnés de benchmarks existente y almacena sus resultados. - Seguir: Sigue los resultados de tus benchmarks con el tiempo. Monitoriza, realiza consultas y representa gráficamente los resultados utilizando la consola web de Bencher basándose en la rama de origen, el banco de pruebas y la medida.
- Capturar: Captura las regresiones de rendimiento en CI. Bencher utiliza analíticas de vanguardia y personalizables para detectar regresiones de rendimiento antes de que lleguen a producción.
Por las mismas razones que las pruebas unitarias se ejecutan en CI para prevenir regresiones funcionales, los benchmarks deberían ejecutarse en CI con Bencher para prevenir regresiones de rendimiento. ¡Los errores de rendimiento son errores!
Pasos para Bencher Cloud
- Crea una cuenta en Bencher Cloud.
- Crea un token de API y agrégalo a tu CI como un secreto.
- Crea un flujo de trabajo para tu CI, como GitHub Actions o GitLab CI/CD.
- Instala el Bencher CLI en tu flujo de trabajo de CI.
-
Ejecuta tus benchmarks con el
bencher run
subcomando en tu flujo de trabajo de CI usando el adaptadorpython_pytest
.
Pasos para Bencher Self-Hosted
- Crear una instancia de Bencher Self-Hosted.
- Crear una cuenta en tu instancia de Bencher Self-Hosted.
- Crear un token de API y añadirlo a tu CI como un secreto.
- Crear un flujo de trabajo para tu CI, como GitHub Actions o GitLab CI/CD.
- Instalar la Bencher CLI en tu flujo de trabajo de CI. Asegúrate de que la versión de la CLI coincide con la versión de tu instancia de Bencher Self-Hosted.
-
Ejecutar tus benchmarks con el
bencher run
subcomando en tu flujo de trabajo de CI utilizando elpython_pytest
adaptador y configurando la opción--host
a la URL de tu instancia de Bencher Self-Hosted.
🐍 Python Pytest
El Adaptador Pytest de Python (python_pytest
) espera la salida de pytest-benchmark en formato JSON (es decir, --benchmark-json results.json
).
Esta salida JSON se guarda en un archivo, por lo que debes usar el argumento --file
de la CLI bencher run
para especificar la ruta de ese archivo.
Se recopila la Medida latency
(es decir, nanosegundos (ns)
).
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"
Hay dos opciones para la Métrica:
mean
(predeterminado): Los valoreslower_value
yupper_value
son una desviación estándar por debajo y por encima de la media (es decir,value
) respectivamente.median
: Los valoreslower_value
yupper_value
son un rango intercuartílico por debajo y por encima de la mediana (es decir,value
) respectivamente.
Esto se puede especificar en el subcomando CLI de bencher run
con el argumento opcional --average
.
Realiza un seguimiento de tus benchmarks en CI
¿Alguna vez ha tenido una regresión de rendimiento que afecte a sus usuarios? Bencher podría haber evitado que eso sucediera con el benchmarking continuo.