Perfscale: репортеры, новые режимы Pub/Sub и отдельные агенты для pro-модулей
В Perfscale появились JUnit и HTML-отчёты, WASM-репортеры, новые режимы Pub/Sub и обновления для баз данных и pro-модулей.
В новом выпуске Perfscale автор сосредоточился на отчётности, нагрузочном тестировании Pub/Sub и оптимизации поставки pro-модулей. Релиз агента 0.6.0 уже собран, но его публикация задержалась из-за исчерпанного лимита минут GitHub Actions. Чтобы не блокировать выпуск, лимиты пришлось увеличить; в будущем автор рассматривает переход на собственный раннер.

Репортеры для CI и менеджеров
Раньше результаты прогона отображались в консоли и в интерфейсе perfscale serve. Для получения JUnit- или HTML-отчёта пользователям приходилось самостоятельно обрабатывать JSON. Теперь в конфигурации появилась секция reporters, а все встроенные и внешние репортеры используют единую модель report@v1. Она содержит идентификатор прогона, агрегаты по шагам, thresholds и при необходимости сырые сэмплы.
Репортер JUnit превращает каждое выражение из thresholds в отдельный тестовый случай. Благодаря этому CI показывает конкретный нарушенный порог, а не только завершение команды с кодом exit 1. Репортер std/report/html@v1 формирует единый HTML-файл в тёмной теме. В него не подгружаются CDN, внешние шрифты и другие зависимости, поэтому отчёт можно прикрепить к задаче в трекере или отправить по электронной почте.
JSON-репортер теперь умеет отправлять отчёт по HTTP. В заголовках поддерживается подстановка переменных вида ${VAR}: значения подставляются на хосте и не записываются в логи.
WASM-репортеры
Если встроенных форматов недостаточно, репортер можно написать как WASM-компонент perfscale:reporter@0.1.0. В TypeScript SDK @perfscale/library-sdk появились функция defineReporter и сборка с параметром --kind reporter. В качестве примера внешнего решения опубликован perfscale/allure2-reporter, который конвертирует модель report@v1 в результаты Allure.
Для снижения задержки в конце прогона скомпилированные WASM-модули кэшируются. Каждый репортер компилируется один раз, а команда perfscale install позволяет заранее прогреть кэш для установленного репортера или локального пути.
Pub/Sub и сравнение с k6
Ранее модуль std/pubsub@v1 открывал соединение с брокером на каждой итерации. Такой режим подходит для оценки того, сколько клиентов выдержит брокер, но искажает измерение пропускной способности. Теперь параметр scope: vu позволяет использовать одно соединение на VU в течение всего прогона. Режим scope: exchange с новым соединением на каждую итерацию остаётся значением по умолчанию.
Параметр flush: none отключает ожидание подтверждения публикации от брокера. По умолчанию используется flush: message, при котором Perfscale ждёт ACK. Также добавлены метрики pubsub_publish_ms, pubsub_errors и pubsub_connect_ms; последняя показывает стоимость установки соединения.
В ежедневный бенчмарк добавили сравнение Pub/Sub с NATS. Для сопоставления использовался k6 со сборкой xk6 + xk6-nats, поскольку в стандартном k6 поддержки NATS нет. В тесте с 10 VU, длительностью 10 секунд и сообщениями примерно по 256 байт Perfscale в режиме подключения на каждой итерации оказался быстрее и потреблял примерно вдвое меньше CPU на сообщение.
В режиме с постоянным соединением и ожиданием подтверждения Perfscale был медленнее k6, что ожидаемо: xk6-nats не ждёт ACK. При отключённом ожидании подтверждения результат Perfscale составил 348 тысяч сообщений в секунду против 141 тысячи у k6, при этом потребление памяти было примерно в семь раз ниже. Из бенчмарка исключили сценарии, в которых генератор нагрузки и тестируемый сервис работали в одном процессе, поскольку это давало некорректно высокий RPS.
Базы данных и варианты агента
Для модулей std/db-* появился аналогичный режим scope: vu для сохранения соединения между итерациями. Добавлены параметры prepared: true для prepared statements и store_rows: false, позволяющий считать строки без их материализации.
В текущих тестах без prepared statements Perfscale пока уступает k6. При их использовании он опережает сравниваемые решения, а p95 уменьшается почти вдвое. Автор отмечает, что оптимизация этого направления продолжается.
Для pro-модулей — включая SOAP, FIX, LLM, Pub/Sub, WebRTC и shared Redis — теперь собираются отдельные варианты агента. Их список находится в файле variants.json. В админке на странице машины появился раздел pro-модулей: нужный вариант можно установить через self-update агента, без ручного копирования файлов.
Документация доступна в репозитории и во вкладке Docs интерфейса perfscale serve --ui. Установить Perfscale можно через GitHub Releases или командой npm i -g @perfscale/exe.

Сообщить о проблеме в публикации
Обращение принято Обращение будет рассмотрено. По результатам проверки публикация может быть исправлена, дополнена, временно скрыта или удалена.