SlideShare a Scribd company logo
1 of 56
Автоматизация
тестирования клиентской
производительности
Лавлинский Николай,
технический директор «Метод Лаб»
О себе
• Клиентская и серверная оптимизация
• Консультации
• Ускорение сайтов
• Пропаганда скорости
1. Задача
Зачем автоматизация?
• Код приложения меняется
• Выявлять проблемы до релиза кода
• Ручное тестирование не подходит
• Контролируемое окружение
• Бюджет
Что мы хотим знать
• Время загрузки
• Время рендеринга
• Различие для состояния кэша
• Влияние сети
• Нет ли деградации?
• Есть ли проблемы конфигурации?
2. Средства
Программная эмуляция браузера
Реальный браузер
3. Готовые решения
Patrick Meenan
• Главный разработчик WebPagetest
• Патриарх движения веб-производительности
• Много полезных видео о WPT:
https://www.youtube.com/user/patmeenan/videos
4. WebPagetest
Private Instance
WebPagetest Private Instance
• То же, но на своей инфраструктуре
• Полный контроль
• Есть поддержка агентов на Amazon EC2
• Open source (BSD):
https://github.com/WPO-Foundation/webpagetest
Location 1
Как это работает WPT PI сервер
Тестовый агент
(Windows)
Тестовый агент
(Windows)
Что мы получаем из коробки
• Параметры сети
• Chrome, Firefox, IE
• Сбор метрик
• Сбор скриншотов и видео
• Очистка кэша (включая SSL, DNS)
Тестирование на мобильных
устройствах
• Есть поддержка Android 4.4+ (Chrome)
• Есть поддержка iOS (сырая)
• Слабо документировано
• Проблемы стабилизации
• Заменяем на эмуляцию + ограничение CPU
Intel Core I5-6400 vs. Samsung Galaxy S5
4 cores, 2.7 Ghz 4 cores, 2.5 Ghz
Результаты i5 vs. S5
0 500 1000 1500 2000 2500
i5-6400
Galaxy S5
DOMContentLoaded, ms
Load time, ms
Результаты i5 vs. S5
0 50 100 150 200
i5-6400
Galaxy S5
Evaluate script jQuery 3.1, ms
Evaluate script jQuery 3.1, ms
5. Автоматизация
WPT PI
RESTful API
(JSON, XML)
Компоненты системы
• Очередь заданий с сохранением статусов
• Сервер WPT PI
• Обработчик результатов
Очередь заданий WPT PI сервер
Тестовый агент
(Windows 7)
Обработчик
результатов
Сценарий использования
• Точки входа
• Бюджет (эталон)
• Тесты
• Сравнение результатов
• Если проблема – alert
• Прикладываем URL WPT
• Исправляем
Запрос на тестирование
• POST-запрос на http://wptdomain/runtest.php
• url — что тестировать
• location — тестовый агент (включая браузер и сеть)
• runs — количество тестов
• fvonly – тестировать только FirstView
• video — захват скриншотов и видео
• f — формат данных (XML или JSON)
Результаты тестов
• $ttfb = $result->{data}{median}{firstView}{TTFB};
• $render = $result->{data}{median}{firstView}{render};
• $loadtime = $result->{data}{median}{firstView}{loadTime};
• $full_load = $result->{data}{median}{firstView}{fullyLoaded};
6. Практика
применения
Ситуация №1 – конфигурация и контент
• Текст отдаётся без сжатия
• Статика не кэшируется
• Нет keep-alive
• Настройки TLS?
• Картинки не оптимизированы
Метрики WPT — оптимизация
minify_savings, gzip_savings, image_savings (JSON)
Осторожно: image_savings рассчитывается от JPEG-качества ~70%,
уровень сжатия gzip не учитывается
Можно дополнить оценкой GPSI (png, gif, jpg)
Метрики WPT — трафик по типам
breakdown→(css|html|js|font|image)->bytes (JSON)
Метрики WPT — полная загрузка
Fully Loaded (fullyLoaded — JSON) – измеряется WPT
Fully Loaded Bytes In (bytesIn — JSON)
bytesOut (JSON)
Ситуация №2 – блокировка рендеринга
• Синхронный внешний JS в <head>
• CSS
• Шрифты
Метрики WPT — рендеринг
Start Render (render — JSON) – измеряется WPT
RUM Furst Paint (firstPaint — JSON) —вычисляется браузером
Ситуация №3 – сложный случай
Метрики WPT — Speed Index
Speed Index (SpeedIndex — JSON) – чем меньше, тем лучше
𝑆𝑝𝑒𝑒𝑑𝐼𝑛𝑑𝑒𝑥 =
0
𝑒𝑛𝑑
1 −
𝑉𝐶
100
Ситуация №4 – зависимость от внешних API
• Нет стабильности результатов
• Внешние ресурсы (JS API, счетчики, виджеты)
Решение
• Блокируем запросы по хостам
• Параметр block (хосты через пробел)
• Локальный кэш
Ситуация №5 – CPU-bound
• Большое количество DOM-элементов, JS
• Сложный рендеринг
Решение
• Снимаем ограничение сети
• Увеличиваем количество прогонов
Метрики WPT — CPU
docCPUms (JSON) — затраты CPU на частичную загрузку
fullyLoadedCPUms (JSON) — затраты CPU на полную загрузку
docCPUpct, fullyLoadedCPUpct (JSON) – средний процент CPU
cpuTimes, cpuTimesDoc (JSON) – время CPU из DevTools timeline
Метрики WPT - DOM
domContentLoadedEventStart,
domContentLoadedEventEnd (JSON) – начало и конец события
domContentLoaded
Метрики WPT — load event
Load Time (loadTime — JSON) – время до начала события load
Включает в себя время TTFB (First Byte).
Чтобы исключить, можно использовать: loadTime — TTFB
Добавляем кастомные метрики
• Для одного запуска (параметр custom)
[iframe-count]
return document.getElementsByTagName("iframe").length;
[script-tag-count]
return document.getElementsByTagName("script").length;
• Постоянные метрики (в settings/custom_metrics/iframe-count.js)
Проблемы WPT PI (1)
Нестабильность результатов
• увеличение количества прогонов
• использование медианного варианта теста
• оптимизация Windows тестового агента
• расположение агента рядом с приложением
• блокирование запросов на внешние сервисы
Проблемы WPT PI (2)
Ресурсоёмкость проведения тестов
• Распределяем нагрузку на несколько агентов (сами)
• Меняем настройки тестов (убираем захват видео, количество
прогонов, скорость сети)
Безопасность и обслуживание
• Обновление агентов (обязательно, регулярно)
• Обновление Windows
• Мониторинг (зависшие агенты — перезагрузка)
Подходит
• Внутренний мониторинг скорости
• Сравнение с конкурентами
• Тестирование изменений, технологий
• Оценка уровня оптимизации
Не подходит
• Тестирование микроизменений (до 200 мс)
• Тестирование серверной производительности
• Нагрузочное тестирование, эмуляция действий реальных
пользователей
7. Пример
внедрения
Ускорениесайта.рф
• Сервис тестирования скорости сайтов
• WPT PI + GPSI
• Отчет на e-mail
• 16 метрик (13+2+1)
• Трудозатраты: около 40 часов
Схема: уcкорениесайта.рф
Очередь
WPT PI
сервер
WPT агент
Google
Pagespeed
API
Отчет
(e-mail)
Обработчик
(cron)
Выводы
• Рабочее готовое решение
• Автоматизируем рутину
• Несколько вариантов использования
• Возможность расширения
Что посмотреть
WebPagetest Power Users
• https://www.youtube.com/watch?v=6UeRMMI_IzI
• https://www.youtube.com/watch?v=euVYHee1f1M
Custom metrics
• http://blog.patrickmeenan.com/2013/07/measuring-performance-of-user-experience.html
Tracking Performance
• https://www.youtube.com/watch?v=BAWpwmln6y4
DIY Synthetic - Private WebPagetest Magic
• https://www.youtube.com/watch?v=dL3Sls_MwXo
WebPagetest Private Instances
• https://www.youtube.com/watch?v=enVpzzlhTzE
• https://www.youtube.com/watch?v=loAGkDTMjtY
Спасибо за внимание!
Контакты: nick@methodlab.info
https://www.facebook.com/nick.lavlinsky
https://habrahabr.ru/users/nickmob/
https://www.methodlab.ru/
https://www.youtube.com/channel/UCH_PvxSiuETI_ecbeAmb7_w/
(Канал «Ускорение сайтов»)
Лавлинский Николай,
технический директор «Метод Лаб»

