# Perfscale: репортеры, новые режимы Pub/Sub и отдельные агенты для pro-модулей

> Источник: 404 Media. Канонический URL: https://404-media.ru/tehnologii/perfscale-reportery-novye-rezhimy-pub-sub-i-otdelnye-agenty-dlya-pro-moduley

В Perfscale появились JUnit и HTML-отчёты, WASM-репортеры, новые режимы Pub/Sub и обновления для баз данных и pro-модулей.

- Рубрика: Технологии (https://404-media.ru/tehnologii)
- Опубликовано: 2026-10-23T21:45:14+03:00
- HTML: https://404-media.ru/tehnologii/perfscale-reportery-novye-rezhimy-pub-sub-i-otdelnye-agenty-dlya-pro-moduley
- Markdown: https://404-media.ru/tehnologii/perfscale-reportery-novye-rezhimy-pub-sub-i-otdelnye-agenty-dlya-pro-moduley.md
- llms.txt: https://404-media.ru/llms.txt

![Perfscale: репортеры, новые режимы Pub/Sub и отдельные агенты для pro-модулей](https://storage.yandexcloud.net/404-media/media/2026/10/YijbmeollpbS1hCk5eLpQlJvvtgHFAfr1wNcg6XS.png)

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

![Perfscale: репортеры, новые режимы Pub/Sub и отдельные агенты для pro-модулей](https://storage.yandexcloud.net/404-media/media/2026/10/t3AoLpSDZ15CUcHrhbZ9UfDMW99KkMX4MIaikRTq.png)

Фото: Хабр

## Репортеры для 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**. В админке на странице [машины](/avto) появился раздел pro-модулей: нужный вариант можно установить через self-update агента, без ручного копирования файлов.

Документация доступна в репозитории и во вкладке Docs интерфейса *perfscale serve --ui*. Установить Perfscale можно через GitHub Releases или командой **npm i -g @perfscale/exe**.

![Perfscale: репортеры, новые режимы Pub/Sub и отдельные агенты для pro-модулей](https://storage.yandexcloud.net/404-media/media/2026/10/CyRiH0ErI3lsv3WwAmON8GeKnGjFwh2BPudnBnbw.webp)

Фото: Хабр
