РАЗРАБОТКА ПАНЕЛИ УПРАВЛЕНИЯ ДЛЯ ЗАПУСКА АВТОМАТИЗИРОВАННЫХ ТЕСТОВЫХ СЦЕНАРИЕВ
Никита Олегович Желяков, Тимур Александрович Золотухин
Новосибирский государственный университет, г. Новосибирск
Данная статья посвящена вопросам автоматизации тестирования. В ней авторы описывают собственный подход, объединяющий две современные практики тестирования и разработки программного обеспечения: функциональное тестирование и непрерывную интеграцию (continuous integration). Авторы разработали набор плагинов, позволяющих автоматизировать исполнение тестовых сценариев и удобно отслеживать полученные результаты.
Ключевые слова: автоматизация тестирования, функциональное тестирование, continuous integration, Hudson, Selenium.
ВВЕДЕНИЕ
Тестирование – один из важнейших этапов создания конкурентоспособного программного продукта. Именно тестирование позволяет выявить ошибки в программном обеспечении и установить несоответствие системы заявленным требованиям. С технической точки зрения процесс тестирования заключается в исполнении бизнес-сценариев приложения на некотором множестве исходных данных. Затем полученные результаты сверяются с заранее известными (эталонными). Это позволяет выявить ошибки. Эти ошибки необходимо исправить, дабы достичь желаемого качества продукта.
Хорошо известна оценка распределения трудоемкости между фазами создания программного продукта: 40% – 20% – 40% (Дизайн приложения – Разработка кода – Тестирование)[1]. Из неё видно, что тестирование является достаточно трудоёмким и затратным по времени процессом. Это ведёт к активным попыткам его автоматизировать. При этом необходимо не только снизить издержки, но и сохранить качество конечного продукта.
Представим, что есть сложный программный продукт. Пользователи могут взаимодействовать с ним через web-интерфейс. Возникает задача тестирования интерфейса пользователями с различными ролями при различных конфигурациях продукта.
Очевидно, что производить вручную такое тестирование очень неэффективно. Для этого используются различные сторонние приложения, например, Selenium Server[2]. Такие приложения принимают тестовый сценарий и исполняют его в браузере. То есть самостоятельно заходят на странички, заполняют формы, жмут кнопки, ходят по ссылкам и т.д. Каждое такое действие фиксируется скриншотом, что позволяет получить наглядный результат.
Понятно, что если создать библиотеку тестов и запускать их на множестве виртуальных машин с Selenium Server, то процесс тестирования ускорится и упростится.
Однако это лишь частично решает проблему.
Во-первых, при создании каждого тестового сценария необходимо вручную выбирать тесты, которые в него войдут. Также необходимо вручную задавать различные параметры. Зачастую это делается в консольном режиме, без графического интерфейса, что очень неудобно.
Во-вторых, необходимо вручную подсоединяться к виртуальной машине и запускать на ней Selenium Server.
Таким образом, сотрудники отдела контроля качества тратят на все эти активности неоправданно много времени и человеческих сил. Поэтому ставится задача автоматизации данного процесса.
Решением данной задачи мог бы стать программный продукт, обладающий удобным графическим интерфейсом и позволяющий автоматизировать все упомянутые операции. Продукт должен:
1. Скачивать наборы тестов из удалённого хранилища
2. Позволять пользователю составлять тестовые сценарии из наборов тестов
3. Запускать на виртуальных машинах Selenium Server
4. Исполнять тестовые сценарии
5. Собирать результаты выполнения тестов
6. Хранить шаблоны сценариев, которые позволяют выбирать часто используемые тесты
ОСНОВНАЯ ЧАСТЬ
В качестве основы было решено использовать сервер непрерывной интеграции Hudson[3]. Это бесплатный продукт с открытым исходным кодом, разрабатываемый собственным сообществом. Hudson де-факто является стандартом реализации непрерывной интеграции. Hudson имеет очень удобный web-интерфейс и довольно легко расширяем. Также он частично реализует нужный функционал. Hudson позволяет:
1. Скачивать наборы тестов из репозиториев
2. Запускать тестовые сценарии
3. Задавать различные параметры
4. Собирать статистику по выполненным тестам
Таким образом, необходимо было лишь дополнить Hudson необходимым и отсутствующим функционалом. Решено было сделать это в виде отдельных плагинов, дабы обеспечить независимость и возможность их раздельного использования. Для реализации проекта была выбрана платформа Java SE 6. Это было сделано, исходя из требований переносимости и сравнительной лёгкости разработки на данной платформе.
В ходе работы над проектом были реализованы несколько плагинов. Первый позволяет получить структуру директории, в которой находятся тесты, и отобразить эту структуру в web-интерфейсе в виде иерархического дерева. Каждый лист в этом дереве содержит имя тестового метода, а каждый узел содержит либо имя тестового класса, либо имя каталога, в котором находятся классы. Соответственно, корнем этого дерева является узел, содержащий имя каталога, в котором находятся все тесты. Таким образом, пользователь получает возможность использовать удобный графический интерфейс и выбирать тесты простыми кликами по их именам.
Существует две версии данного плагина. В первом случае, пользователь задаёт путь к директории с тестами и фильтр, по которому можно определить является ли файл тестом. Далее, плагин рекурсивно просматривает директорию, применяет фильтр к файлам, лежащим внутри неё, и таким образом получает дерево.
Во втором случае, пользователь должен указать путь к исполняемому файлу. Данный файл знает директорию, в которой лежат тесты, и фильтр для тестовых файлов. Он может самостоятельно построить дерево и вывести его на стандартный поток вывода. Поэтому плагин просто запускает этот файл, считывает информацию с потока вывода и отображает её в web-интерфейсе. Разумеется, что написание такого файла является задачей пользователя.
Второй разработанный авторами плагин позволяет использовать шаблоны тестовых сценариев. Тестовые сценарии часто создаются из одних и тех же тестов с одинаковым набором параметров. Чтобы не приходилось их постоянно выбирать, можно сохранить их в виде шаблона, и потом просто использовать шаблон.
Файл, содержащий шаблон, представляет собой обычный xml файл. В нём перечислены имена параметров, их значения, а также список выбранных тестов.
Когда пользователь хочет использовать шаблон, он выбирает нужный xml файл. Происходит загрузка выбранного файла в систему. При этом в web-интерфейсе пользователь видит появившиеся параметры и их значения, а также выбранные тесты. После этого пользователь может отредактировать значения параметров, добавить или удалить тесты.
Теперь тестовый сценарий готов к запуску.
Как уже говорилось выше, для успешного выполнения тестов необходим запущенный Selenium Server. Он запускает браузер, исполняет в браузере тесты и делает скриншоты, что позволяет получить наглядный результат. К сожалению, операционные системы семейства Windows позволяют делать скриншоты только при активной RDP сессии. То есть, при каждом запуске тестов необходимо открывать RDP сессию на удалённую машину. В рамках этой сессии нужно запустить Selenium Server. После этого необходимо постоянно поддерживать активность данной сессии.
Для решения этой задачи авторы создали третий плагин и два дополнительных приложения. Одно из них называется Remote Agent. Это приложение устанавливается на удалённую машину. Именно оно осуществляет запуск Selenium Server и позволяет осуществлять мониторинг его состояния. Сам Remote Agent запускается автоматически при открытии RDP сессии. Это происходит благодаря опции запуска приложений, которая доступна в протоколе RDP начиная с версии 6.0.
Используя плагин, пользователь может задать дополнительные атрибуты, которые характеризуют удалённую машину, на которой будет запущен Selenium Server. Например, установленный на удалённой машине браузер. Если пользователь введёт iexplore, то Selenium Server будет запущен на машине, где есть Internet Explorer. Если пользователь введёт firefox, то Selenium Server будет запущен на машине, где есть Mozilla Firefox. Пользователю также необходимо задать ip адрес и порт, где уже запущен Selenium Manager. Плагин отправляет Manager’у запрос, в котором содержится список атрибутов.
Selenium Manager – приложение, разработанное авторами. Оно имеет список всех доступных удалённых машин вместе с их атрибутами. Когда Manager получает запрос от плагина, он находит машину, удовлетворяющую всем атрибутам, находящимся в запросе. После этого Manager открывает RDP соединение к выбранной машине. И, как уже говорилось выше, в рамках этой сессии запускается Remote Agent и Selenium Server. После этого Manager сообщает плагину URL адрес запущенного Selenium Server’а.
Теперь тестовый сценарий может исполняться, а пользователь может отслеживать результаты тестирования. И на основании этих результатов делать выводы о качестве продукта.
ЗАКЛЮЧЕНИЕ
Таким образом, Hudson и разработанный авторами набор плагинов позволяют автоматически скачивать тесты, формировать тестовые сценарии, запускать их и отслеживать полученные результаты. Данные функции позволяют существенно ускорить процесс тестирования, а также снизить трудозатраты сотрудников отдела контроля качества[4]. Стоит отметить, что данная разработка принята в тестовую эксплуатацию в отдел контроля качества компании Parallels.
В настоящее время авторы занимаются развитием своего подхода. Идёт процесс оптимизации и усовершенствования различных компонент. В частности, планируется разработать аналогичное решение для платформ Linux и Mac.
Авторы также планируют выложить свою разработку в свободный доступ и опубликовать её исходный код.
Список использованных источников
1. Основы тестирования программного обеспечения. В.П. Котляров. [Электронный ресурс] // Веб-узел интернет университета информационных технологий. – Режим доступа:
http://www.intuit.ru/department/se/testing/.
2. О продукте Selenium [Электронный ресурс] // Веб-узел сообщества разработчиков продукта Selenium. – Режим доступа:
http://seleniumhq.org/.
3. О продукте Hudson [Электронный ресурс] // Веб-узел сообщества разработчиков сервера непрерывной интеграции Hudson. – Режим доступа:
http://hudson-ci.org/.
4. Test Automation: An Architected Approach by Dan Young [Электронный ресурс] // Веб-узел сообщества
Sticky Minds?. – Режим доступа:
http://www.stickyminds.com/sitewide.asp?ObjectId=8336&Function=edetail&ObjectType=ART.
Желяков Никита Олегович – студент, Новосибирский государственный университет, e-mail: nzhelyakov@gmail.com.
Золотухин Тимур Александрович – студент, Новосибирский государственный университет, e-mail: tzolotuhin@gmail.co