Доклад на Highload++ 2016. Как автоматизировать тестирование скорости сайта. Мы будем использовать Webpagetest PI через API для построения сервиса по тестированию скорости сайтов: ускорениесайтов.рф.
4. Зачем автоматизация?
• Код приложения меняется
• Выявлять проблемы до релиза кода
• Ручное тестирование не подходит
• Контролируемое окружение
• Бюджет
5. Что мы хотим знать
• Время загрузки
• Время рендеринга
• Различие для состояния кэша
• Влияние сети
• Нет ли деградации?
• Есть ли проблемы конфигурации?
13. Patrick Meenan
• Главный разработчик WebPagetest
• Патриарх движения веб-производительности
• Много полезных видео о WPT:
https://www.youtube.com/user/patmeenan/videos
16. WebPagetest Private Instance
• То же, но на своей инфраструктуре
• Полный контроль
• Есть поддержка агентов на Amazon EC2
• Open source (BSD):
https://github.com/WPO-Foundation/webpagetest
17. Location 1
Как это работает WPT PI сервер
Тестовый агент
(Windows)
Тестовый агент
(Windows)
18. Что мы получаем из коробки
• Параметры сети
• Chrome, Firefox, IE
• Сбор метрик
• Сбор скриншотов и видео
• Очистка кэша (включая SSL, DNS)
19. Тестирование на мобильных
устройствах
• Есть поддержка Android 4.4+ (Chrome)
• Есть поддержка iOS (сырая)
• Слабо документировано
• Проблемы стабилизации
• Заменяем на эмуляцию + ограничение CPU
25. Компоненты системы
• Очередь заданий с сохранением статусов
• Сервер WPT PI
• Обработчик результатов
Очередь заданий WPT PI сервер
Тестовый агент
(Windows 7)
Обработчик
результатов
26. Сценарий использования
• Точки входа
• Бюджет (эталон)
• Тесты
• Сравнение результатов
• Если проблема – alert
• Прикладываем URL WPT
• Исправляем
27. Запрос на тестирование
• POST-запрос на http://wptdomain/runtest.php
• url — что тестировать
• location — тестовый агент (включая браузер и сеть)
• runs — количество тестов
• fvonly – тестировать только FirstView
• video — захват скриншотов и видео
• f — формат данных (XML или JSON)
30. Ситуация №1 – конфигурация и контент
• Текст отдаётся без сжатия
• Статика не кэшируется
• Нет keep-alive
• Настройки TLS?
• Картинки не оптимизированы
31. Метрики WPT — оптимизация
minify_savings, gzip_savings, image_savings (JSON)
Осторожно: image_savings рассчитывается от JPEG-качества ~70%,
уровень сжатия gzip не учитывается
Можно дополнить оценкой GPSI (png, gif, jpg)
32. Метрики WPT — трафик по типам
breakdown→(css|html|js|font|image)->bytes (JSON)
39. Метрики WPT — Speed Index
Speed Index (SpeedIndex — JSON) – чем меньше, тем лучше
𝑆𝑝𝑒𝑒𝑑𝐼𝑛𝑑𝑒𝑥 =
0
𝑒𝑛𝑑
1 −
𝑉𝐶
100
40. Ситуация №4 – зависимость от внешних API
• Нет стабильности результатов
• Внешние ресурсы (JS API, счетчики, виджеты)
Решение
• Блокируем запросы по хостам
• Параметр block (хосты через пробел)
• Локальный кэш
41.
42. Ситуация №5 – CPU-bound
• Большое количество DOM-элементов, JS
• Сложный рендеринг
Решение
• Снимаем ограничение сети
• Увеличиваем количество прогонов
43. Метрики WPT — CPU
docCPUms (JSON) — затраты CPU на частичную загрузку
fullyLoadedCPUms (JSON) — затраты CPU на полную загрузку
docCPUpct, fullyLoadedCPUpct (JSON) – средний процент CPU
cpuTimes, cpuTimesDoc (JSON) – время CPU из DevTools timeline
44. Метрики WPT - DOM
domContentLoadedEventStart,
domContentLoadedEventEnd (JSON) – начало и конец события
domContentLoaded
45. Метрики WPT — load event
Load Time (loadTime — JSON) – время до начала события load
Включает в себя время TTFB (First Byte).
Чтобы исключить, можно использовать: loadTime — TTFB
46. Добавляем кастомные метрики
• Для одного запуска (параметр custom)
[iframe-count]
return document.getElementsByTagName("iframe").length;
[script-tag-count]
return document.getElementsByTagName("script").length;
• Постоянные метрики (в settings/custom_metrics/iframe-count.js)
47. Проблемы WPT PI (1)
Нестабильность результатов
• увеличение количества прогонов
• использование медианного варианта теста
• оптимизация Windows тестового агента
• расположение агента рядом с приложением
• блокирование запросов на внешние сервисы
48. Проблемы WPT PI (2)
Ресурсоёмкость проведения тестов
• Распределяем нагрузку на несколько агентов (сами)
• Меняем настройки тестов (убираем захват видео, количество
прогонов, скорость сети)
Безопасность и обслуживание
• Обновление агентов (обязательно, регулярно)
• Обновление Windows
• Мониторинг (зависшие агенты — перезагрузка)
49. Подходит
• Внутренний мониторинг скорости
• Сравнение с конкурентами
• Тестирование изменений, технологий
• Оценка уровня оптимизации
50. Не подходит
• Тестирование микроизменений (до 200 мс)
• Тестирование серверной производительности
• Нагрузочное тестирование, эмуляция действий реальных
пользователей