Быстрый старт с Bencher на собственном хосте с Docker
Что такое Bencher?
Bencher - это набор инструментов для непрерывного тестирования производительности. Когда-нибудь регрессия производительности влияла на ваших пользователей? Bencher мог бы предотвратить это. Bencher позволяет вам обнаруживать и предотвращать регрессии производительности до того, как они попадут в продакшн.
- Запустить: Запустите свои тесты производительности локально или в CI, используя ваши любимые инструменты для этого. CLI
bencher
просто оборачивает ваш существующий аппарат тестирования и сохраняет его результаты. - Отслеживать: Отслеживайте результаты ваших тестов производительности со временем. Мониторите, запрашивайте и строите графики результатов с помощью веб-консоли Bencher на основе ветки исходного кода, испытательного стенда и меры.
- Поймать: Отлавливайте регрессии производительности в CI. Bencher использует инструменты аналитики, работающие по последнему слову техники, чтобы обнаружить регрессии производительности, прежде чем они попадут в продакшн.
По тем же причинам, по которым модульные тесты запускаются в CI, чтобы предотвратить регрессии функций, тесты производительности должны быть запущены в CI с Bencher, чтобы предотвратить регрессии производительности. Ошибки производительности – это тоже ошибки!
Bencher Self-Hosted
Bencher является открытым исходным кодом и может быть самостоятельно размещён. Если вас интересует использование Bencher Cloud, ознакомьтесь с руководством по быстрому старту Bencher Cloud. Это руководство поможет вам настроиться для использования Bencher Self-Hosted с Docker.
🐰 Как только вы почувствуете себя уверенно, используя Bencher Self-Hosted, рекомендуем ознакомиться со следующими ресурсами:
Установка Docker
Для запуска серверов UI и API в этом руководстве вам потребуется установленный docker
.
Проверьте, установлен ли у вас docker
.
Выполните: docker --version
Вы должны увидеть что-то вроде:
Вполне нормально, если номер вашей версии отличается. Главное, чтобы эта команда работала.
Если нет, следуйте инструкциям по установке docker
.
Установка CLI bencher
Linux, Mac и Unix
Для систем Linux, Mac и других систем, подобных Unix, выполните следующее в вашем терминале:
Windows
Для систем Windows выполните следующее в терминале PowerShell:
🐰 Если вы получаете ошибку, которая говорит
запуск скриптов отключен на этой системе
:
Откройте Powershell
сЗапуск от имени администратора
- Выполните:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
- Введите:
Y
- Запустите этот скрипт заново
Для дополнительных вариантов установки смотрите как установить CLI bencher
.
Теперь давайте проверим, что у нас установлен CLI bencher
.
Запустите: bencher --version
Вы должны увидеть:
Запуск серверов Bencher UI & API
С установленным docker
, мы можем теперь запустить серверы UI и API.
Выполнить: bencher up
Вы должны увидеть что-то вроде:
Еще раз, это нормально, если ваш вывод отличается. Главное, что эта команда работает.
🐰 Если вы получите ошибку от
ghcr.io
с сообщением:"authentication required"
Попробуйте выполнить:docker logout ghcr.io
🐰 На Windows, если вы получите ошибку с сообщением:
image operating system "linux" cannot be used on this platform: operating system is not supported
Попробуйте выполнить:& 'C:\Program Files\Docker\Docker\DockerCli.exe' -SwitchLinuxEngine
Логи сервера Bencher API
Поскольку мы еще не настроили email/SMTP на сервере API,
коды подтверждения, которые вы получите позже в уроке, будут в логах сервера, как показано выше.
То есть, учетные данные для аутентификации будут показаны в выводе bencher up
.
Установка хоста Bencher
Хост CLIbencher
по умолчанию - это Bencher Cloud (т.е. https://api.bencher.dev).
Поэтому нам нужно установить ваше имя хоста. Самый простой способ это сделать - с помощью переменной окружения BENCHER_HOST
.
Откройте новое окно терминала.
На Linux, Mac и других подобных Unix системах выполните: export BENCHER_HOST=http://localhost:61016
На Windows выполните: $env:BENCHER_HOST = "http://localhost:61016"
Если вы затем выполните echo $BENCHER_HOST
или Write-Output $env:BENCHER_HOST
соответственно.
Вы должны увидеть:
Создание аккаунта Bencher Self-Hosted
Регистрация на Bencher Self-Hosted
Создайте аккаунт на вашем локальном экземпляре Bencher Self-Hosted, перейдя по следующей ссылке: http://localhost:3000/auth/signup
После создания аккаунта вернитесь в терминал, где вы запускали bencher up
.
Вы должны увидеть что-то похожее:
Перейдите по ссылке Подтвердить Email
в вашем браузере или скопируйте Токен подтверждения
в поле Подтвердить токен
на следующей странице: http://localhost:3000/auth/confirm
После этого вы должны быть войти в свой аккаунт на Bencher Self-Hosted!
Создание токена API
Чтобы использовать API Bencher, вам нужно создать токен API.
Перейдите в Bencher Console.
Наведите указатель мыши на свое имя в правом верхнем углу.
Появится выпадающее меню. Выберите Токены
.
На странице Токены API нажмите кнопку ➕ Добавить
.
Добавить токен API
После создания вашего нового токена API, вам нужно скопировать его в буфер обмена. В терминале, в котором вы планируете работать, экспортируйте токен API как переменную окружения.
На Linux, Mac и других системах типа Unix выполните: export BENCHER_API_TOKEN=YOUR_TOKEN
На Windows выполните: $env:BENCHER_API_TOKEN = "YOUR_TOKEN"
Если вы затем выполните echo $BENCHER_API_TOKEN
или Write-Output $env:BENCHER_API_TOKEN
соответственно.
Вы должны увидеть:
🐰 Примечание: Если вы перейдете в другой терминал, вам нужно будет снова экспортировать токен API.
Создайте проект
Теперь, когда у нас есть учетная запись пользователя и API токен, мы можем создать проект. Сначала нам нужно знать, к какой организации принадлежит наш новый проект.
Запустите: bencher org list
Вы должны увидеть что-то вроде:
Ваш вывод должен немного отличаться от приведенного выше:
uuid
является псевдослучайнымname
иslug
будут основаны на вашем имени пользователяcreated
иmodified
метки времени будут от того момента, когда вы только что зарегистрировались
Теперь мы можем создать новый проект внутри вашей организации.
Подставьте slug
вашей организации для аргумента organization
(например, YOUR_ORG_SLUG
) в приведенную ниже команду.
Запустите: bencher project create YOUR_ORG_SLUG --name "Save Walter White" --url http://www.savewalterwhite.com
Вы должны увидеть что-то вроде:
Снова, ваш вывод должен немного отличаться от приведенного выше.
Главное, чтобы эта команда работала.
Отметьте поле slug
проекта (например, save-walter-white-1234abcd
).
Запустите отчет
Наконец, мы готовы собрать некоторые показатели нагрузочных тестов! Для простоты в этом учебнике мы будем использовать фиктивные данные.
Запустите: bencher mock
Вы должны увидеть что-то вроде:
Ваш вывод должен отличаться от приведенного выше, так как данные псевдослучайные. Главное, чтобы эта команда работала.
Теперь давайте запустим отчет с использованием фиктивных данных нагрузочного измерения.
Подставьте slug
вашего проекта для аргумента --project
(то есть YOUR_PROJECT_SLUG
) в команду ниже.
Запустите: bencher run --project YOUR_PROJECT_SLUG "bencher mock"
Вы должны увидеть что-то вроде:
Теперь вы можете увидеть результаты каждого теста в браузере.
Нажмите или скопируйте и вставьте ссылки из View results
.
Там должна быть только одна точка данных для каждого теста, поэтому давайте добавим больше данных!
Во-первых, давайте установим наш slug
проекта в качестве переменной среды, чтобы мы не должны были его предоставлять с --project
при каждом запуске.
Запустите: export BENCHER_PROJECT=save-walter-white-1234abcd
Если вы затем запустите: echo $BENCHER_PROJECT
Вы должны увидеть:
Давайте заново запустим ту же команду без --project
, чтобы сгенерировать больше данных.
Запустите: bencher run "bencher mock"
Теперь давайте сгенерируем больше данных, но на этот раз мы будем передавать наши результаты в bencher run
.
Запустите: bencher mock | bencher run
Иногда вы можете захотеть сохранить свои результаты в файл и позволить bencher run
их выбрать.
Запустите: bencher run --file results.json "bencher mock > results.json"
Также, вы можете иметь отдельный процесс, запускающий ваши тесты и сохраняющий ваши результаты в файл. Затем bencher run
просто их выберет.
Запустите: bencher mock > results.json && bencher run --file results.json
Наконец, давайте забьем много данных с использованием аргумента --iter
в bencher run
.
Запустите: bencher run --iter 16 "bencher mock"
🐰 Совет: Ознакомьтесь с документацией CLI подкоманды
bencher run
для полного обзора того, что может сделатьbencher run
!
Создайте оповещение
Теперь, когда у нас есть исторические данные для наших тестов, давайте создадим оповещение! Оповещения генерируются, когда результат теста определяется как регрессия производительности. Так что давайте моделируем регрессию производительности!
Запустите: bencher run "bencher mock --pow 8"
В конце вывода должен появиться новый раздел под названием View alerts
:
Теперь вы можете увидеть оповещения для каждого теста в браузере.
Нажмите или скопируйте и вставьте ссылки из View alerts
.
🐰 Совет: Ознакомьтесь с документацией по порогам и оповещениям для полного обзора того, как обнаруживаются регрессии производительности!
🐰 Поздравляем! Вы поймали свою первую регрессию производительности! 🎉