Perfscale news #5. SQL, thresholds и оптимизации
Об авторе, кто он такой и что делает можно почитать тут. Пост специально открыт для всех, чтобы не было проблем с разным уровнем доступа.
Приветствую, любители нагрузки. Для истории прошлые выпуски
- Новости Perfscale № 1
- Perfscale news #2: Fix Protocol, Magic metrics и MCP
- perfscale news #3 Websocket, Inference, NPM
- Perfscale news #4. GRPC, Fixed Triggers, Child Process
Итак, эту неделю открывают новости по OSS проекту — perfscale oss.
Perfscale OSS (open source software)
SQL
Да, вы не ослышались. Теперь даже в OSS движке вы можете написать что-то такое
# db.config.yaml vus: 5 duration: 30s variables: db_dsn: postgres://bench:secret@127.0.0.1:5432/bench
Ну а в самом тесте, что-то такое
steps:
- name: connect
uses: std/db-connect@v1
with:
driver: postgres
dsn: "${{ vars.db_dsn }}"
mode: persistent
outputs: conn
- name: begin tx
uses: std/db-tx-begin@v1
with: { id: "${{ conn.id }}" }
- name: create bench table
uses: std/db-query@v1
with:
id: "${{ conn.id }}"
query: CREATE TABLE IF NOT EXISTS bench (id TEXT, payload TEXT)
- name: insert row
uses: std/db-query@v1
with:
id: "${{ conn.id }}"
# The SQL text is never interpolated — values move through `params`.
query: INSERT INTO bench (id, payload) VALUES ($1, $2)
params: ["${{ vars.uid }}", "payload"]
- name: read it back
uses: std/db-query@v1
with:
id: "${{ conn.id }}"
query: SELECT payload FROM bench WHERE id = $1
params: ["${{ vars.uid }}"]
check:
duration_ms_lt: 50
- name: commit
uses: std/db-tx-commit@v1
with: { id: "${{ conn.id }}" }
- name: close
uses: std/db-close@v1
with: { id: "${{ conn.id }}" }
Кстати, в этом примере приведен весь жизненный цикл шага. Но никто не мешает вам переместить подключение к БД на уровень конфигурации. Это тоже будет работать.
Thresholds
Теперь в поле after для конфигурации можно писать метрики качества. Причем, если у вас сценарий, допустим для http, но написали метрики для gprc например. То метрики качества будут проигнорированы. Зато при запуске той же конфигурации, но для gprc сценария — то алерты сработают как надо.
пример конфигурации
config:
vus: 10
duration: 1m
steps:
- name: query
use: std/db-query@v1
with:
id: ${{ conn.id }}
query: SELECT * FROM orders WHERE created > $1
params: ["2026-01-01"]
after:
- name: slo gate
use: std/thresholds@v1
with:
db_query_duration: ["p95<500", "max<2000"]
db_query_failed: ["rate<0.05"]
db_errors: ["count==0"]
severity: fail # can be fail, pass, warn
message: "checkout SLO"
Кстати, message в thresholds поддерживает переменные, так что вы можете писать любое сообщение. А для controlplane стоит trim для большого текста. Будьте аккуратнее с этим.
далее, переходим к платным фичам
Controlplane (paywall)
Интеграции
Появилась интеграция с Prometheus-like (Prometheus, Victoria Metrics) как sender(perfscale -> prom) так и receiver (prom -> perfscale).

Автодополнение
Обновилось автодополнение для grpc и database. но пока только в visual editor

Я понимаю, что не всем нравится такой редактор и я экспериментирую с разными форматами отображения. Пока имеем, что имеем.
Кстати, автодополнение в YAML пока работает слабо. Думаю, что на следующей недели будет выглядеть лучше. Ведь то, что вы меняете в visual моментально отображается в yaml, это удобно и позволяет «прикинуть» сценарий.
Linked Accounts
Я сталкнулся с довольно проблематичной ошибкой для social login.
Сейчас для perfscale.ru(не путать с .su) у меня подключены 2 интеграции
- Yandex
- Gitflic
И все будет хорошо у вас, кроме того сценария, если у вас есть аккаунт в perfscale с одинаковой почтой и вы попытаетесь войти сначала через один social login, а потом и с помощью другой.
За неимением вариантов пришлось расчехлить ваибкод но получилось пока не очень. Так что пока остерегайтесь логина через yandex + gitflic при условии, что у вас тотже email используется учетной записью. Видел на некоторых проектах, когда мы можем линковать учетку между собой, но пока не успел доделать. По отдельности вход работает, поэтому я и вынес в отдельную вкладку а не в settings

И да, gitflic не стандартный OIDC провайдер, поэтому пришлось немного кода вокруг написать. Ну а кто говорил, что будет легко?)
Думаю, что с фичами немного приостановится и сконцентрироваться на техдолге, к тому же уже начинается копится определенный как технический, так и не технический долг
На сегодня все. По традиции оставляю ссылки на проект
Github проекта: https://github.com/Perfscale/perfscale
Сайт проекта: https://perfscale.ru
Сайт проекта вне РФ контура: https://perfscale.su
Документация проекта: https://perfscale.ru/docs
Мой канал: https://t.me/haradkou_sdet