История Ивана Капкова: эмиграция, внутренний кризис и трагический финал ITMS объявила о смене названия на BFT Музыкальные сервисы начали менять названия и тексты песен из-за новых требований закона Том Уэллинг стал героем вирусного обсуждения после публикации фото из отеля Эмулятор KytyPS5 запустили на Xbox в режиме разработчика Что такое «Mar-a-Lago face» и почему в нём увидели политический стиль Кабардино-Балкарский высокогорный заповедник: ледники, экотропы и Дыхтау Семья Ивана Гудкова предупредила о мошенническом сборе денег на похороны «Девочка из 90-ых»: как семейный проект стал интернет-хитом В Нигерии умерла актриса и победительница конкурса красоты Тения Абрахам «Ставка на любовь»: кто участвовал в первом выпуске третьего сезона и какая пара ушла Конор Кеннеди и Джулия Бе сыграли свадьбу в Рио-де-Жанейро Игра Cancel Your Subscription превращает отмену подписки в испытание Юра Борисов стал членом Американской киноакадемии накануне премьеры в Лондоне Александр Цыпкин представил «Файл Надежды» — историю любви в эпоху нейросетей Перчатки как главный аксессуар сезона: тренды осени и зимы 2026/2027 Николай Басков отметил 50-летие двумя концертами в Live Арене В OpenCode временно открыли бесплатный доступ к GLM 5.3 Flash и DeepSeek V4.1 Flash Дженнифер Лопес и Кит Урбан сблизились после разводов, утверждают инсайдеры Максим Лагашкин и Екатерина Стулова: почти 30 лет вместе, театр, кино и семейные увлечения
Лента новостей
Технологии

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

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

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

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

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

Репортеры для 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.

Perfscale: репортеры, новые режимы Pub/Sub и отдельные агенты для pro-модулей
Фото: Хабр
Источник