Как отслеживать бенчмарки pytest-benchmark в CI

Everett Pompeii

Everett Pompeii


Теперь, когда вы узнали как протестировать код Python с помощью pytest-benchmark, давайте посмотрим, как отслеживать эти бенчмарки в CI. Непрерывный бенчмаркинг — это практика запуска бенчмарков для каждого набора изменений, чтобы убедиться, что изменения не вводят регрессии производительности. Самый простой способ реализовать Непрерывный бенчмаркинг с бенчмарками pytest-benchmark — использовать Bencher.

Что такое Bencher?

Bencher - это набор инструментов для непрерывного тестирования производительности. Когда-нибудь регрессия производительности влияла на ваших пользователей? Bencher мог бы предотвратить это. Bencher позволяет вам обнаруживать и предотвращать регрессии производительности до того, как они попадут в продакшн.

  • Запустить: Запустите свои тесты производительности локально или в CI, используя ваши любимые инструменты для этого. CLI bencher просто оборачивает ваш существующий аппарат тестирования и сохраняет его результаты.
  • Отслеживать: Отслеживайте результаты ваших тестов производительности со временем. Мониторите, запрашивайте и строите графики результатов с помощью веб-консоли Bencher на основе ветки исходного кода, испытательного стенда и меры.
  • Поймать: Отлавливайте регрессии производительности в CI. Bencher использует инструменты аналитики, работающие по последнему слову техники, чтобы обнаружить регрессии производительности, прежде чем они попадут в продакшн.

По тем же причинам, по которым модульные тесты запускаются в CI, чтобы предотвратить регрессии функций, тесты производительности должны быть запущены в CI с Bencher, чтобы предотвратить регрессии производительности. Ошибки производительности – это тоже ошибки!

Шаги для Bencher Cloud

  1. Создайте учетную запись Bencher Cloud.
  2. Создайте API-токен и добавьте его в ваш CI как секрет.
  3. Создайте рабочий процесс для вашего CI, как GitHub Actions или GitLab CI/CD.
  4. Установите Bencher CLI в вашем рабочем процессе CI.
  5. Запустите ваши тесты производительности с помощью bencher run подкоманды в вашем рабочем процессе CI, используя адаптер python_pytest.

Шаги для Bencher Self-Hosted

  1. Создайте экземпляр Bencher Self-Hosted.
  2. Зарегистрируйте аккаунт на вашем экземпляре Bencher Self-Hosted.
  3. Создайте API токен и добавьте его в CI как секрет.
  4. Создайте рабочий процесс для вашего CI, например GitHub Actions или GitLab CI/CD.
  5. Установите Bencher CLI в ваш CI рабочий процесс. Убедитесь, что версия CLI соответствует версии вашего экземпляра Bencher Self-Hosted.
  6. Запустите ваши бенчмарки с помощью bencher run подкоманды в вашем CI рабочем процессе, используя адаптер python_pytest и указывая опцию --host на URL вашего экземпляра Bencher Self-Hosted.

🐍 Python Pytest

Адаптер Python Pytest (python_pytest) ожидает вывод pytest-benchmark в формате JSON (то есть --benchmark-json results.json). Этот вывод в формате JSON сохраняется в файл, поэтому вы должны использовать аргумент --file командной строки bencher run, чтобы указать путь к этому файлу. Собирается мера latency (то есть наносекунды (ns)).

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

Существует два варианта для Метрики:

  • mean (по умолчанию): lower_value и upper_value находятся на одно стандартное отклонение ниже и выше среднего значения (то есть value) соответственно.
  • median: lower_value и upper_value находятся в одном межквартильном интервале ниже и выше медианы (то есть value) соответственно.

Это может быть указано в подкоманде CLI bencher run с помощью необязательного аргумента --average.

Отслеживайте свои бенчмарки в CI

Когда-либо ли у вас была регрессия производительности, повлиявшая на ваших пользователей? Bencher мог бы предотвратить это с помощью н kontinuierlichem Benchmarking.

🤖 Этот документ был автоматически создан OpenAI GPT-4. Оно может быть неточным и содержать ошибки. Если вы обнаружите какие-либо ошибки, откройте проблему на GitHub.