62
Я.Субботник, Санкт-Петербург, 26-12 2011 инженер по тестированию Ерошенко Артем Поиск багов в поиске инженер по тестированию Селиверстов Станислав

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

Embed Size (px)

Citation preview

Page 1: Поиск багов в поиске

Я.Субботник, Санкт-Петербург, 26-12 2011

инженер по тестированиюЕрошенко Артем

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

инженер по тестированиюСеливерстов Станислав

Page 2: Поиск багов в поиске

Поиск Яндекса

• 150 000 000 запросов в день

• 5 400 000 сайтов в индексе

• 800 000 пользователей в день

• 62 терабайта информации

• сотни разработчиков

2

Page 3: Поиск багов в поиске

Как рождается поиск

3

Page 4: Поиск багов в поиске

4

Page 5: Поиск багов в поиске

Результат работы программКак рождается поиск

5

Page 6: Поиск багов в поиске

Результат взаимодействияКак рождается поиск

6

Page 7: Поиск багов в поиске

• через конечную функциональность

• по-компонентно

Как тестировать?

7

Page 8: Поиск багов в поиске

Тестирование через конечную функциональность

8

Page 9: Поиск багов в поиске

ТребованияИнструмент тестирования

9

Page 10: Поиск багов в поиске

SeleniumИнструмент тестирования

• работает с реальным браузером

• клиентская часть реализована на нескольких языках

• работает с несколькими браузерами

• открытый код10

Page 11: Поиск багов в поиске

Главное правильно задать запрос

11

Page 12: Поиск багов в поиске

• проектируем свои

• берем пользовательские

Как задаем запросы?

12

Page 13: Поиск багов в поиске

Пользовательские запросыКак задаем запросы?

13

Page 14: Поиск багов в поиске

• оцениваем масштаб проблемы

• проверяем показ элемента в выдаче

Ожидаемый результатПользовательские запросы

14

Page 15: Поиск багов в поиске

• скорость выполнения тестов

• экспортные данные

• множество ссылок

• тестирование верстки

Сложности

15

Page 16: Поиск багов в поиске

• скорость выполнения тестов

• экспортные данные

• множество ссылок

• тестирование верстки

Сложности

16

Page 17: Поиск багов в поиске

• запускать меньше тестов

• выполнять тесты быстрее

Как уменьшить времяСкорость выполнения тестов

17

Page 18: Поиск багов в поиске

• запускать меньше тестов

• выполнять тесты быстрее

Как уменьшить времяСкорость выполнения тестов

18

Page 19: Поиск багов в поиске

Самая длинная цепьЗапускать меньше тестов

19

Выдача поиска

Page 20: Поиск багов в поиске

Группировка тестовЗапускать меньше тестов

20

Page 21: Поиск багов в поиске

• запускать меньше тестов

• выполнять тесты быстрее

Как уменьшить времяСкорость выполнения тестов

21

Page 22: Поиск багов в поиске

Рост количества данныхВыполнять тесты быстрее

22

Page 23: Поиск багов в поиске

Каким инструментомВыполнять тесты быстрее

23

Selenium?

Page 24: Поиск багов в поиске

• эмулирует работу браузера

• поддерживает jScript

• быстрее в разы

Инструмент HtmlUnitВыполнять тесты быстрее

24

Page 25: Поиск багов в поиске

Разные интерфейсыВыполнять тесты быстрее

25

Page 26: Поиск багов в поиске

HtmlUnit to SeleniumВыполнять тесты быстрее

26

Page 27: Поиск багов в поиске

HtmlUnit to? SeleniumВыполнять тесты быстрее

27

Page 28: Поиск багов в поиске

• уникальные тесты на Selenium

• тесты на большом количестве запросов на HtmlUnit

Перевести все тесты на HtmlUnitВыполнять тесты быстрее

28

Page 29: Поиск багов в поиске

• скорость выполнения тестов

• экспортные данные

• множество ссылок

• тестирование верстки

Сложности

29

Page 30: Поиск багов в поиске

• приходят со сторонних сервисов

• имеют разные форматы

Экспортные данные

30

Page 31: Поиск багов в поиске

ФорматыЭкспортные данные

31

Page 32: Поиск багов в поиске

ПреобразованияЭкспортные данные

32

Page 33: Поиск багов в поиске

• скорость выполнения тестов

• экспортные данные

• множество ссылок

• тестирование верстки

Сложности

33

Page 34: Поиск багов в поиске

Прокликать всеМножество ссылок

• ссылки генерируются

• данные приходят со сторонних сервисов

• сторонние сервисы живут своей жизню

34

Page 35: Поиск багов в поиске

Переход на погодуМножество ссылок

pogoda.yandex.ru/saint-petersburgpogoda.yandex.ru/26063

Page 36: Поиск багов в поиске

Инструмент nonameМножество ссылок

