Основная задача, которую я решал при разработке проекта – это предоставление возможности управления браузером из java программы, а также  предоставление базового функционала для работы с загруженной в браузер страницей. Написание  автоматизированных тестов, а также сохранение результатов  тестирования в мою задачу не входят.

Автоматизированный тест – это программа, проверяющая правильность работы другой, на порядок более сложной программы, используя средства, предоставляемые программой или библиотекой для автоматизированного тестирования, для отправки в тестируемую программу запросов и получения от неё результатов обработки запросов.

Тестирование web приложений заключается в том, что  автоматизированные тесты, используя разработанную систему автоматизированного тестирования и API, производят загрузку в браузер html страниц тестируемого приложения, анализ  содержимого страниц, которые вернул сервер, и формируют новые запросы на сервер путем ввода данных в поля ввода и перехода по ссылкам. Логика по собственно проверке правильности работы web сервера путем анализа дерева html объектов и сохранения результата прогона автоматизированного теста реализуется в тесткейсах.

 

Для  работы автоматизированных тестов  web приложения требуется возможность:

1.Отправить на тестируемый сервер запрос на получение html страницы.

2.Получить от тестируемого сервера html код или структуру дерева html объектов загруженной страницы.

3.Если было получено дерево html объектов, требуется навигация по этому дереву и получение значений атрибутов и текста, которые хранятся в  html объектах.

4.Формирование и отправка нового запроса на тестируемый web сервер.

 

 

Для получения html страниц от сервера и формирования новых запросов на сервер, проект использует браузер Internet Explorer.

На диаграмме использования отражено использование дипломного проекта для тестирования web приложения. Существует ядро (объект Browser Helper Object и класс NetworkManager), задача которого – предоставлять возможность управления браузером и получения html кода, загруженного в браузер, для API части. В API части реализовано построение собственного дерева html объектов (для этого используется библиотека htmlParser).Также, в API скрыты для разработчика запросы к классу NetworkManager, тем самым, упрощая процесс разработки автоматизированных тестов. В API, разработанном в рамках проекта, присутствует только базовая функциональность для  взаимодействия с  браузером Internet Explorer и работы с html объектами на странице. Предполагается, что при разработке автоматизированных тестов для конкретного web приложения разработчиками автоматизированных тестов будет написано собственное API, расширяющее функциональность стандартного и упрощающее процесс разработки автоматизированных тестов для конкретного  web приложения.


Рисунок 4.1. Применение проекта при тестировании web приложений.

 

Более подробно структура проекта представлена на диаграмме компонентов. Для управления  браузером, в браузер добавляется dll файл, автоматически загружающийся в браузер сразу после запуска Internet Explorer –объект Browser Helper Object. Эта библиотека написана на языке C++ в среде разработки visual studio 2005.В ней используется библиотека ATL для упрощения управлением временем жизни COM объектов. Все операции, требующие вызова функций браузера или операционной системы, выполняются в этом модуле. Для  того, чтобы управлять объектом Browser Helper Object из java программы, используется протокол UDP. Протокол UDP выбран потому, что при  пересылке UDP пакетов по адресу localhost потери пакетов исключены, а затраты системных ресурсов на передачу пакетов по протоколу UDP  значительно меньше, чем при передаче по протоколу TCP.

На языке java написан класс NetworkController. Задачи, которые возложены на этот класс –это управление объектом Browser Helper Object, то есть отправка команд, которые объект Browser Helper Object должен выполнить, а также получение от объекта Browser Helper Object данных из браузера –html код загруженных в браузер страниц, получение значений, которые хранятся в полях ввода. Кроме того, в объекте Browser Helper Object реализована базовая функциональность для автоматической записи автоматизированных тестов. После получения команды от java части, в объекте Browser Helper Object сохраняются все действия, выполняемые пользователем системы в браузере. После  получения соответствующей команды, лог этих действий пересылается в java часть. На основании полученных данных, java часть в состоянии самостоятельно сгенерировать код, который повторит действия, выполненные пользователем.

Однако, логика по автоматизированной генерации кода автоматизированных тестов на основании логов Browser Helper Object, не является частью проекта, поэтому реализована не была.

Непосредственно с html кодом в автоматизированном тесте работать неудобно.

Поэтому, мною было написано API, использующее библиотеку htmlParser для разбора html кода и представления его в виде в виде дерева html объектов. API , написанное в рамках проекта – это надстройка над библиотекой htmlParser и классом NetworkController, позволяющая работать с html кодом, загруженным в браузер, как с деревом html объектов, и выполнять операции, требующие управления html объектами в браузере прозрачно для программиста (то есть, разработчик автоматизированных тестов должен только знать, например, по какому html объекту нужно кликнуть для перехода на нужную страницу, а какой метод у класса NetworkController для этого нужно вызвать, и с какими параметрами – это скрыто в API).

Рисунок 4.2. Диаграмма  компонентов проекта.

 

Объект BHO после запуска пытается подключиться к  java части. Если эта попытка успешно не заканчивается, объект BHO завершает свою работу. Если подключиться удается, объект BHO начинает исполнять команды java части.