More Related Content

What's hot

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияYandex
 
JMeter и OutOfMemory. Исследовательский доклад
JMeter и OutOfMemory. Исследовательский докладJMeter и OutOfMemory. Исследовательский доклад
JMeter и OutOfMemory. Исследовательский докладSQALab
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Ontico
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на productionNikolay Sivko
 
postgresql monitoring by okmeter.io
postgresql monitoring by okmeter.iopostgresql monitoring by okmeter.io
postgresql monitoring by okmeter.ioNikolay Sivko
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестированиеSPB SQA Group
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииNikolay Sivko
 
Нагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load RunnerНагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load RunnerSQALab
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеNikolay Sivko
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаNikolay Sivko
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Javaaragozin
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Andrey Rebrov
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
Илья Евлампиев - Grinder
Илья Евлампиев - GrinderИлья Евлампиев - Grinder
Илья Евлампиев - GrinderAlexey Chumagin
 
Попасть в мишень
Попасть в мишеньПопасть в мишень
Попасть в мишеньAnton Ignatov
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиSQALab
 

What's hot (20)

Григорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестированияГригорий Липин: Автоматизация нагрузочного тестирования
Григорий Липин: Автоматизация нагрузочного тестирования
 
Uawebchallenge.yandex.tank
Uawebchallenge.yandex.tankUawebchallenge.yandex.tank
Uawebchallenge.yandex.tank
 
