Поиск багов в поиске
TRANSCRIPT
Я.Субботник, Санкт-Петербург, 26-12 2011
инженер по тестированиюЕрошенко Артем
Поиск багов в поиске
инженер по тестированиюСеливерстов Станислав
Поиск Яндекса
• 150 000 000 запросов в день
• 5 400 000 сайтов в индексе
• 800 000 пользователей в день
• 62 терабайта информации
• сотни разработчиков
2
Как рождается поиск
3
4
Результат работы программКак рождается поиск
5
Результат взаимодействияКак рождается поиск
6
• через конечную функциональность
• по-компонентно
Как тестировать?
7
Тестирование через конечную функциональность
8
ТребованияИнструмент тестирования
9
SeleniumИнструмент тестирования
• работает с реальным браузером
• клиентская часть реализована на нескольких языках
• работает с несколькими браузерами
• открытый код10
Главное правильно задать запрос
11
• проектируем свои
• берем пользовательские
Как задаем запросы?
12
Пользовательские запросыКак задаем запросы?
13
• оцениваем масштаб проблемы
• проверяем показ элемента в выдаче
Ожидаемый результатПользовательские запросы
14
• скорость выполнения тестов
• экспортные данные
• множество ссылок
• тестирование верстки
Сложности
15
• скорость выполнения тестов
• экспортные данные
• множество ссылок
• тестирование верстки
Сложности
16
• запускать меньше тестов
• выполнять тесты быстрее
Как уменьшить времяСкорость выполнения тестов
17
• запускать меньше тестов
• выполнять тесты быстрее
Как уменьшить времяСкорость выполнения тестов
18
Самая длинная цепьЗапускать меньше тестов
19
Выдача поиска
Группировка тестовЗапускать меньше тестов
20
• запускать меньше тестов
• выполнять тесты быстрее
Как уменьшить времяСкорость выполнения тестов
21
Рост количества данныхВыполнять тесты быстрее
22
Каким инструментомВыполнять тесты быстрее
23
Selenium?
• эмулирует работу браузера
• поддерживает jScript
• быстрее в разы
Инструмент HtmlUnitВыполнять тесты быстрее
24
Разные интерфейсыВыполнять тесты быстрее
25
HtmlUnit to SeleniumВыполнять тесты быстрее
26
HtmlUnit to? SeleniumВыполнять тесты быстрее
27
• уникальные тесты на Selenium
• тесты на большом количестве запросов на HtmlUnit
Перевести все тесты на HtmlUnitВыполнять тесты быстрее
28
• скорость выполнения тестов
• экспортные данные
• множество ссылок
• тестирование верстки
Сложности
29
• приходят со сторонних сервисов
• имеют разные форматы
Экспортные данные
30
ФорматыЭкспортные данные
31
ПреобразованияЭкспортные данные
32
• скорость выполнения тестов
• экспортные данные
• множество ссылок
• тестирование верстки
Сложности
33
Прокликать всеМножество ссылок
• ссылки генерируются
• данные приходят со сторонних сервисов
• сторонние сервисы живут своей жизню
34
Переход на погодуМножество ссылок
pogoda.yandex.ru/saint-petersburgpogoda.yandex.ru/26063
Инструмент nonameМножество ссылок
• умеет обходить страницы “вширь”
• умеет “пинговать” ресурс (link, image)
• умеет проверять корректность страницы (css, js, favicon)
• proxy, cookie
36
Noname улучшизмыМножество ссылок
• проверка работы JavaScript
• “склеивание” ссылок
37
• скорость выполнения тестов
• экспортные данные
• множество ссылок
• тестирование верстки
Сложности
38
Проблема поколенийТестирование верстки
39
Руками и глазамиТестирование верстки
40
Нагрузка растетТестирование верстки
• сотни сценариев
• разные браузеры
41
А/Б тестированиеТестирование верстки
42
Нерешенная проблемаТестирование верстки
43
Как автоматизировать?
Компонентное тестирование
44
• Раннее тестирование производительности
• Стресс-тесты и тестирование стабильности компонент
• Функциональные тесты под нагрузкой
Надежность и производительностьКомпонентное тестирование
45
• Подготовка тестовой среды
• Выбор входных данных
• Проведение теста
• Анализ выходных данных
Этапы тестированияКомпонентное тестирование
46
• Отдельно выделенный сервер, с аналогичной продакшен конфигурацией
• Окружение создается каждый раз перед тестированием
• Эмуляция принимающих выходной поток компонент + возможность использовать тестовые кластеры
Тестовая средаКомпонентное тестирование
47
• Живой поток с продакшен
• Фиксированный поток
• Сгенерированный поток
План обстрелаКомпонентное тестирование
48
• Обеспечивает доставку запроса пользователя к поисковому кластеру и ответа к пользователю
• Распределяет запросы между поисковыми кластерами кратно их производительности
ФункцииПример Балансер
49
Пример Балансер
50
HTTP-Балансер
IP-Балансер
HTTP-Балансер HTTP-БалансерHTTP-Балансер
Поисковый кластерВерхний поиск
• Скорость отдачи страницы с результатом выдачи снизилась
• Балансер перестал отдавать результат выдачи (белая страница)
• Данные портятся при прохождении через балансер
ОшибкиПример Балансер
51
Тесты под нагрузкойПример Балансер
Пусть будут 10 заглушек эмулирующих бэкэнды с различной производительностью
52
Среднее количество запросов по группе одинаковых бэкэндов
Пример Балансер
53
Распределение времени ответов с бэкэндов
Пример Балансер
54
Количество обработанных запросов на бэкэндах
Пример Балансер
55
Распределение времени ответов за балансером
Пример Балансер
56
• Скорость отдачи страницы с результатом выдачи снизилась
• Балансер перестал отдавать результат выдачи (белая страница)
• Данные портятся при прохождении через балансер
ОшибкиПример Балансер
57
• Сверяем трафик до балансера и после
• Пропускаем через балансер преднамеренно испорченные запросы (fuzzing)
• Искусственно создаем таймауты и потерю соединения
Функциональные тесты под нагрузкой
Пример Балансер
58
• Учитывает все особенности сборки компонент
• Интегрирован инструментарий для обстрела и профилирования поисковых компонент
• Есть надежная доставка компонент на многочисленные машины поискового кластера
• Автоматическая сборка и тестирование по расписанию или по коммиту
SandBoxКомпонентное тестирование
59
• Тестирование всех компонент на производительность
• Расширение покрытия функциональными тестами
ГоризонтыКомпонентное тестирование
60
• Покоммитное тестирование компонент
• Тестирование версии под нагрузкой
• Версия попадает в приемку качества
• После приемки качества попадает в тестирование через конечную функциональность
• В продакшен следим через мониторинги
Путь тестирования
61
Инженер по тестированию +7 (812) 633-36-00 (8575) [email protected]
Селиверстов Станислав
Инженер по тестированию +7 (812) 633-36-00 (8625)[email protected]
Ерошенко Артем
Вопросы?