|
|
|||||||||||||||||||||||||||||
|
Первое впечатление: Rational RobotJ 1.0Томас Р. Арнолд II (Tom Arnold), Xtend Development
Оглавление
ВведениеКомпания Rational Software попросила меня поделиться впечатлениями об их новом продукте - Rational RobotJ. Они сделали это по двум причинам. Наиболее очевидная из них состоит в том, что я длительное время принимаю участие в проектах автоматизации систем тестирования, и часто наблюдал за методами, использовавшимися в подобных прикладных программах, в том числе и неправильными. Вторая причина в том, что я никогда не использовал Rational Robot или его модели Test Manager. Обладая опытом в области автоматизации, я смогу свежим взглядом оценить решения, применяемые Rational для автоматизации тестирования программного обеспечения. Получив бета-копию Rational RobotJ, я горел желанием поскорее приступить к выяснению, что нового этот продукт Rational привнес в методы тестирования программного обеспечения. Как автор сценариев автоматизации Rational Visual Test с многолетним опытом, я хотел видеть, как поведет себя этот программный пакет при тестировании приложений, основанных на веб-технологиях. После нескольких минут, потребовавшихся на установку пакета, предварительного знакомства с интерфейсом и обычных в таких случаях попыток выяснить "что есть что", я решил начать серьезное изучение и нажал кнопку Record new RobotJ script (Записать новый сценарий RobotJ) на панели инструментов. "А что, - подумал я про себя. - Давай посмотрим, насколько обширный сценарий создает эта программа, если она пытается не только точно записывать мои действия, но и синхронизировать их между собой для обеспечения корректной работы при воспроизведении". Я был немного циничен, когда приступал к изучению инструментария записи и воспроизведения. Мною двигало желание узнать больше о возможностях этого программного пакета, даже несмотря на то, что сам я был приверженцем старого доброго метода кодирования "на скорую руку". Тем не менее, применение регистратора - один из лучших способов изучать системы автоматизации и оптимальные методы их использования. Оказалось, как вы скоро увидите, что использование регистратора было (и остается) не просто великолепным способом получения дополнительной информации о RobotJ. Это инструмент, которым по предположениям Rational Software большинство разработчиков будут создавать свои сценарии тестирования. И с этой задачей он также справляется превосходно. ПредпосылкиДо меня дошли слухи, циркулировавшие среди коллег, занимающихся автоматизированным тестированием, что Rational Software готовилась к выпуску нового продукта, ориентированного на тестирование веб-приложений на основе HTML и Java. К тому же Java использовался там в качестве языка программирования, позволяя использовать обычные преимущества объектно-ориентированного программирования. Мне хотелось увидеть результаты работы этой программы как можно скорее. Поэтому я не мог дождаться того момента, когда эта новая программно-ориентированная "игрушка" попадет ко мне в руки. Долгое время в работе по автоматизации тестирования программного обеспечения и описанию этого процесса моей любимой программой был пакет Rational Visual Test. Похожий на Visual Basic язык программирования этой программы делал сам процесс программирования простым, а расширенные возможности работы с указателями для сложных структур данных создавали дополнительные удобства в работе. К тому же, начиная с версии 6, в Visual Test была добавлена функция тестирования веб-страниц. Эта возможность работала великолепно и сейчас работает, но она добавлена к инструменту тестирования, который изначально спроектирован только для тестирования программ Microsoft Windows. Visual Test создавался как полное, комплексное средство автоматизации тестирования программного обеспечения, и будьте уверены, он останется таким на долгие годы. Я до сих пор использую VT, даже для решения нетестовых задач. Но когда в тот момент готовилось к выпуску новое программное решение, ориентированное исключительно на тестирование веб-приложений, мне действительно захотелось ознакомиться с его возможностями, и возник подлинный интерес к тому, как язык Java используется для написания сценариев Я всегда старался обучать своих студентов и клиентов передовым методам программирования, а также принципам создания объектно-ориентированных сценариев, ограничения доступа к данным, инкапсуляции и простых форм наследования, реализуемых даже не в таком объектно-ориентированном языке. Эти методы хороши, но использование объектно-ориентированного языка не просто дает возможность их применения, а вынуждает их использовать. Вот почему я доволен тем, что в RobotJ в качестве языка программирования используется Java. ТестированиеЯ предполагал, что начну с чего-нибудь несложного: щелкну несколько ссылок, проверю работоспособность линейки прокрутки окна браузера, доступность ссылок, находящихся вне экрана и время задержки между загрузками страниц. Но затем мои мысли пошли по другому пути: если проводится тест-драйв нового автомобиля, для которого обещан мощный двигатель и спортивная подвеска, то буду ли я, сев в машину, проверять работу указателей поворота и настраивать на приемнике национальный радиоканал? Ну, положим, так оно и есть. Но, кроме того, я определенно должен захотеть проехать на этой машине и найти множество способов испытать ее возможности, даже слушая при этом программу " О чем говорит страна " на национальном государственном канале. Вероятно, я не стал получать слишком много сведений при первом запуске, поскольку мне не хотелось, чтобы "машина врезалась в стену". Я только хотел, чтобы записанный мною сценарий действительно заработал, и был настроен немного скептически относительно работоспособности записанного сценария без дополнительной корректировки. Итак, я нажал кнопку "запись" и проделал следующие операции.
Ожидаемые результатыЯ, как программист автоматизированных систем тестирования, имел предвзятое мнение о том, что можно ожидать от работы с регистратором RobotJ. Эта точка зрения сформировалась в процессе работы с Visual Test и другими автоматизированными системами тестирования. Я ожидал возникновения некоторых проблем, а именно.
Фактические результатыПолученные результаты, против ожидания, были приятным сюрпризом.
Чтобы получить образец кода, я попытался создать пример сценария, упомянутого на первых страницах этого документа. Сгенерированный код представлен на следующей странице в Распечатке 1. (Примечание: для повышения удобочитаемости документ пришлось подвергнуть незначительному форматированию, заключавшемуся в удалении некоторых автоматически добавленных комментариев). Я потрачу несколько следующих страниц, чтобы сравнить использование RobotJ для генерации этого сценария с известными программами, а также обсудить некоторые ключевые аспекты созданного сценария и затем проанализировать результаты его выполнения. Распечатка 1 Порядок создания сценарияТеперь, когда очевидно, что сценарий содержит все шаги, которые перечислены ранее (см. распечатку 1), я собираюсь оставшуюся часть документа посвятить объяснениям того, как был создан этот сценарий, а также поподробнее рассмотреть наиболее интересные моменты этого процесса. Добро пожаловать в Rational RobotJКак уже упоминалось, RobotJ - это новейшая разработка Rational Software, предназначенная для тестирования Java- или веб-приложений, работающих на платформах Microsoft Windows и Unix. 4 RobotJ встраивается в открытую интегрированную среду разработки (Integrated Development Environment, IDE) фирмы IBM, известную как Eclipse. Используя IDE-среду IBM, как показано на рис.1, RobotJ оказывается в одном ряду с другими программными решениями, разрабатываемыми Rational Software и прочими производителями, которые обеспечивают простую интеграцию инструментария в общий интерфейс. Рисунок 1: RobotJ использует открытую интегрированную среду разработки (IDE) фирмы IBM, известную как Eclipse. Перед запуском процедуры создания тестового сценария RobotJ необходимо подготовить контейнер, где может быть сохранен этот сценарий. Этот контейнер называется Data Store (Хранилище данных). Такой файл проекта должен создаваться в первую очередь, перед совершением любых последующих операций. На рисунке 1 видно, что я создал хранилище данных, назвав его tomsrobotjdatastore (оригинально, не правда ли?). В этом хранилище данных находится первый записанный сценарий, First_one, показанный на распечатке 1. Я опустил описание шагов по созданию хранилища данных, поскольку хотел сконцентрировать внимание на сути программы RobotJ. Подготовка к записиПервым шагом, сделанным мной при подготовке к записи автоматизированного сценария, был запуск Configuration Editor (Редактора конфигураций), показанного на рис. 2 на следующей странице. Это диалоговое окно открывается после того, как в RobotJ в меню Configure (Конфигурирование) выбран пункт Configure Applications for Testing (Конфигурирование приложений для тестирования). Оказавшись в диалоговом окне, я нажал кнопку Add (Добавить), при этом было предложено выбрать, что именно будет тестироваться: приложение Java, приложение HTML или программа Windows. В этом примере я создал запись для моего веб-сайта, расположенного по адресу. Это даст мне возможность выбрать свое приложение из списка приложений, поддерживаемых редактором конфигураций, как только появится интерфейс записи. Рисунок 2: Необходимо ввести начальную информацию о приложении, которое будет тестироваться с помощью RobotJ. Эта информация используется регистратором и позволяет указывать приложения, подлежащие тестированию. Запись нового сценария RobotJПосле выполнения некоторых необычных начальных настроек, я готов был начать автоматизацию тестирования на примере собственного веб-сайта. Как уже упоминалось ранее, основными задачами было перейти на веб-сайт, выполнить поиск информации о продукте, добавить позицию в корзину интернет-магазина, перейти к подсчету стоимости товара, в ходе которого клиентом может быть введена информация для выписки счета и отправки товара, отправить заказ и закрыть браузер. Я запустил процесс, щелкнув кнопку Record New RobotJ (Новая запись RobotJ), расположенную на панели инструментов прямо под меню Script (Сценарий), как показано на рис.3. Это привело к появлению диалогового окна, приглашающего ввести имя сценария. Свой пример я озаглавил "First_one" (недопустимы пробелы и любые символы, кроме букв и цифр) и нажал кнопку Finish, чтобы начать сеанс записи. Появились постоянно активное окно, озаглавленное Recording (Запись) и панель инструментов с обилием забавно оформленных кнопок, их внешний вид показан на рис.4. Это окно позволило мне контролировать ключевые аспекты записи сценария. Рисунок 3: Красная кнопка, расположенная на панели инструментов прямо под меню Script запускает регистратор. Рисунок 4: Окно "Recording" отображается все время, пока работает регистратор RobotJ. Я нажал четвертую слева кнопку в окне Recording, показанном на рис.4. Это была кнопка Start Application (Запустить приложение), которая не принесла никаких сюрпризов и вызвала появление диалогового окна Start Application. Данное диалоговое окно, содержащее список приложений, было сконфигурировано ранее с помощью Configuration Editor. Как показано на рис.5, я выбрал приложение, которое требовалось протестировать, и нажал кнопку Ok. Если бы я остановил регистратор в этот момент, то сгенерированный сценарий выглядел бы так, как показано в распечатке 2. Рисунок 5: Диалоговое окно Start Application может быть вызвано нажатием кнопки Start Application на панели инструментов в окне Recording. Распечатка 2 Первые шесть строк созданы секретным модулем RobotJ, доступным для пользователей в форме Java-пакетов, представляющих собой сгруппированные программные интерфейсы приложений. Все пакеты и выполняемые ими функции перечислены в таблице 1.
Таблица 1: Основные пакеты, включаемые в сценарии, созданные с помощью функций регистратора. Самым первым элементом является класс Resources.First_oneHelper. Этот класс создается, когда регистратор анализирует подлежащее тестированию приложение. Для каждого элемента управления в интерфейсе пользователя создается отдельный метод, при этом используется имя соответствующего элемента управления. Этот метод в дальнейшем может быть использован для взаимодействия с этим элементом управления. Поскольку объектно-ориентированное программирование используется в RobotJ тем способом, которым оно и должно использоваться, каждый элемент управления становится черным ящиком, и любые изменения в классе не оказывают или почти не оказывают влияние на используемый метод. Описание остальных пакетов имеется в расширенной интерактивной справочной системе, поставляемой с RobotJ. Вновь обратимся к распечатке 2. После операторов "import" идут следующие строки: public class First_one extends First_oneHelper Первая строка определяет новый класс (First_one) на основе автоматически созданного класса First_oneHelper. Класс First_oneHelper был создан, когда RobotJ анализировал подлежащее тестированию приложение и создал ряд методов, обеспечивающих упрощенный доступ к прикладным элементам управления. (Класс First_oneHelper сам определяется на основе базового класса RobotJ Helper). В рамках этого нового класса First_one создается метод testMain(). Первая команда в функции testMain() обращается к startApp() с параметром, соответствующим записи, созданной мною в редакторе конфигураций ("Xtend Development, Inc."). Если теперь изменить местоположение приложения (например, ввести другой URL), то будет необходимо всего лишь поправить значения, введенные в редактор конфигураций, и сценарий продолжит работу. Browser_htmlBrowser(Document_XtendDevelopmentInc(),DEFAULT).click( Приложение запущено и выполняется; теперь необходимо проверить, что я нахожусь именно там, куда собирался попасть. Добавление контрольных точекДля контроля синхронизации сценария в него могут быть добавлены контрольные точки (VP). Эту операцию можно выполнить в окне Recording, показанном на рис.4 (пятая кнопка слева). Нажатие кнопки VP вызывает диалоговое окно, показанное на рис.6. В этом диалоговом окне имеется три закладки. Первая вкладка позволяет щелкать и перетаскивать идентификатор на объект, используемый в процессе контроля. Рисунок 6: Контрольные точки помогают удостовериться, что вы находитесь там, где думаете. Вторая вкладка из показанных на рис.6, отображает каждый объект иерархически, так, как RobotJ отображает их в браузере. Чтобы проверить, что я нахожусь на домашней странице Xtend Development, я выбрал рисунок consultingsm.jpg, единственный на этой странице. Если RobotJ найдет указанный рисунок в данной точке сценария, то можно быть уверенным, что все идет по плану. На третьей вкладке изображен указательный палец с секундомером, с ее помощью можно добавлять задержки в сценарий. Такая задержка может быть настроена на ожидание появления определенного управляющего элемента. Если указанный элемент управления не появляется, а заданный период времени истек, возникает исключение "пропущен", в результате которого RobotJ регистрирует ошибку в журнале. Нажав кнопку диалогового окна Next, показанного на рис.6, можно перейти к заключительному диалогу, допускающему тонкую настройку контрольной точки, как показано на рис.7. Рисунок 7: Заключительный шаг при добавлении контрольной точки (VP) в записываемый сценарий. Выполняется настройка значений, после чего нажатие кнопку Finish позволяет добавить контрольную точку в сценарий и возобновить запись: consultingsmjpg_textVP().performTest(); (Обратите внимание, что имя объекта, используемого в контрольной точке, применяется для создания объекта consultingsmjpg_textVP() с наследуемым методом performTest()). Не существует каких-либо правильных или неправильных мест для расположения контрольных точек. Обычно контрольные точки добавляются тогда, когда происходят основные переходы, так, чтобы выполнение могло быть остановлено в ту же минуту, как только стало понятно, что не все идет по плану. Схемы тестируемых объектовРегистратор RobotJ хранит рабочие копии всех объектов, задействованных во время сеанса записи. Большинство этих объектов помещается в группу с названием Test Object Map (Схема тестируемого объекта). Другие элементы, например, те, что созданы в процессе определения контрольной точки, добавляются в раздел Verification Points (Контрольные точки). В схеме тестируемого объекта отслеживаются все характеристики объекта, включая его имя, тип, родительские элементы, одноранговые элементы и прочие свойства. Имя элемента также используется для создания функций или методов, используемых сценарием для взаимодействия с объектом. Поскольку RobotJ не учитывает каких бы то бы ни было атрибутов объекта, то даже если его свойства изменяются в процессе разработки, велика вероятность, что сценарий продолжит работать без возникновения ошибки. Тем не менее, предупреждения будут регистрироваться в журнале, позволяя инженеру по автоматизации преобразовать объект и установить 100% для значения соответствия в RobotJ. На рис.8 приведена схема объекта, созданная в результате выполнения созданного мною сценария. Обратите внимание, что, несмотря на то, что на страницах, которые я посетил в процессе создания сценария, присутствовали сотни объектов, в схему включены только те из них, которые я использовал. Здесь не показана возможность управления весовыми коэффициентами, применяемыми к различным свойствам управляющего элемента в процессе поиска совпадений программой RobotJ. Эти весовые коэффициенты позволяют разработчику сценария указать, на что RobotJ должен обратить внимание, а что менее важно, когда в процессе выполнения сценария осуществляется поиск соответствующего элемента управления. Это просто великолепно: прерывания сценариев происходят значительно реже. Рисунок 8: Все объекты в тестируемом приложении преобразованы в функцию или метод, вызываемые из сценария автоматизации. Заключительная часть кодаОстальная часть исходного кода, сгенерированного регистратором, довольно проста, особенно теперь, когда вам понятно, откуда берутся имена функций. Записанный сценарий, по сути дела, самодокументирован, хотя RobotJ всюду любезно добавляет вспомогательные комментарии. Заключительные строки кода представлены в распечатке 3 (некоторые комментарии удалены для экономии места). Распечатка 3 Я не стал удалять из распечатки 3 одну строку комментариев, чтобы показать, что регистратор RobotJ отслеживает заголовки HTML, возвращаемые после отправки формы. Большой блок комментария содержит информацию, возвращаемую на обрабатываемую сценарием страницу (в данном случае на ASP-страницу, но это будет работать и в случае JSP-страниц). Такой тип комментариев будет очень полезен при тестировании, позволяя понять возвращаемые значения, не появляющиеся в строке URL (а также скрытые в заголовках HTTP). (Примечание. Блок комментариев в конце распечатки 3 представляет собой одну длинную строку, которая была поделена на части моим текстовым редактором. По этой причине в качестве меток комментариев вместо "/*" и "*/" используются символы "//"). Выполнение и результатыТеперь, когда сценарий сгенерирован, осталось только запустить его и взглянуть на результаты. Сценарий начинает выполняться при нажатии значка с изображением бегущего человечка (кнопка в панели инструментов приложения). При этом окно интегрированной среды разработки RobotJ автоматически сворачивается и открывается отдельное окно, показывающее статус выполняемого сценария. После завершения выполнение сценария запускается специальное приложение, отображающее протокол выдачи результатов и все встреченные ошибки. На рис.10 показан стандартный файл с результатами, полученный после успешного выполнения тестового сценария. Рисунок 9: Для начала выполнения тестового сценария RobotJ необходимо нажать значок с изображением бегущего человечка, расположенный на панели инструментов. Рисунок 10: Rational Test Manager отображает результаты выполнения теста RobotJ. ИтогиВ этом документе я продемонстрировал автоматизированный сценарий, вначале приведя окончательный текст сценария, чтобы показать, что может быть создано всего за несколько минут, а затем пошагово рассмотрел процессы конфигурирования, записи и выполнение этого сценария. Хотя данное описание последней выпущенной Rational Software системы автоматизации нельзя назвать исчерпывающим, я надеюсь, что документ дал вам хорошее представление о ее возможностях. Надежность регистратора значительно упрощает задачу генерации сценариев, обеспечивая превосходные примеры для тех, кто предпочитает быстрый стиль программирования, и не любит фиксировать свои действия, а также использует модель, которой обладает гибкостью, свойственной тестовому приложению.
|
|