CRAWLJAX
Четвертый закон робототехники
Высоцкий Сергей,ДатаВоркс
1. Crawljax. Что это?
2. Как работает Crawljax?
3. Что можно делать при помощи Crawljax?
1. Crawljax. Что это?
Crawljax. WTF!?!?!
AJAX
Testing heuristics
Crawler
False positives
TestTesting Oracles
State-flow graph Events
Invariants
False negatives
Crawljax. Начало
• Ali Mesbah & Arie van Deursen PhD reseach, 2007
• Позже присоединились: Danny Roest, Stefan Lenselink, Frank Groeneveld, Cor-Paul Bezemer
2. Как работает Crawljax?
Ливер/Фарш/Мясо:
Java
+
WebDriver
Plugins:
• PreCrawlingPlugin
• OnNewStatePlugin
• OnRevisitStatePlugin
• OnUrlLoadPlugin
• OnInvariantViolationPlugin
• PreStateCrawlingPlugin
• PostCrawlingPlugin
• ProxyServerPlugin
+ Несколько отсутствующих в документации
Moar опций
1. Задать элементы, по которым кликать/не кликать
2. Задать event’ы, которые вызывать/не вызывать
3. Задать данные для input’ов
4. Ограничить глубину обхода
5. Запуск в разных браузерах
6. ...
3. Что можно делать при помощи Crawljax?
Получить State-flow граф
Регресионные тесты
Основная идея:
1.Получить модель веб-приложения
2.Сохранить модель
3.Создать test suite по этой модели
4.Прогонять тесты из test suite по веб-приложению
5.Повторять шаги 3 и 4 для разных версий приложения
Если приложение сильно меняется, то можно повторить с шага #1
Как получить модель?
Запустить Crawljax с SaveCrawlSessionPlugin
На выходе: state-flow graph и все пути в виде XML-файла.
Как получить test suite?
Запустить Crawljax с RegressionTester плагином. На вход подать полученный ранее XML-файл.
На выходе: JUnit TestSuite
Гибкие настройки
TestFaultHandler интерфейс:
1. onEventFailure()
2. onStateDifference()
3. onStateLoadTimeout()
4. onInvariantViolation()
Бонус: WaitStrategy
Зачистка False Positives
OracleComparator class.
Уже есть:
• DateComparator
• StyleComparator
• AttributeComparator
• PlainStructureComparator
• ScriptComparator
• RegexComparator
• XPathComparator
Отчет об ошибках:
ErrorReport плагин:
Визуализация ошибок:
ErrorReport плагин:
DOM diff:
ErrorReport плагин:
Инварианты
Wikipedia:
“Инвариант в математике — это свойство некоторого класса (множества) математических объектов оставаться неизменными при преобразованиях определённого типа.”
Инварианты. Примеры:
1. Никаких ошибок в DOM (404, 500, 400, Session Timeout, MySQL error и т.д.)
2. Валидный код страницы
3. No dead links
4. Консистентное поведение Back-button
5. Валидное отображение текущей позиции в меню
Инварианты. Как?
InvarScope плагины.
И для DOM и для JavaScript состоит из двух частей:
1. Плагин для поиска инвариант
2. Плагин для тестирования по заданным инвариантам
Для регрессионных тестов. Например вот так:
crawler.addInvariant("No error messages", new NotRegexCondition("Error [0-9]+");
X-Files
Уже есть плагины:
1. Benchmark – замеряет производительность самого crawljax’а.
2. CrawlOverview – генерит HTML страничку с результатами crawl’а
3. ErrorReport - сабж
4. Cross-browser Tester – сабж
5. InvarScope – автоматический поиск инвариантов (DOM/JavaScript)
6. Mirror generator – сабж
7. SFGExporter – для красивых графов
Итого:
Props:
• Готовое решение для регресионных тестов
• Мощный аналитический инструмент
• Open Source
Slops:
• Мало документации (не очень User Friendly)
• Не покрывает workflow-specific тестовые случаи
• Часть плагинов «Available on request»
Где взять?
crawljax.com - родной сайт проекта
spci.st.ewi.tudelft.nl/demo/crawljax/ - старый сайт
code.google.com/p/crawljax-plugins/ - плагины
Четвертый Закон Робототехники
“A robot must reproduce.”Harry Harrison, “The Fourth Law of Robotics”
Top Related