codefest 2011. Высоцкий С. — crawljax. Четвертый закон...

28
CRAWLJAX Четвертый закон робототехники Высоцкий Сергей, ДатаВоркс

Upload: codefest

Post on 16-Jun-2015

1.006 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

CRAWLJAX

Четвертый закон робототехники

Высоцкий Сергей,ДатаВоркс

Page 2: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

1. Crawljax. Что это?

2. Как работает Crawljax?

3. Что можно делать при помощи Crawljax?

Page 3: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

1. Crawljax. Что это?

Page 4: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Crawljax. WTF!?!?!

AJAX

Testing heuristics

Crawler

False positives

TestTesting Oracles

State-flow graph Events

Invariants

False negatives

Page 5: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Crawljax. Начало

• Ali Mesbah & Arie van Deursen PhD reseach, 2007

• Позже присоединились: Danny Roest, Stefan Lenselink, Frank Groeneveld, Cor-Paul Bezemer

Page 6: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

2. Как работает Crawljax?

Page 7: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Ливер/Фарш/Мясо:

Java

+

WebDriver

Page 8: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Plugins:

• PreCrawlingPlugin

• OnNewStatePlugin

• OnRevisitStatePlugin

• OnUrlLoadPlugin

• OnInvariantViolationPlugin

• PreStateCrawlingPlugin

• PostCrawlingPlugin

• ProxyServerPlugin

+ Несколько отсутствующих в документации

Page 9: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Moar опций

1. Задать элементы, по которым кликать/не кликать

2. Задать event’ы, которые вызывать/не вызывать

3. Задать данные для input’ов

4. Ограничить глубину обхода

5. Запуск в разных браузерах

6. ...

Page 10: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

3. Что можно делать при помощи Crawljax?

Page 11: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Получить State-flow граф

Page 12: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Регресионные тесты

Основная идея:

1.Получить модель веб-приложения

2.Сохранить модель

3.Создать test suite по этой модели

4.Прогонять тесты из test suite по веб-приложению

5.Повторять шаги 3 и 4 для разных версий приложения

Если приложение сильно меняется, то можно повторить с шага #1

Page 13: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Как получить модель?

Запустить Crawljax с SaveCrawlSessionPlugin

На выходе: state-flow graph и все пути в виде XML-файла.

Page 14: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Как получить test suite?

Запустить Crawljax с RegressionTester плагином. На вход подать полученный ранее XML-файл.

На выходе: JUnit TestSuite

Page 15: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Гибкие настройки

TestFaultHandler интерфейс:

1. onEventFailure()

2. onStateDifference()

3. onStateLoadTimeout()

4. onInvariantViolation()

Бонус: WaitStrategy

Page 16: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Зачистка False Positives

OracleComparator class.

Уже есть:

• DateComparator

• StyleComparator

• AttributeComparator

• PlainStructureComparator

• ScriptComparator

• RegexComparator

• XPathComparator

Page 17: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Отчет об ошибках:

ErrorReport плагин:

Page 18: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Визуализация ошибок:

ErrorReport плагин:

Page 19: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

DOM diff:

ErrorReport плагин:

Page 20: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Инварианты

Wikipedia:

“Инвариант в математике — это свойство некоторого класса (множества) математических объектов оставаться неизменными при преобразованиях определённого типа.”

Page 21: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Инварианты. Примеры:

1. Никаких ошибок в DOM (404, 500, 400, Session Timeout, MySQL error и т.д.)

2. Валидный код страницы

3. No dead links

4. Консистентное поведение Back-button

5. Валидное отображение текущей позиции в меню

Page 22: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Инварианты. Как?

InvarScope плагины.

И для DOM и для JavaScript состоит из двух частей:

1. Плагин для поиска инвариант

2. Плагин для тестирования по заданным инвариантам

Для регрессионных тестов. Например вот так:

crawler.addInvariant("No error messages", new NotRegexCondition("Error [0-9]+");

Page 23: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

X-Files

Page 24: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Уже есть плагины:

1. Benchmark – замеряет производительность самого crawljax’а.

2. CrawlOverview – генерит HTML страничку с результатами crawl’а

3. ErrorReport - сабж

4. Cross-browser Tester – сабж

5. InvarScope – автоматический поиск инвариантов (DOM/JavaScript)

6. Mirror generator – сабж

7. SFGExporter – для красивых графов

Page 25: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Итого:

Props:

• Готовое решение для регресионных тестов

• Мощный аналитический инструмент

• Open Source

Slops:

• Мало документации (не очень User Friendly)

• Не покрывает workflow-specific тестовые случаи

• Часть плагинов «Available on request»

Page 26: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Где взять?

crawljax.com - родной сайт проекта

spci.st.ewi.tudelft.nl/demo/crawljax/ - старый сайт

code.google.com/p/crawljax-plugins/ - плагины

Page 27: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Вопросы?

Высоцкий Сергей,ДатаВоркс

[email protected]

Page 28: CodeFest 2011. Высоцкий С. — Crawljax. Четвертый закон робототехники

Четвертый Закон Робототехники

“A robot must reproduce.”Harry Harrison, “The Fourth Law of Robotics”