Книга: Как тестируют в Google
RPF: Record Playback Framework
RPF: Record Playback Framework
Вторник, 17 ноября 2011 г., 5:26
http://googletesting.blogspot.com/2011/11/rpf-googles-record-playback-framework.html
Джейсон Арбон
На конференции GTAC меня спросили, насколько хорошо Record Playback Framework работает в среде BITE. Мы были настроены скептически, но подумали, что кто-то должен попробовать это оценить. Сейчас я расскажу вам, как взялись оценивать качество RPF и что из этого вышло.
Идея была в том, чтобы пользователи могли использовать приложение в браузере, записывать свои действия и сохранять их в виде кода JavaScript для воспроизведения в ходе регрессионных тестов. Как и большинство инструментов, основанных на генерации кода, RPF работает, но не идеален. У По Ху была ранняя рабочая версия, которую он решил опробовать на реальном продукте. По, разработчик RPF, работал с командой веб-магазина Chrome, на котором проверялась работоспособность ранней версии. Почему именно веб-магазин Chrome? Большая часть пользовательского интерфейса этого сайта управляется данными, на нем используется аутентификация, поддерживается возможность отправки файлов, к тому же сайт часто меняется и постоянно ломает существующие сценарии Selenium. Это был крепкий орешек для тестирования.
Прежде чем обратиться к разработчику тестов веб-магазина Chrome Венси Лю, мы сделали то, что нам казалось разумным: провели нечеткий поиск соответствий и построково обновили тестовые сценарии. Selenium — отличная штука, но после создания стартового регрессионного пакета многие команды тратят кучу времени на простое сопровождение своих тестов, так как продукты постоянно меняются. Мы подумали: а что, если инструмент не будет просто проваливать тест, если не найдет нужный элемент, как это делает Selenium? А что, если нам не нужно будет анализировать DOM вручную и быстро менять код теста, а потом разворачивать его снова и запускать, и так по кругу? Что, если тестовый сценарий продолжит выполняться, а обновление кода сведется к простому клику на нужном элементе? Мы же можем брать значения атрибутов записанных элементов веб-страницы и, выполняя тест, просто вычислять процент их совпадений с теми, которые нашел тест во время выполнения. Если совпадение не стопроцентное, но лежит в допустимых пределах (например, изменился только родительский узел или атрибут класса), то мы запишем предупреждение и продолжим выполнение тест-кейса. Если следующие шаги теста проходят нормально, то тесты в сериях продолжают выполняться и только записывают предупреждения. Если запустить тесты в режиме отладки — они приостановятся, чтобы тестировщик мог быстро обновить условия совпадения через пользовательский интерфейс BITE. Мы решили, что это сократит ложноположительные срабатывания и ускорит обновление.
Мы ошиблись, но в хорошую сторону!
Мы оставили тестировщика наедине с RPF, а потом поговорили с ним через несколько дней. Он уже воссоздал большинство своих тестовых пакетов Selenium в RPF, причем тесты уже начали ломаться из-за изменений в продукте (тестировщикам в Google нелегко угнаться за темпами поставки изменений разработчиками). Он выглядел вполне довольным, и мы спросили, как справляется новый хитрый механизм нечеткого поиска соответствий. «А, это? Даже не знаю. Я не пользовался…» — ответил Венси. Мы начали подозревать, что наш интерфейс обновления тестов был непонятным, не работал или его было трудно найти. Но Венси сказал, что для упавших ему тестов было проще записать сценарий заново. Все равно нужно повторно тестировать продукт, так почему бы не начать запись во время ручной проверки рабочего элемента, затем удалить старый тест и сохранить вновь записанный сценарий?
За первую неделю использования RPF Венси узнал следующее.
— 77% функций веб-магазина можно было тестировать в RPF.
— Генерация регрессионных тест-кейсов в этой, ранней версии RPF шла примерно в восемь раз быстрее, чем в Selenium/WebDriver.
— Сценарии RPF обнаружили шесть функциональных регрессионных багов и много непостоянных багов серверной части.
— Общие подготовительные шаги (например, вход в систему) должны сохраняться в виде модулей для повторного использования (простейшая версия этой функциональности вскоре заработала).
— RPF работает на Chrome OS, где Selenium не может работать в принципе, потому что требует наличия бинарных файлов на стороне клиента. RPF работает, потому что это облачное решение, которое полностью выполняется в браузере и взаимодействует с бэкенд-системой через веб.
— В созданных через BITE описаниях багов есть простая ссылка, которая устанавливает BITE на машине разработчика и воспроизводит запись на его машине. Программировать шаги записи вручную больше не нужно. Это очень удобно.
— Венси высказал пожелание, чтобы технология RPF работала не только для Chrome, ведь люди все-таки использовали разные браузеры для посещения сайтов.
Итак, мы поняли, что вырисовывается кое-что интересное, и продолжили разработку. Правда, тестирование веб-магазина Chrome скоро вернулось на технологию Selenium, потому что оставшиеся 23% функциональности требовали локального кода Java для поддержки отправки файлов и безопасного входа. Оглядываясь назад, мы понимаем, что небольшое улучшение тестируемости на сервере решило бы проблему с AJAX-вызовами на клиенте.
Мы проверили, как RPF ведет себя на популярных сайтах. Вся информация доступна в открытой вики проекта BITE. Сейчас она немного устарела, многое исправлено по сути, но можно сформировать общее представление о том, что не работало. Считайте, что показано качество альфа-версии. Итак, RPF работал для большинства сценариев, но оставались еще серьезные нестандартные случаи.
Джо Аллан Мухарски проделал огромную работу над нашим неуклюжим пользовательским интерфейсом, чтобы превратить его из чисто гиковской вещи для разработчиков в нечто интуитивно понятное. Он попробовал скрывать пользовательский интерфейс до тех пор, пока в нем не возникнет необходимость, и сделать все простым и удобным для поиска. Мы не проводили формальных исследований удобства использования, но мы наблюдали за сообществом тестировщиков, которые использовали эти инструменты почти без инструкций, и внутренними пользователями, которые сообщали о багах Google Maps без особых проблем. В более сложных частях RPF обнаружились неприятные сюрпризы, но базовая функциональность записи и воспроизведения, похоже, для большинства людей оказалась вполне понятной.
Со временем проект RPF вырос из экспериментального проекта команды тестирования в формальную часть всей команды Chrome, где его теперь используют для регрессионного тестирования. Команда работает над тем, чтобы дать возможность тестировщикам, которые не умеют программировать, возможность генерировать регрессионные сценарии с помощью BITE/RPF.
Присоединяйтесь к нашей работе по сопровождению BITE/RPF (http://code.google.com/p/bite-project/). Не забудьте поблагодарить По Ху и Джоэла Хиноски, которые двигают проект вперед.
- Специфика .NET Compact Framework: ADO.NET
- 6.16.12 Кодирование Record Route
- Классы синхронизации, внедренные в версии .NET Framework 4.0
- Personal Video Recorders
- Backing Up and Restoring the Master Boot Record
- Рекомендации по обработке событий в среде .NET Framework
- Managing DNS records
- Adding address and pointer records
- Viewing and updating DNS records
- Updating zone properties and the SOA record
- Modifying the SOA record
- Chapter 1 The .NET Framework