Что обычно измеряет тестирование производительности UI
Первичную загрузку: время до первой отрисовки, время до интерактивности, размер бандла. Для первого визита это действительно важно, существующие инструменты закрывают эту задачу хорошо, и в основном это разовая цена за сессию.
Что на самом деле замечают пользователи
Задержка отклика на действия
Промежуток между кликом и моментом, когда что-то заметно происходит.
В отличие от загрузки, случается сотни раз за сессию.
Воспринимаемая отзывчивость
Дал ли интерфейс хоть какой-то отклик на действие.
Спиннер через 100 мс ощущается быстрее, чем тишина в течение 400 мс, хотя по факту это медленнее.
Деградация при росте данных
Нормально на десяти строках, непригодно на двух тысячах.
На чистом тестовом окружении этого не видно.
Чаще всего в продакшн просачивается именно третье: тестовые окружения маленькие, а аккаунты клиентов — нет.
Измерение, которое важно и которого обычно нет
Прогоните тот же сценарий на наборе данных реалистичного объёма. Это не нагрузочный тест: всего один пользователь и аккаунт с таким объёмом данных, какой бывает у настоящего клиента. Список, который рендерится за 80 миллисекунд на десяти строках и за четыре секунды на двух тысячах, — это дефект, и никакое нагрузочное тестирование на чистом окружении его не покажет.
Почему и здесь корректность идёт первой
Интерфейс, который отрисовывается мгновенно, потому что запрос молча упал, — не быстрый. Прежде чем что-то измерять, убедитесь, что сценарий делает то, что должен, и только потом измеряйте, сколько времени на это уходит. В обратном порядке вы получите уверенные цифры о сломанном экране.
Наполненный данными аккаунт, который никто не поддерживает
Почти всё, что рекомендуется на этой странице, упирается в наличие окружения с реалистичными данными, и стоит прямо разобрать, почему у команд его нет.
Наполнить такой аккаунт данными легко. Сохранять его реалистичным — нет: схема меняется, скрипт наполнения устаревает, и через два квартала он создаёт аккаунт, который уже ни на что не похож. В этот момент ему перестают доверять и возвращаются к тестам на десяти строках.
Выживает тот вариант, который генерируется по форме продакшена, а не по фиксированному скрипту: возьмите распределение количества записей в реальных аккаунтах и соберите тестовый аккаунт на девяностом процентиле этого распределения. Его нужно время от времени перегенерировать, а не поддерживать постоянно, и он остаётся честным, потому что выведен из того, что реально есть у ваших клиентов.
Регрессии важнее абсолютных значений
Абсолютные цели, позаимствованные из бенчмарков, редко переносятся на ваш продукт. Отслеживайте собственные цифры на одном и том же окружении и следите за их движением. Полезное оповещение — это то, что сценарий стал медленнее за эту неделю, а не то, что он превысил число, которое кто-то выбрал.
Терминал
npm install -g @testsprite/testsprite-cli
testsprite setup
Дашборд закрывает то же самое для тех, кто не хочет ставить ничего локально, а полный набор команд — в репозитории CLI.
Если пайплайн принадлежит другой команде, то GitHub App — путь наименьшего сопротивления: это вебхук, он ничего не меняет в вашем репозитории и срабатывает, когда сборка сообщает, что новая версия развёрнута. Если же вы хотите видеть проверку прямо в репозитории, с этим справится шаг GitHub Actions .
Что TestSprite проверяет в первую очередь
Корректность — без неё любая цифра производительности ничего не значит. Интерфейс, который отрисовывается мгновенно, потому что запрос молча упал, покажет прекрасный результат, и именно такой сбой здесь и ловится.
Покрытие генерируется по вашему продукту и прогоняется по развёрнутому приложению при каждом изменении — в том числе на аккаунте, наполненном данными реалистичного объёма, где и проявляется та деградация, которая доходит до продакшена.
Замеры времени и профилирование остаются за специализированными инструментами. Здесь вы получаете уверенность в том, что измеряемый сценарий рабочий, и ранний сигнал, когда список перестаёт масштабироваться, — потому что меняется поведение, а не только тайминги.
Измеряет ли TestSprite производительность UI?
Он проверяет, что сценарии работают корректно, а это необходимая предпосылка. Замеры времени и профилирование — отдельный инструмент.
Какую метрику отслеживать первой?
Задержку отклика на трёх самых частых действиях, на аккаунте реалистичного объёма. Она ближе к реальной жалобе, чем время загрузки.
Как получить реалистичные объёмы данных?
Наполните тестовый аккаунт до размеров крупного клиента и сохраните его. Эти усилия окупятся в первый же раз, когда он поймает список, переставший масштабироваться.
Стоит ли специально работать над воспринимаемой производительностью?
Да, и это дёшево. Мгновенное подтверждение действия меняет впечатление сильнее, чем выигранные реальные миллисекунды.
Должна ли производительность блокировать релиз?
Сильная регрессия на частом взаимодействии — да. Небольшой разброс — нет, иначе всё время уйдёт на подкрутку порогов.
Пользователи жалуются на взаимодействие, а не на загрузку.
Тестирование производительности UI обычно измеряет загрузку страницы и упускает задержку отклика и деградацию на реальных объёмах данных. Сначала проверьте корректность, измеряйте на аккаунте реалистичного объёма и следите за собственным трендом, а не за позаимствованными целевыми значениями.