Comment suivre les benchmarks pytest-benchmark Python dans CI

Everett Pompeii

Everett Pompeii


Maintenant que vous avez appris comment mesurer les performances du code Python avec pytest-benchmark, voyons comment suivre ces benchmarks dans l’intégration continue (CI). Le Benchmarking Continu est la pratique consistant à exécuter des benchmarks sur chaque ensemble de modifications pour s’assurer que les changements n’introduisent pas de régressions de performance. La façon la plus simple d’implémenter le Benchmarking Continu avec les benchmarks pytest-benchmark est d’utiliser Bencher.

Qu’est-ce que Bencher ?

Bencher est une suite d’outils de benchmarking continu. Avez-vous déjà eu une régression de performance qui a impacté vos utilisateurs ? Bencher aurait pu empêcher cela de se produire. Bencher vous permet de détecter et de prévenir les régressions de performance avant qu’elles n’arrivent en production.

  • Exécuter: Exécutez vos benchmarks localement ou en CI en utilisant vos outils de benchmarking préférés. La CLI bencher enveloppe simplement votre harnais de benchmarking existant et stocke ses résultats.
  • Suivre: Suivez les résultats de vos benchmarks au fil du temps. Surveillez, interrogez et graphiquez les résultats à l’aide de la console web Bencher en fonction de la branche source, du banc d’essai et de la mesure.
  • Détecter: Détectez les régressions de performances en CI. Bencher utilise des analyses de pointe et personnalisables pour détecter les régressions de performances avant qu’elles n’arrivent en production.

Pour les mêmes raisons que les tests unitaires sont exécutés en CI pour prévenir les régressions de fonctionnalités, les benchmarks devraient être exécutés en CI avec Bencher pour prévenir les régressions de performance. Les bugs de performance sont des bugs !

Étapes pour Bencher Cloud

  1. Créez un compte Bencher Cloud.
  2. Créez un jeton API et ajoutez-le à votre CI en tant que secret.
  3. Créez un workflow pour votre CI, comme GitHub Actions ou GitLab CI/CD.
  4. Installez le Bencher CLI dans votre workflow CI.
  5. Exécutez vos benchmarks avec la sous-commande bencher run dans votre workflow CI en utilisant l'adaptateur python_pytest.

Étapes pour Bencher Auto-hébergé

  1. Créez une instance Bencher Auto-hébergée.
  2. Créez un compte sur votre instance Bencher Auto-hébergée.
  3. Créez un jeton API et ajoutez-le à votre CI en tant que secret.
  4. Créez un workflow pour votre CI, comme GitHub Actions ou GitLab CI/CD.
  5. Installez le Bencher CLI dans votre workflow CI. Assurez-vous que la version du CLI correspond à la version de votre instance Bencher Auto-hébergée.
  6. Exécutez vos benchmarks avec la bencher run sous-commande dans votre workflow CI en utilisant l'adaptateur python_pytest et en réglant l'option --host sur l'URL de votre instance Bencher Auto-hébergée.

🐍 Python Pytest

L’adaptateur Python Pytest (python_pytest) attend une sortie de pytest-benchmark au format JSON (c’est-à-dire --benchmark-json results.json). Cette sortie JSON est sauvegardée dans un fichier, vous devez donc utiliser l’argument --file du CLI bencher run pour spécifier le chemin de ce fichier. La mesure de latence (c’est-à-dire nanosecondes (ns)) est recueillie.

Terminal window
bencher run --adapter python_pytest --file results.json "pytest --benchmark-json results.json benchmarks.py"

Il y a deux options pour la Métrique :

  • mean (par défaut) : Les lower_value et upper_value sont une déviation standard en dessous et au-dessus de la moyenne (c’est-à-dire value) respectivement.
  • median : Les lower_value et upper_value sont une intervalle interquartile en dessous et au-dessus de la médiane (c’est-à-dire value) respectivement.

Cela peut être spécifié dans la sous-commande CLI bencher run avec l’argument optionnel --average.

Suivez vos benchmarks dans CI

Avez-vous déjà eu une régression de performance impactant vos utilisateurs ? Bencher aurait pu empêcher cela de se produire avec le benchmarking continu.

🤖 Ce document a été automatiquement généré par OpenAI GPT-4. Il peut ne pas être précis et peut contenir des erreurs. Si vous trouvez des erreurs, veuillez ouvrir une issue sur GitHub.