Проект «Роботестер»


  Илья Кацев
План доклада

Зачем?
Как?
Проект «Роботестер»
Вступление

 Зачем нужны роботы?
Зачем?
Идеальное будущее




«Робот сам ходит по сайту и все проверяет»
Части робота

Краулер
Анализ страницы
Генерация тестов
Обнаружение ошибок
Краулеры
    Wikipedia:
    Поисковый робот («веб-паук», краулер)
    — программа, являющаяся составной
    частью поисковой системы и
    предназначенная для перебора
    страниц Интернета с целью занесения
    информации о них в базу данных
    поисковика.
7
Краулеры

    Можно:

    1.Переходить не только со страницы на
      страницу
    2.Не извлекать информацию, а
      проводить тесты

8
Краулеры
    Извлечение информации:
    Надо обойти все страницы, на которых
    есть различная ценная информация.

    Тестирование:
    Надо обойти все состояния всех
    страниц, на которых можно
    осуществить различные действия.
9
10
11
12
Deep Web

     Wikipedia:
     The Deep Web (also called the Deepnet,
     the Invisible Web, the Undernet or the
     hidden Web) is World Wide Web content
     that is not part of the Surface Web, which
     is indexable by standard search engines.

13
Deep Web
     Google's deep web crawl (2009) – статья
     о том, как Гугл индексирует такие
     сайты. Они могут работать с формой
     при следующих условиях:
     1.Формируется get-запрос
     2.Нет полей типа «textarea»
     3.Нет никакого JS

14
Формы




15
Формы




16
Формы




17
Cложные формы




18
Очень сложные формы




19
Очень сложные формы




20
     Бесконечное количество состояний!
Очень сложные формы




21
     RIA (Rich Internet Application)
Проблемы

     1.Технологии



     1.Поля текстового ввода



22
Проблемы

     1.Технологии



     1.Поля текстового ввода



23
Crawljax
     Ali Mesbah (2009).
     Analysis and Testing of Ajax-based Single-
     Page Web Applications
     PhD Thesis, Delft University of Technology.

     Принцип действия: полный перебор (в
     глубину).

24
Crawljax

     Mesbah and Prasad (2011). Automated
     Cross-Browser Compatibility Testing. In
     Proceedings of the 33rd ACM/IEEE
     International Conference on Software
     Engineering (ICSE’11)


25
Проблемы

     1.Технологии



     1.Поля текстового ввода



26
Что вводить?




27
Используем текст




28
Используем текст




29
Используем текст


      город    город    дата




30
Используем текст




31
Используем текст



                  форма




32
Используем текст



                              форма
     Ключевое слово «Найти»




33
Используем текст



                                         форма
     Ключевое слово «Найти», тип поля = «поисковый запрос»




34
Используем текст



                                         форма
     Ключевое слово «Найти», тип поля = «поисковый запрос»




35
Веб для незрячих




36
Веб для незрячих




37
Веб для незрячих




38
Стратегии краулинга




39
Стратегии краулинга




40
Стратегии краулинга




41
Проект «Роботестер»
Общие принципы

     Ходим «на один шаг»

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

     Ожидаем корректный ответ
43
Ходим на один шаг




44
Входные данные




45
Реализация

     1. Анализ страницы

     2. Выполняем тест-кейсы

     3. Проверки


46
Реализация

     1. Анализ страницы

     2. Выполняем тест-кейсы

     3. Проверки


47
Анализ страницы

     1. Распознаем элементы (Webdriver)

     2. Анализ текстовых полей

     3. Строим граф состояний

     4. Формируем тест-кейсы (Jenny)
48
Анализ страницы

     1. Распознаем элементы (Webdriver)

     2. Анализ текстовых полей

     3. Строим граф состояний

     4. Формируем тест-кейсы (Jenny)
49
Анализ страницы

     1. Распознаем элементы (Webdriver)

     2. Анализ текстовых полей

     3. Строим граф состояний

     4. Формируем тест-кейсы (Jenny)
50
Типы значений
     korpus,         flat,          search,
     inn,            house,         range,
     bik,            icq,           date,
     kpp,            patronymic,    price,
     address,        phone,         name,
     lastname,       street,        login,
     country,        password,      anyNumbers,
     captcha,        submitButton   website,
     email,      ,                  city
