6. Keyword Driven Testing (Тесты, управляемые ключевыми словами)

Назад: 5 Присоединяемые и Самотестирующиеся приложения Содержание Дальше: 7 Data Driven Testing

Keyword Driven Testing – это сравнительно новая возможность, появившаяся впервые в TestComplete 7. Keyword Driven Testing – это визуальное представление тестовых скриптов, когда каждому действию (щелчок мышью, нажатие клавиш, выбор элементов списка и т.п.) сопоставляются ключевые слова (keywords). Несколько ключевых слов объединяются в действия (actions). Подобная организация тестовых скриптов очень хорошо знакома пользователям QuickTest Pro, для тех же, кто ранее работал с другими инструментами, эта технология будет новой.
Хотя начиная с 7 версии TestComplete по умолчанию записывает именно Keyword Driven тесты, мы намеренно рассматривали сначала работу с обычными тестами, чтобы учебник был одинаково полезен в том числе для пользователей более ранних версий.
В документации к TestComplete вместо Keyword Driven Test используется сокращенное название Keyword Test, в нашем учебнике мы для краткости будем использовать название KD Test.

Запись KD Test-ов

Давайте для начала создадим простой KD Test. Для этого необходимо щелкнуть правой кнопкой мыши в проекте на элементе KeywordTests, выбрать пункт меню Add – New Item и в появившемся окне Create Project Item ввести имя нового теста (например, KDT1). После чего в окне TestComplete откроется панель KD Test.

Мы создали пустой тест, который можно изменять (к этому мы вернемся немного позже). Теперь давайте запишем новый тест, используя встроенные возможности TestComplete.
На панели инструментов в верхней части нажмем кнопку Record New Test и запишем какие-нибудь действия в приложении Калькулятор (например, вычислим значение выражения «3+2»), причем кнопки «3» и «2» будем нажимать мышью, а «+» и «=» – при помощи клавиатуры. В результате получим такой скрипт:

В колонке Item отображается имя объекта, с которым производится действие, в колонке Operation – производимая операция (например, ClickButton – нажатие на кнопку), в колонке Value – параметр операции (например, имя кнопки в нашем случае) и в колонке Description – описание операции.
При этом, если вы используете NameMapping в вашем проекте, значения в колонке Item будут более читабельны и понятны, например:

Предположим теперь, что вы хотите очищать поле результатов Калькулятора перед тем, как начать выполнять операции, для чего первым действием хотите нажимать кнопку C (Cancel). Для добавления действий в существующий тест предназначена кнопка Append to Test панели инструментов. После нажатия на эту кнопку вы опять переходите в режим записи, записываете необходимые действия и они добавляются в конец существующего скрипта.

С помощью кнопок со стрелками в правой части панели инструментов  можно переместить действие нажатия на кнопку C вверх. Теперь перед началом выполнения вычислений поле результатов будет очищаться.

Теперь с помощью кнопки Run Test на панели инструментов запустим наш тест и убедимся, что все работает так, как задумывалось.

Модификация KD Test-ов

Основное отличие KD Test-ов от обычных в том, что они позволяют осуществлять те же самые операции, что и обычные скрипты, однако при этом используя визуальный редактор вместо написания кода. В KD Test-ах можно использовать циклы, поиск и ожидание объектов по различным свойствам, использовать условные выражения, блоки перехвата исключений и т.п.
Начнем с простых действий. Например, добавления в лог сообщения (Message).
В левой части панели KDT находится панель Operations, которая позволяет добавлять новые действия в KD Test-ы.

Операции разделены на логические группы:

  • Test Actions – сюда входят операции с различными элементами управления, работа с меню, функции для поиска объектов и пр.
  • Logging – работа с логом (добавление сообщений, ошибок, предупреждений, папок и т.п.)
  • Checkpoint – добавление чекпоинтов (контрольных точек)
  • Statements – добавление различных условий, циклов и т.п.
  • Miscellaneous – прочие возможности (вставка задержки, работа с индикатором)

Для начала попробуем добавить простое действие: вывод в лог сообщения «выполнение действие 3+2». Для этого перетащим элемент Log Message с панели Operations в то место скрипта, где вы хотите выводить это сообщение (например, сразу за нажатием на кнопку C).
После этого на экране появится диалоговое окно Log Message, в котором задаются параметры команды.

Здесь мы указываем, какой тип сообщения мы хотим использовать (Message, Error, Event, Warning), а также основной и дополнительный текст (Message и Remarks).
После этого можно нажать Finish и закончить операцию добавления действия, а можно нажать Next и перейти на вторую страницу окна, где посмотреть все параметры действия и, в случае необходимости, изменить их.

Эти параметры обсуждались в главе 3.8 Использование логов и анализ результатов, поэтому мы не будем здесь подробно на них останавливаться.
После этого наш KD Test будет выглядеть так:

Аналогичным образом с использованием мастера добавляются и другие элементы скрипта. Например, в следующем примере мы вставим проверку значения в текстовом поле Калькулятора после того, как выполним действия. Для этого мы используем чекпоинт Property Checkpoint.
Точно так же перетаскиваем элемент из панели Operations в то место, где хотим выполнить проверку (в нашем случае сразу после нажатия на кнопку «=») и с помощью инструмента Finder Tool  выделяем на экране текстовое поле, после чего нажимаем Next.

На второй страничке диалогового окна Create Property Checkpoint выбираем нужное свойство (в нашем случае wText) и нажимаем Next.
На третьей страничке выбираем одно из условий проверки (равно, неравно, начинается с…, заканчивается на… и т.п.). В нашем случае мы выберем строгое сравнение «равно»:


И еще раз запустим наш скрипт, чтобы убедиться, что все работает как предполагалось. Результат работы скрипта:

В качестве еще одного примера рассмотрим операцию FindObject, аналогично такой, которую мы использовали в главе 3.5 Синхронизация выполнения скриптов. Мы нажмем на кнопку C, предварительно найдя ее по двум свойствам: WndCaption=C и Enabled=True. Первое свойство характерно для двух кнопок (кнопка сброса C и кнопка C, используемая в шестнадцатеричных вычислениях), а второе свойство в нашем случае характерно только для кнопки сброса.
Для этого сначала удалим действие нажатия на кнопку C в начале скрипта, а затем добавим новую операцию FindObject.

С помощью инструмента Finder Tool выделим родительский элемент, чьим потомком является кнопка (в нашем случае это главное окно Калькулятора) и нажмем Next.
В следующем окне введем свойства и значения, по которым будем искать элемент

И снова нажмем Next. Обратите внимание, что если TestComplete не сможет на этом этапе найти подходящий элемент управления, он выдаст сообщение об ошибке.
На следующей страничке выберем действие, которое необходимо проделать с найденным объектом (Click или ClickButton) и нажмем Finish. В результате получим такой тест:

Теперь нам не нужно передавать индекс кнопки в качестве параметра, что улучшает структуру и читабельность тестов.

Переменные и параметры

Как и в обычных тестах, в KD Test-ах могут использоваться переменные и параметры. Для них предназначены соответственно вкладки Variables и Parameters на панели Keyword Driven Test-ов.

Для добавления переменной необходимо перейти на вкладку Variables, щелкнуть правой кнопкой мыши по списку и выбрать пункт меню New Item. Затем выбрать для появившейся переменной имя, тип и значение по умолчанию. Затем эту переменную можно использовать в KD Test-ах. Например, ниже показан пример цикла while, который исполняется до тех пор, пока переменная counter не достигнет значения 3. Чтобы этот цикл не был бесконечным, мы поместили в него инструкцию, увеличивающую значение переменной на единицу во время каждого прохода цикла.

Настройки элемента While Loop в данном примере выглядят так:

Для увеличения значения переменной мы использовали операцию Set Variable Value, выбрав в настройках переменную counter, а затем выбрав в качестве значения элемент Code Expression и введя код для увеличения счетчика.

Добавление параметров делается точно так же на вкладке Parameters. Единственная разница – это колонка Optional, позволяющая задавать необязательные параметры.
Например, если в тесте заданы следующие параметры:

То вызов KD Test-а из скриптов будет выглядеть так:
function TestKDT()
{
KeywordTests.Test1.Run(“custom parameter 1″, false);
}

А результаты работы скрипта – вот так:

Конвертация Keyword-Driven тестов

При всем удобстве и простоте KD Test-ов, не все действия можно реализовать с их помощью. Частично это обусловлено различиями в языках программирования, а частично тем, что при помощи языков программирования можно организовать гораздо более сложные конструкции, чем при использовании Keyword-Driven тестов.  Также, возможно, вы захотите изучать тот или иной поддерживаемый TestComplete-ом язык при помощи конвертации ранее записанных скриптов, тогда вам тоже понадобится возможность конвертирования KD Test-ов в обычные скрипты.
Для того, чтобы сконвертировать KD Test в обычный тест, достаточно открыть его, щелкнуть в любом месте теста правой кнопкой мыши и выбрать пункт меню Convert to Script

После чего в появившемся окне Specify Routine Name необходимо выбрать существующий (или добавить новый) модуль и ввести имя функции, в которую будет сконвертирован KD Test.

В результате получим вот такой скрипт:
function KDT1( Param1,  Param2)
{
var  counter, PropNames, PropValues, ConvertedPropArray, ConvertedValuesArray;
counter = 0;
Log.Message(“Выполнение операции \”3+2\””, “”);
for(; counter < 3;)
{
PropNames = new Array(“WndCaption”, “Enabled”);
PropValues = new Array(“C”, “True”);
ConvertedPropArray = ConvertJScriptArray(PropNames);
ConvertedValuesArray = ConvertJScriptArray(PropValues);
Sys.Process(“calc”).Window(“SciCalc”, “Calculator Plus”, 1).Find(ConvertedPropArray, ConvertedValuesArray, 1000, true).Click();
Sys.Process(“calc”).Window(“SciCalc”, “Calculator Plus”).Window(“Button”, “3”).ClickButton();
Sys.Process(“calc”).Window(“SciCalc”, “Calculator Plus”).Window(“Edit”).Keys(“+”);
Sys.Process(“calc”).Window(“SciCalc”, “Calculator Plus”).Window(“Button”, “2”).ClickButton();
Sys.Process(“calc”).Window(“SciCalc”, “Calculator Plus”).Window(“Edit”).Keys(“=”);
aqObject.CompareProperty(Sys.Process(“calc”).Window(“SciCalc”, “Calculator Plus”, 1).Window(“Edit”, “”, 1).wText, 0, “5, “, false);
counter = KeywordTests.Test1.Variables.counter + 1;
}
Log.Message(“Test parameter 1″, Param1);
Log.Message(“Test parameter 2″, Param2);
}

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

Назад: 5 Присоединяемые и Самотестирующиеся приложения Содержание Дальше: 7 Data Driven Testing