JMeter и OutOfMemory. Исследовательский доклад
JMeter и OutOfMemory. Исследовательский докладJMeter и OutOfMemory. Исследовательский доклад
JMeter и OutOfMemory. Исследовательский доклад
 
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
Как сделать ваш JavaScript быстрее / Роман Дворнов (Авито)
 
Жизнь проекта на production
Жизнь проекта на productionЖизнь проекта на production
Жизнь проекта на production
 
postgresql monitoring by okmeter.io
postgresql monitoring by okmeter.iopostgresql monitoring by okmeter.io
postgresql monitoring by okmeter.io
 
Нагрузочное тестирование
Нагрузочное тестированиеНагрузочное тестирование
Нагрузочное тестирование
 
Мастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатацииМастер-класс про организацию службы эксплуатации
Мастер-класс про организацию службы эксплуатации
 
Нагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load RunnerНагрузочное тестирование web-приложений с помощью Load Runner
Нагрузочное тестирование web-приложений с помощью Load Runner
 
Хорошо поддерживаемое приложение
Хорошо поддерживаемое приложениеХорошо поддерживаемое приложение
Хорошо поддерживаемое приложение
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 
Мониторинг качества работы вашего проекта
Мониторинг качества работы вашего проектаМониторинг качества работы вашего проекта
Мониторинг качества работы вашего проекта
 
Распределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на JavaРаспределённое нагрузочное тестирование на Java
Распределённое нагрузочное тестирование на Java
 
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
Бодрящий микс из Selenium и TestNG- регрессионное тестирование руками разрабо...
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Илья Евлампиев - Grinder
Илья Евлампиев - GrinderИлья Евлампиев - Grinder
Илья Евлампиев - Grinder
 
Попасть в мишень
Попасть в мишеньПопасть в мишень
Попасть в мишень
 
Автоматизация тестирования многопоточности
Автоматизация тестирования многопоточностиАвтоматизация тестирования многопоточности
Автоматизация тестирования многопоточности
 

Similar to Автоматизация тестирования клиентской производительности - Лавлинский Николай, Highload++ 2016

Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Alexey Kostin
 
Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Eugene Chekan
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙCEE-SEC(R)
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.COMAQA.BY
 
Python Meetup
Python Meetup Python Meetup
Python Meetup iQSpace
 
Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?Yandex
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoAzamat Tokhtaev
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Provectus
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Positive Hack Days
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияSQALab
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаMikhail Chinkov
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Dmitry Buzdin
 
Dev & test на windows azure
Dev & test на windows azureDev & test на windows azure
Dev & test на windows azureMicrosoft
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформуVadim Kruchkov
 

