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

Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

  • Upload
    yandex

  • View
    876

  • Download
    0

Embed Size (px)

DESCRIPTION

Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске" Первый Я.Субботник в Санкт-Петербурге

Citation preview

Page 1: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

Page 2: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

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

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

1

Page 3: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

2

Page 4: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

3

Может быть он свойресторан открыть хочет!

не желаете?

Нусс, посмотрим на карте:

Вы наверное имели ввиду

Любезные, а Вы случаем не знаетепоблизости

Друзья, это же

Знаете, Я хожу в

Очень рекомендую!

А если на вечер, я бы советовал

у меня даже адресочек есть

Тут ресторанов !!!

Уточните где...

Page 5: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

4

Колдунщик

Поисковые результаты

Здесь можетбыть вашареклама

Параллельныйпоиск по

картинкам

Исправление опечатки

Page 6: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

5

Page 7: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

6

Page 8: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

7

Page 9: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

8

Test

something

verify

typeclickget

Page 10: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

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

Page 11: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

10

Page 12: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

11

Page 13: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

12

*.logTestCase

Generator

TestData

TestData

TestData

Page 14: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

13

Page 15: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

Сложности

14

Page 16: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

Сложности

15

Page 17: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

16

Page 18: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

17

Page 19: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

18

Компонент А Компонент Б Компонент В

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

Page 20: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

19

Chain 1 Chain 2 Chain N

Test 1

Test 2

Test 3

Page 21: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

20

Page 22: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

21

TestData

TestData

TestData

ru

Test

TestData

TestData

TestData

Page 23: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

22

Selenium?

Page 24: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

23

Page 25: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

24

Page 26: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

25

Test

Browser

Selenium

HtmlUnit

Page 27: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

26

Test

Browser

Selenium

HtmlUnit

Page 28: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

27

Page 29: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

Сложности

28

Page 30: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

29

Page 31: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

30

Page 32: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

31

HtmlUnit <xml> jsonpjsonp

to

xml

jsonjson

to

xml

anything

to

xml

anything

Page 33: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

Сложности

32

Page 34: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

33

Page 35: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

Page 36: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

• proxy, cookie

35

Page 37: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

36

Page 38: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

Сложности

37

Page 39: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

38

Page 40: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

39

Page 41: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

40

Page 42: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

41

Page 43: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

42

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

Page 44: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

43

Page 45: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

44

Page 46: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

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

45

Page 47: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

46

Page 48: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

47

Page 49: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

48

Page 50: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

49

HTTP-Балансер

IP-Балансер

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

Поисковый кластер

Верхний поиск

Page 51: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

50

Page 52: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

51

Page 53: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

52

Page 54: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

53

Page 55: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

54

Page 56: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

55

Page 57: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

56

Page 58: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

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

57

Page 59: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

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

58

Page 60: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

59

Page 61: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

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

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

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

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

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

60

Page 62: Артём Ерошенко, Станислав Селиверстов "Поиск багов в поиске"

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

+7 (812) 633-36-00 (8575) thistle@yandex-

team.ru

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

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

+7 (812) 633-36-00

(8625)[email protected]

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

Вопросы?