• умеет обходить страницы “вширь”

• умеет “пинговать” ресурс (link, image)

• умеет проверять корректность страницы (css, js, favicon)

• proxy, cookie

36

Page 37: Поиск багов в поиске

Noname улучшизмыМножество ссылок

• проверка работы JavaScript

• “склеивание” ссылок

37

Page 38: Поиск багов в поиске

• скорость выполнения тестов

• экспортные данные

• множество ссылок

• тестирование верстки

Сложности

38

Page 39: Поиск багов в поиске

Проблема поколенийТестирование верстки

39

Page 40: Поиск багов в поиске

Руками и глазамиТестирование верстки

40

Page 41: Поиск багов в поиске

Нагрузка растетТестирование верстки

• сотни сценариев

• разные браузеры

41

Page 42: Поиск багов в поиске

А/Б тестированиеТестирование верстки

42

Page 43: Поиск багов в поиске

Нерешенная проблемаТестирование верстки

43

Как автоматизировать?

Page 44: Поиск багов в поиске

Компонентное тестирование

44

Page 45: Поиск багов в поиске

• Раннее тестирование производительности

• Стресс-тесты и тестирование стабильности компонент

• Функциональные тесты под нагрузкой

Надежность и производительностьКомпонентное тестирование

45

Page 46: Поиск багов в поиске

• Подготовка тестовой среды

• Выбор входных данных

• Проведение теста

• Анализ выходных данных

Этапы тестированияКомпонентное тестирование

46

Page 47: Поиск багов в поиске

• Отдельно выделенный сервер, с аналогичной продакшен конфигурацией

• Окружение создается каждый раз перед тестированием

• Эмуляция принимающих выходной поток компонент + возможность использовать тестовые кластеры

Тестовая средаКомпонентное тестирование

47

Page 48: Поиск багов в поиске

• Живой поток с продакшен

• Фиксированный поток

• Сгенерированный поток

План обстрелаКомпонентное тестирование

48

Page 49: Поиск багов в поиске

• Обеспечивает доставку запроса пользователя к поисковому кластеру и ответа к пользователю

• Распределяет запросы между поисковыми кластерами кратно их производительности

ФункцииПример Балансер

49

Page 50: Поиск багов в поиске

Пример Балансер

50

HTTP-Балансер

IP-Балансер

HTTP-Балансер HTTP-БалансерHTTP-Балансер

Поисковый кластерВерхний поиск

Page 51: Поиск багов в поиске

• Скорость отдачи страницы с результатом выдачи снизилась

• Балансер перестал отдавать результат выдачи (белая страница)

• Данные портятся при прохождении через балансер

ОшибкиПример Балансер

51

Page 52: Поиск багов в поиске

Тесты под нагрузкойПример Балансер

Пусть будут 10 заглушек эмулирующих бэкэнды с различной производительностью

52

Page 53: Поиск багов в поиске

Среднее количество запросов по группе одинаковых бэкэндов

Пример Балансер

53

Page 54: Поиск багов в поиске

Распределение времени ответов с бэкэндов

Пример Балансер

54

Page 55: Поиск багов в поиске

Количество обработанных запросов на бэкэндах

Пример Балансер

55

Page 56: Поиск багов в поиске

Распределение времени ответов за балансером

Пример Балансер

56

Page 57: Поиск багов в поиске

• Скорость отдачи страницы с результатом выдачи снизилась

• Балансер перестал отдавать результат выдачи (белая страница)

• Данные портятся при прохождении через балансер

ОшибкиПример Балансер

57

Page 58: Поиск багов в поиске

• Сверяем трафик до балансера и после

• Пропускаем через балансер преднамеренно испорченные запросы (fuzzing)

• Искусственно создаем таймауты и потерю соединения

Функциональные тесты под нагрузкой

Пример Балансер

58

Page 59: Поиск багов в поиске

• Учитывает все особенности сборки компонент

• Интегрирован инструментарий для обстрела и профилирования поисковых компонент

• Есть надежная доставка компонент на многочисленные машины поискового кластера

• Автоматическая сборка и тестирование по расписанию или по коммиту

SandBoxКомпонентное тестирование

59

Page 60: Поиск багов в поиске

• Тестирование всех компонент на производительность

• Расширение покрытия функциональными тестами

ГоризонтыКомпонентное тестирование

60

Page 61: Поиск багов в поиске

• Покоммитное тестирование компонент

• Тестирование версии под нагрузкой

• Версия попадает в приемку качества

• После приемки качества попадает в тестирование через конечную функциональность

• В продакшен следим через мониторинги

Путь тестирования

61

Page 62: Поиск багов в поиске

Инженер по тестированию +7 (812) 633-36-00 (8575) [email protected]

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

Инженер по тестированию +7 (812) 633-36-00 (8625)[email protected]

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

Вопросы?