in Профессиональное

CubicTest: пользовательские тестовые шаги / Custom Test Steps

Продолжаю переводить документацию по CubicTest. На этот раз мы рассмотрим пользовательские тестовые шаги (Custom Test Steps) в CubicTest (http://boss.bekk.no/display/BOSS/Custom+Test+Steps).

Пользовательские тестовые шаги позволяют вам писать свой собственный код, который будет выполняться во время выполнения теста. Например, вы можете использовать custom test step для того чтобы выполнить проверку или взаимодействие, которые нельзя смоделировать в графическом редакторе тестов CubicTest.

Позовательский шаг в CubicTest состоит из двух частей:

  • Определения родительского Пользовательского тестового шага (generic Custom Test Step – элемент в графическом редакторе тестов), который присваивает имя и описание тестовому шагу, а также может определять набор входных параметров для шага.
  • Реализации (реализаций) шага (написанный вами код), максимум – одна реализация на каждый плагин экспорта.

В теории вы можете написать реализацию тестового шага для всех доступных плагинов экспорота, если плагин предоставляет редактор для этого. Например, тестовый шаг для набора текущей даты в поле ввода может принимать в качестве параметра ID поля и заполнять его требуемым значением. Для того чтобы быть уверенным, что тест будет работать как с Selenium так и с Watir, нужно реализовать custom test step для обоих случаев.

Тем не менее, с версии 1.8.11 редактор тестовых шагов есть только у плагина Selenium Remote Control.

Создание Custom Test Step

  • Правокликните на папке в Package Explorer и выберите “New CubicTest Custom Test Step” (возможно вы захотите создать отдельную папку для ваших тестовых шагов).
  • Укажите имя шага и имя файла для него, нажмитие Finish.
  • На странице Custom Test Step, которая откроется, вы сможете создать реализацию тестового шага и определить параметры. Синяя ссылка – для создания реализации.

Редактор Custom Test Step в CubicTest
Реализация Custom Test Step в CubicTest

Для того чтобы добавить пользовательский шаг в тест нужно:

  • Перетащить пользовательский шаг из Package Explorer в графический редактор тестов.
  • Соединить шаг со страницей (состоянием) чтобы он мог быть выполнен.

Редактор Java пользовательских тестовых шагов для Selenium RC

Редактор позволяет создать реализацию пользовательского шага со следующими возможностями:

  • Добавлять и использовать любые Java-библиотеки, которые вам нужны.
  • Автодополнение кода и встроенный javadoc для Selenium RC API.
  • Отладка Java кода.

Для создания реализации:

  • Кликните на ссылку Cubic Test Selenium Extension на странице определения пользовательского шага.
  • Указать имя Java класса, который создаете.
  • Написать код класса. Смотрите документацию Selenium RC, если хотите знать больше про его API.

Вы будете писать реализацию интерфейса ICustomTestStep. Этот интерфейс имеет метод execute, который необходимо реализовать. мы предполагаем что вы используете ассерты в стиле JUnit, например assertEquals и т.д. В этом случае CubicTest сможет обрабатывать ассерты корректно. Вы также можете бросать другие типы исключений.

Параметры метода execute

  • arguments” (тип Map<String, String>) имена ключей берутся со страницы определения пользовательского шага (Custom Step definition page), а значения – со страницы свойств (properties) в графическом редакторе тестов.
  • “context” (тип IElementContext) Shared Custom Step Context. Делает возможным пересылать сообщения из одного тестового шага в другой не используя статические переменные. По умолчанию это пустой HashMap, пока вы не решите наполнить его чем-нибудь.
  • “selenium” (тип Selenium) объект Selenium Remote Control.

Метод может бросать исключения любого типа. Если исключение перехватывается CubicTest. java.lang.AssertionError, то будет step = failed, иначе – test exception.

Пример: пользовательский шаг, который выбирает окно браузера (например попап), на основании параметра windowName:

public class SelectWindow implements ICustomTestStep {
    public void execute(
        Map arguments,
        IElementContext context,
        Selenium selenium
    ) throws Exception {
        selenium.selectWindow(arguments.get("windowName"));
    }
}

Логгирование

Для логгирования можно использовать статический метод org.cubictest.core.facade.Logger. Логгер будет писать лог в доступную систему логгирования (Eclipse log system, если используется Eclipse, Commons Logging в противном случае).

Если вы хотите записать в лог наименование конкретного экземпляра пользовательского шага, который сейчас выполняется, создайте аргумент name для шага используйте во время выполнения класс Logger.

Важное замечание о таймингах в браузере

Выполняя пользовательский тестовый шаг, браузер может не загрузить страницу целиком. Есть две возможные стратегии для отслеживания данного события, в зависимости от типа приложения/страницы, которая тестируется (традиционная или Ajax/JavaScript).

Custom Test Step после загрузки страницы

При тестировании традиционных веб-приложений, вы можете установить чекбокс Wait for page to load before entering Custom Test Step в редакторе тестовых шагов (Custom Test Step Editor). В этом случае runner ожидает загрузки страницы, используя таймаут в секундах из предыдущего взаимодействия (опция timeout for result). Если таймаут явно не задан при предыдущем взаимодействии, его значение берется из более раннего взаимодействия (если он есть, опять таки). Если на предыдущих шагах таймауты не были заданы, используется значение timeout в файле test-project.properties, которое по умолчанию составляет 20 секунд.

Custom Test Step responding to Ajax or JavaScript

При тестировании Ajax/JavaScript страниц, вы не можете использовать selenium.waitForPageToLoad(..), так как страница не перегружалась. Вместо этого нужно использовать класс CubicWait с таймаутом, для проверки наличия элемента. Когда элемент будет присутствовать на странице и будет доступен для взаимодействия, тогда ожидание закончится (или будет исключение по таймауту).

Пример: ждем 10 секунд появления элемента и кликаем на него:

new CubicWait() {
    public boolean until() {
        return selenium.isElementPresent(yourLocator);
    }
}.wait("Page element not found: " + yourLocator, 10000);
selenium.click(yourLocator);

Write a Comment

Comment

*