Быстрый Старт
Что такое Bencher?
Bencher - это набор инструментов для непрерывного тестирования производительности. Когда-нибудь регрессия производительности влияла на ваших пользователей? Bencher мог бы предотвратить это. Bencher позволяет вам обнаруживать и предотвращать регрессии производительности до того, как они попадут в продакшн.
- Запустить: Запустите свои тесты производительности локально или в CI, используя ваши любимые инструменты для этого. CLI
bencherпросто оборачивает ваш существующий аппарат тестирования и сохраняет его результаты. - Отслеживать: Отслеживайте результаты ваших тестов производительности со временем. Мониторите, запрашивайте и строите графики результатов с помощью веб-консоли Bencher на основе ветки исходного кода, испытательного стенда и меры.
- Поймать: Отлавливайте регрессии производительности в CI. Bencher использует инструменты аналитики, работающие по последнему слову техники, чтобы обнаружить регрессии производительности, прежде чем они попадут в продакшн.
По тем же причинам, по которым модульные тесты запускаются в CI, чтобы предотвратить регрессии функций, тесты производительности должны быть запущены в CI с Bencher, чтобы предотвратить регрессии производительности. Ошибки производительности – это тоже ошибки!
Установка CLI bencher
Linux, Mac и Unix
Для систем Linux, Mac и других систем, подобных Unix, выполните следующее в вашем терминале:
curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | shWindows
Для систем Windows выполните следующее в терминале PowerShell:
irm https://bencher.dev/download/install-cli.ps1 | iex🐰 Если вы получаете ошибку, которая говорит
запуск скриптов отключен на этой системе:
Откройте PowershellсЗапуск от имени администратора- Выполните:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned- Введите:
Y- Запустите этот скрипт заново
Для дополнительных вариантов установки смотрите как установить CLI bencher.
Теперь давайте проверим, что у нас установлен CLI bencher.
Запустите: bencher --version
Вы должны увидеть:
$ bencher --versionbencher 0.5.0Создайте аккаунт в Bencher Cloud
Bencher - это открытое и само-хостимое программное обеспечение. Если вас интересует само-хостинг, ознакомьтесь с учебником по Docker для Bencher. Но для этого учебника мы будем использовать Bencher Cloud.
Зарегистрируйтесь в Bencher Cloud
После создания аккаунта, вам нужно будет подтвердить свой адрес электронной почты. Проверьте свою почту на наличие ссылки для подтверждения. После этого вы должны быть вошли в систему в Bencher Cloud.
Создание токена 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 соответственно.
Вы должны увидеть:
$ echo $BENCHER_API_TOKENYOUR_TOKEN🐰 Примечание: Если вы перейдете в другой терминал, вам нужно будет снова экспортировать токен API.
Создайте проект
Теперь, когда у нас есть учетная запись пользователя и API токен, мы можем создать проект. Сначала нам нужно знать, к какой организации принадлежит наш новый проект.
Запустите: bencher org list
Вы должны увидеть что-то вроде:
$ bencher org list[ { "name": "Saul Goodman", "slug": "saul-goodman", "uuid": "4581feb0-6cac-40a9-bd8a-d7865183b01e" "created": "2022-07-06T11:24:36Z", "modified": "2022-07-06T11:24:36Z" }]Ваш вывод должен немного отличаться от приведенного выше:
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
Вы должны увидеть что-то вроде:
$ bencher project create saul-goodman --name "Save Walter White" --url http://www.savewalterwhite.com{ "organization": "4581feb0-6cac-40a9-bd8a-d7865183b01e", "name": "Save Walter White", "slug": "save-walter-white-1234abcd", "uuid": "c6c2a8e8-685e-4413-9a19-5b79053a71b1" "url": "http://www.savewalterwhite.com", "public": true, "created": "2022-07-06T11:36:24Z", "modified": "2022-07-06T11:36:24Z"}Снова, ваш вывод должен немного отличаться от приведенного выше.
Главное, чтобы эта команда работала.
Отметьте поле slug проекта (например, save-walter-white-1234abcd).
Запустите отчет
Наконец, мы готовы собрать некоторые показатели нагрузочных тестов! Для простоты в этом учебнике мы будем использовать фиктивные данные.
Запустите: bencher mock
Вы должны увидеть что-то вроде:
$ bencher mock{ "bencher::mock_0": { "latency": { "value": 3.7865423396154463, "lower_value": 3.4078881056539014, "upper_value": 4.165196573576991 } }, "bencher::mock_1": { "latency": { "value": 16.398332128878437, "lower_value": 14.758498915990593, "upper_value": 18.03816534176628 } }, "bencher::mock_2": { "latency": { "value": 20.88091359871672, "lower_value": 18.792822238845048, "upper_value": 22.969004958588393 } }, "bencher::mock_3": { "latency": { "value": 33.88103801203782, "lower_value": 30.492934210834036, "upper_value": 37.2691418132416 } }, "bencher::mock_4": { "latency": { "value": 40.90515638867921, "lower_value": 36.81464074981129, "upper_value": 44.99567202754713 } }}Ваш вывод должен отличаться от приведенного выше, так как данные псевдослучайные. Главное, чтобы эта команда работала.
Теперь давайте запустим отчет с использованием фиктивных данных нагрузочного измерения.
Подставьте slug вашего проекта для аргумента --project (то есть YOUR_PROJECT_SLUG) в команду ниже.
Запустите: bencher run --project YOUR_PROJECT_SLUG "bencher mock"
Вы должны увидеть что-то вроде:
$ bencher run --project save-walter-white-1234abcd "bencher mock"{ "bencher::mock_0": { "latency": { "value": 0.15496641529475275, "lower_value": 0.13946977376527747, "upper_value": 0.17046305682422802 } }, "bencher::mock_1": { "latency": { "value": 18.648298578180437, "lower_value": 16.783468720362393, "upper_value": 20.513128435998482 } }, "bencher::mock_2": { "latency": { "value": 28.20328182167366, "lower_value": 25.382953639506294, "upper_value": 31.023610003841025 } }, "bencher::mock_3": { "latency": { "value": 34.45732560787596, "lower_value": 31.01159304708836, "upper_value": 37.903058168663556 } }, "bencher::mock_4": { "latency": { "value": 44.9237520767597, "lower_value": 40.43137686908373, "upper_value": 49.41612728443567 } }}
View results:- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=88375e7c-f1e0-4cbb-bde1-bdb7773022ae- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=e81c7863-cc4b-4e22-b507-c1e238871137- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=31dede44-d23a-4baf-b639-63f2ac742e42- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=c7e32369-f3dd-473d-99a3-6289ae32b38e- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/perf?measures=4358146b-b647-4869-9d24-bd22bb0c49b5&branches=95521eff-09fa-4c02-abe1-dd824108869d&testbeds=5b4a6f3e-a27d-4cc3-a2ce-851dc6421e6e&benchmarks=779bc477-4964-4bae-aa8c-4da3e388822cТеперь вы можете увидеть результаты каждого теста в браузере.
Нажмите или скопируйте и вставьте ссылки из View results.
Там должна быть только одна точка данных для каждого теста, поэтому давайте добавим больше данных!
Во-первых, давайте установим наш slug проекта в качестве переменной среды, чтобы мы не должны были его предоставлять с --project при каждом запуске.
Запустите: export BENCHER_PROJECT=save-walter-white-1234abcd
Если вы затем запустите: echo $BENCHER_PROJECT
Вы должны увидеть:
$ echo $BENCHER_PROJECTsave-walter-white-1234abcdДавайте заново запустим ту же команду без --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:- bencher::mock_0: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b2329d5a-4471-48ab-bfbd-959d46ba1aa6- bencher::mock_1: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/181b1cf5-d984-402a-b0f1-68f6f119fa66- bencher::mock_2: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/b9b6c904-c657-4908-97db-dbeca40f8782- bencher::mock_3: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/5567ff32-2829-4b6a-969a-af33ce3828db- bencher::mock_4: https://bencher.dev/console/projects/save-walter-white-1234abcd/alerts/49f2768f-ccda-4933-8e1d-08948f57a74dТеперь вы можете увидеть оповещения для каждого теста в браузере.
Нажмите или скопируйте и вставьте ссылки из View alerts.
🐰 Совет: Ознакомьтесь с документацией по порогам и оповещениям для полного обзора того, как обнаруживаются регрессии производительности!
🐰 Поздравляем! Вы поймали свою первую регрессию производительности! 🎉