Поиск багов в поиске

Preview:

Citation preview

Я.Субботник, Санкт-Петербург, 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) thistle@yandex-team.ru

Селиверстов Станислав

Инженер по тестированию +7 (812) 633-36-00 (8625)eroshenkoam@yandex-team.ru

Ерошенко Артем

Вопросы?

Recommended