Similar to Автоматизация тестирования клиентской производительности - Лавлинский Николай, Highload++ 2016 (20)

Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
Что, зачем и каким образом следует проверять и тестировать перед запуском сай...
 
Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]Web performance 101 [GDG nsk webdev meetup #3]
Web performance 101 [GDG nsk webdev meetup #3]
 
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙСтановление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
Становление процесса автоматизированного тестирования в интернет-магазине ОКЕЙ
 
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
Vadim Zubovich. Comaqa Spring 2018. Красивое тестирование производительности.
 
Python Meetup
Python Meetup Python Meetup
Python Meetup
 
Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?Стабильны ли ваши приложения в облаках?
Стабильны ли ваши приложения в облаках?
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
Automation testing desktop applications
Automation testing desktop applicationsAutomation testing desktop applications
Automation testing desktop applications
 
Pavel Dovbush Toster
Pavel Dovbush Toster Pavel Dovbush Toster
Pavel Dovbush Toster
 
Полный цикл разработки на Python + Django
Полный цикл разработки на Python + DjangoПолный цикл разработки на Python + Django
Полный цикл разработки на Python + Django
 
Load testing with Tsung
Load testing with TsungLoad testing with Tsung
Load testing with Tsung
 
Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"Ян Жабин "Преимущества использования протокола HTTP/2"
Ян Жабин "Преимущества использования протокола HTTP/2"
 
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
Автоматизация нагрузочного тестирования в связке JMeter + TeamСity + Grafana ...
 
Использование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестированияИспользование Open Source инструментов для автоматизации тестирования
Использование Open Source инструментов для автоматизации тестирования
 
бегун
бегунбегун
бегун
 
PowerShell
PowerShellPowerShell
PowerShell
 
IT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчикаIT-инфраструктура. FAQ для разработчика
IT-инфраструктура. FAQ для разработчика
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
Dev & test на windows azure
Dev & test на windows azureDev & test на windows azure
Dev & test на windows azure
 
Как превратить приложение в платформу
Как превратить приложение в платформуКак превратить приложение в платформу
Как превратить приложение в платформу
 

Автоматизация тестирования клиентской производительности - Лавлинский Николай, Highload++ 2016

  • 2. О себе • Клиентская и серверная оптимизация • Консультации • Ускорение сайтов • Пропаганда скорости
  • 4. Зачем автоматизация? • Код приложения меняется • Выявлять проблемы до релиза кода • Ручное тестирование не подходит • Контролируемое окружение • Бюджет
  • 5. Что мы хотим знать • Время загрузки • Время рендеринга • Различие для состояния кэша • Влияние сети • Нет ли деградации? • Есть ли проблемы конфигурации?
  • 10.
  • 11.
  • 12.
  • 13. Patrick Meenan • Главный разработчик WebPagetest • Патриарх движения веб-производительности • Много полезных видео о WPT: https://www.youtube.com/user/patmeenan/videos
  • 15.
  • 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
  • 20. Intel Core I5-6400 vs. Samsung Galaxy S5 4 cores, 2.7 Ghz 4 cores, 2.5 Ghz
  • 21. Результаты i5 vs. S5 0 500 1000 1500 2000 2500 i5-6400 Galaxy S5 DOMContentLoaded, ms Load time, ms
  • 22. Результаты i5 vs. S5 0 50 100 150 200 i5-6400 Galaxy S5 Evaluate script jQuery 3.1, ms Evaluate script jQuery 3.1, ms
  • 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)
  • 28. Результаты тестов • $ttfb = $result->{data}{median}{firstView}{TTFB}; • $render = $result->{data}{median}{firstView}{render}; • $loadtime = $result->{data}{median}{firstView}{loadTime}; • $full_load = $result->{data}{median}{firstView}{fullyLoaded};
  • 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)
  • 33. Метрики WPT — полная загрузка Fully Loaded (fullyLoaded — JSON) – измеряется WPT Fully Loaded Bytes In (bytesIn — JSON) bytesOut (JSON)
  • 34. Ситуация №2 – блокировка рендеринга • Синхронный внешний JS в <head> • CSS • Шрифты
  • 35. Метрики WPT — рендеринг Start Render (render — JSON) – измеряется WPT RUM Furst Paint (firstPaint — JSON) —вычисляется браузером
  • 36. Ситуация №3 – сложный случай
  • 37.
  • 38.
  • 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 мс) • Тестирование серверной производительности • Нагрузочное тестирование, эмуляция действий реальных пользователей
  • 52. Ускорениесайта.рф • Сервис тестирования скорости сайтов • WPT PI + GPSI • Отчет на e-mail • 16 метрик (13+2+1) • Трудозатраты: около 40 часов
  • 53. Схема: уcкорениесайта.рф Очередь WPT PI сервер WPT агент Google Pagespeed API Отчет (e-mail) Обработчик (cron)
  • 54. Выводы • Рабочее готовое решение • Автоматизируем рутину • Несколько вариантов использования • Возможность расширения
  • 55. Что посмотреть WebPagetest Power Users • https://www.youtube.com/watch?v=6UeRMMI_IzI • https://www.youtube.com/watch?v=euVYHee1f1M Custom metrics • http://blog.patrickmeenan.com/2013/07/measuring-performance-of-user-experience.html Tracking Performance • https://www.youtube.com/watch?v=BAWpwmln6y4 DIY Synthetic - Private WebPagetest Magic • https://www.youtube.com/watch?v=dL3Sls_MwXo WebPagetest Private Instances • https://www.youtube.com/watch?v=enVpzzlhTzE • https://www.youtube.com/watch?v=loAGkDTMjtY
  • 56. Спасибо за внимание! Контакты: nick@methodlab.info https://www.facebook.com/nick.lavlinsky https://habrahabr.ru/users/nickmob/ https://www.methodlab.ru/ https://www.youtube.com/channel/UCH_PvxSiuETI_ecbeAmb7_w/ (Канал «Ускорение сайтов») Лавлинский Николай, технический директор «Метод Лаб»