51
Город
     "type":
        "city",
     "keyWords":
        [{"word":"найти","weight":0.1},{"word":"search","weight":0.
     1},{"word":"city","weight":2},{"word":"город","weight":0.99},{"
     word":"место","weight":0.7},{"word":"местоположение","wei
     ght":0.7},{"word":"станци","weight":0.725},{"word":"до","wei
     ght":0.558},{"word":"to","weight":0.558},{"word":"from","weig
     ht":0.333},{"word":"откуда","weight":0.8},{"word":"name","we
     ight":0.1},{"word":"куда","weight":0.8},{"word":"поиск","weig
     ht":0.333},{"word":"маршрут","weight":0.925},{"word":"точк",
     "weight":0.5}],
52
Цена
     "type":
        "price",
     "keyWords":
        [{"word":"price","weight":1},{"word":"цена","weight":1},{"w
     ord":"от","weight":0.5},{"word":"до","weight":0.5},{"word":"вз
     нос","weight":1}],




53
Цена
     "type":
        "price",
     "keyWords":
        [{"word":"price","weight":1},{"word":"цена","weight":1},{"w
     ord":"от","weight":0.5},{"word":"до","weight":0.5},{"word":"вз
     нос","weight":1}],


                    argmax(Σj wijlj)

54
Интерфейс обучения




55
Входные данные




56
Город (2358 значений)




57
E-mail (7520 значений)




58
Анализ страницы

     1. Распознаем элементы (Webdriver)

     2. Анализ текстовых полей

     3. Строим граф состояний

     4. Формируем тест-кейсы (Jenny)
59
Анализ страницы

     1. Распознаем элементы (Webdriver)

     2. Анализ текстовых полей

     3. Строим граф состояний

     4. Формируем тест-кейсы (Jenny)
60
Реализация

     1. Анализ страницы

     2. Выполняем тест-кейсы

     3. Проверки


61
Реализация

     1. Анализ страницы

     2. Выполняем тест-кейсы




62
Реализация

     1. Анализ страницы

     2. Выполняем тест-кейсы

     3. Проверки (JUnit)


63
Проверки

     1.Пингуем ссылки.




64
Пример

     Сценарий: ищем в поиске «Susan Boyle»




65
Пример

     Сценарий: ищем в поиске «Susan Boyle»




66
Пример

     Сценарий: ищем в поиске «Susan Boyle»




67
Проверки

     1.Пингуем ссылки.
     2.Изучаем текст на странице.




68
Запрещенные «слова»
     error         генств        failed
     ошибка        NaN           unavailable
     .             ошибка         a,
     ,             не удалось     b,
     404           не доступен    c,
     503           недоступен     d,
     404@          error         …
     не отвечает   problem
69
     Undefined     exception
Все равно:




70
Все равно:




71
Пример ошибки




72
Пример ошибки




73
Пример ошибки




74
Пример ошибки




75
Проверки
     1.Пингуем ссылки.
     2.Изучаем текст на странице.
     3.Смотрим на алерты.
     4.Ищем текст красного цвета
     5.SpellChecker

76
Как пользоваться?




77
User-friendly interface




78
Сначала было




79
Баг:




80
Добавили галочку




81
Текстовые поля




82
Добавили поле




83
2000 тест-кейсов!




84
2000 тест-кейсов!




85
2000 тест-кейсов!




86
Добавили еще поле




87
Переход на другой сервис




88
Переход на другой сервис

     http://tune.yandex.ru/region/?reg_from=&r
     etpath=http://www.yandex.ru




     http://yandex.ru/

89
И наконец




90
Менеджерское


     Робот нашел сотни тысячи багов, но как
     понять, что он действительно
     сэкономил время?




91
Менеджерское

     1. Робот находит блокеры сам

     2. Робот повышает качество




92
Пример ошибки:




93
Пример ошибки:




94
Пример ошибки:




95
Пример ошибки:




96
Пример ошибки:




97
Сейчас


     Робот участвует в тестировании
     Яндекс.Маркета, находит ~10% багов.




98
Яндекс.Маркет




99
Яндекс.Маркет




100
Яндекс.Маркет




101
Затраты

      1. Затраты на настройку




102
Затраты

      1. Затраты на настройку

      2. Разбор отчетов робота




103
Затраты

      1. Затраты на настройку

      2. Разбор отчетов робота

      3. Заняли весь Дженкинс :)


104
Будущее




105
Спасибо за внимание!




      Илья Кацев
106
      katsev@yandex.ru

Project Robotester