10. Создание собственных надстроек (Extensions)

Назад: 9 Object Driven Testing Содержание Дальше: 11 Другие возможности

Большинство возможностей в TestComplete реализовано с помощью надстроек (Extensions). Например, работа с ADO, поддержка .NET приложений, пользовательские формы и многое, многое другое – всё это реализовано с помощью надстроек (или плагинов – plug-ins). Чтобы посмотреть полный список установленных надстроек, необходимо в TestComplete выбрать пункт меню File – Install Extension… При этом на экране отобразится окно Extensions.
 
Здесь можно посмотреть список всех доступных надстроек и отключить те из них, которые не используются.
Для создания собственных плагинов необходимо скачать TestComplete SDK на сайте AutomatedQA.
Кроме обычных надстроек есть так называемые скриптовые надстройки. Их отличие от обычных надстроек в том, что они создаются с помощью самого TestComplete без использования сторонних средств разработки. Посмотреть список скриптовых надстроек можно, выбрав пункт меню File – Install Script Extensions.
 
С помощью скриптовых надстроек можно создавать новые программные объекты (например, объекты, аналогичные объектам ADO, DDT, BuiltIn), новые действия, которые доступны во время записи скриптов (аналогично checkpoint-ам) и новые действия для Keyword-Driven тестов.
Конечно, с помощью языков JScript и VBScript можно создать подобные объекты и не прибегая к использованию надстроек, однако такие объекты менее удобны: при использовании методов этих объектов вы не увидите всплывающей подсказки с описанием параметров методов, а в случае, если вы захотите передать свой объект кому-то, вам придется его передавать в виде отдельного модуля или просто текстового файла с дополнительным описанием всех свойств и методов. В случае использования надстроек эти проблемы решаются.
В этой главе в качестве примера мы рассмотрим создание Runtime Object-ов. Создание Checkpoint-ов и Keyword-driven Extension-ов очень похоже на создание Runtime объектов, а использование SDK выходит за рамки этого пособия.

Создание новых объектов (Runtime Objects)

Создание своих объектов позволяет улучшить читабельность кода и упростить доступ к различным функциям, предназначенным для работы с одной сущностью. Например, TestComplete предоставляет возможность работать с MS Excel через OLE. Это единственный способ считать данные из произвольной ячейки в Excel-файле (так как объект DDT предоставляет последовательный доступ к строкам, что не всегда удобно).
Предположим, мы хотим создать новый объект с названием ExcelOLE, с помощью которого и будем считывать/записывать данные. У этого объекта должны быть следующие методы:

  • Create – создать новый файл
  • Open – открыть существующий файл
  • Close – закрыть подключение к файлу

И свойства:

  • Sheet – текущая рабочая страница
  • Cell – ячейка

Методы Create и Open должны принимать в качестве параметров имя файла, свойство Cell должно принимать 2 параметра: строку и колонку. Для простоты мы будем задавать колонку ее номером, а не именем (т.е. колонка A=1, B=2 и т.д.).
То есть в идеале мы должны будем написать следующую функцию
function TestExcelOLE()
{
  var ee = ExcelOLE;
  ee.Create(“c:\\file1.xls”);
  ee.Open(“c:\\file1.xls”);
  ee.Sheet = “Лист1″;
  ee.Cell(3, 3) = “New text”;
  Log.Message(ee.Cell(3, 3));
  ee.Close();
}
и она должна создать новый файл, записать текст «New text» в ячейку C3, а затем считать записанное значение и вывести в лог. Причем в редакторе TestComplete мы будем видеть список доступных свойств и методов этого объекта.
 
Приступим.
 Прежде всего создадим новый модуль, причем его имя должно отличаться от имени объекта. Мы назовем объект ExcelOLE, а модуль – ExcelOLEcode.
 
В модуль необходимо поместить все объекты, с которыми будут работать методы нашего объекта. В нашем случае это будут:
var Sheet – текущий рабочий лист
var oWorkBook – текущий файл
Далее необходимо определить функции-методы. Имена функций могут отличаться от имен методов, которые вы хотите видеть в своем объекте, их соответствия все равно придется устанавливать вручную. Мы же будем называть функции точно так же, как будут называться методы объекта (create, Open и Close).
function Create(fileName)
{
  oWorkBook = Sys.OleObject(“Excel.Application”).Workbooks.Add();
  oWorkBook.SaveAs(fileName);
  oWorkBook.Close();
  Sys.OleObject(“Excel.Application”).Quit();
}

function Open(fileName)
{
  oWorkBook = Sys.OleObject(“Excel.Application”).Workbooks.Open(fileName);
}

function Close()
{
  oWorkBook.Save();
  oWorkBook.Close();
  Sys.OleObject(“Excel.Application”).Quit();
}

Как видите, пока ничего сложного. Мы просто создаем обычные функции, которые работают с обычными переменными. Теперь перейдем к свойствам.
Свойства бывают двух типов: обычные (в нашем примере это Sheet) и индексируемые (в нашем примере это свойство Cell, которое принимает 2 параметра: строку и колонку). Как и во многих языках программирования, для того, чтобы работать со свойствами, нам необходимо для каждого из них указать пару методов-аксессоров get/set. Причем можно как указать оба аксессора, так и один из них, тогда свойство будет доступно только для чтения или только для записи. И опять же, имена методов-аксессоров могут быть любыми, а соответствие между методами и свойствами будут установлены позже. Вот как выглядят аксессоры для свойства Sheet:
function GetSheet()
{
  return Sheet;
}

function SetSheet(sheetName)
{
  Sheet = sheetName;
}
Здесь мы связываем методы-аксессоры с объявленной в начале переменной Sheet.
А для свойства Cell нам переменная не нужна. Мы объявим методы-аксессоры, которые будут напрямую работать с ячейкой Excel’я. Вот как они будут выглядеть:
function CellRead(row, col)
{
  return oWorkBook.Sheets(Sheet).Cells(row, col).value;
}

function CellWrite(row, col, text)
{
  oWorkBook.Sheets(Sheet).Cells(row, col).value = text;
}

Как видите, в этих методах мы обращаемся к переменной oWorkBook, которая предварительно должна быть инициализирована с помощью метода Open, описанного выше.
Теперь, когда наш код написан и отлажен, мы можем создать собственно описание объекта. Для этого нам понадобится создать xml-файл в любом редакторе с названием description.xml. Вот содержимое, которое необходимо поместить в этот файл:
<?xml version=”1.0″ encoding=”UTF-8″?>
<ScriptExtensionGroup>
  <Category Name=”Runtime Objects”>
    <ScriptExtension Name=”Excel OLE” Author=”Gennadiy Alpaev” Version=”1.0″ HomePage=”www.tctutorial.ru”>
      <Script Name=”ExcelOLEcode.js”>
        <RuntimeObject Name=”ExcelOLE”>
          <Method Name=”Open” Routine=”Open”>
            Opens an Excel file as OLE object
          </Method>
          <Method Name=”Create” Routine=”Create”>
            Creates a new Excel file
          </Method>
          <Method Name=”Close” Routine=”Close”>
            Closes an Excel file
          </Method>
          <Property Name=”Cell” GetRoutine=”CellRead” SetRoutine=”CellWrite”>Excel cell</Property>
          <Property Name=”Sheet” GetRoutine=”GetSheet” SetRoutine=”SetSheet”>Excel sheet</Property>
          <Description>Provides access to Excel files via OLE</Description>
        </RuntimeObject>
      </Script>
    </ScriptExtension>

  </Category>
</ScriptExtensionGroup>
Рассмотрим по очереди все секции этого xml-файла.

  • ScriptExtensionGroup – указывает на начало специального файла-описания настройки TestComplete
  • Category – вид надстройки (в нашем случае – Runtime Objects)
  • ScriptExtension – информация о надстройке (имя, автор и т.п.)
  • Script – имя файла, в котором хранится исполняемый код
  • RuntimeObject – здесь хранится имя объекта, как оно будет отображаться в окне автозаполнения редактора TestComplete

Далее идут перечисления методов (Method) и свойств (Property). Для каждого метода указывается его имя (Name=) и имя функции, которая будет выполняться при вызове этого метода (Routine=), а также описание метода (внутри тега Method). Для каждого свойства указываются его имя, get-аксессор, set-аксессор (Name, GetRoutine, SetRoutine) и также описание внутри тега Property.
Последним идет тег Description с описанием объекта Обратите внимание, что тег description должен быть именно последним!
Теперь нам необходимо создать собственно файл скриптовой надстройки из имеющихся двух файлов (файл кода и файл description.xml). Для этого оба файла надо поместить в одну папку, заархивировать в ZIP-архив любым архиватором и сменить расширение на tcx.
Надстройка создана и готова для инсталляции! Чтобы установить надстройку, просто щелкните по ней двойным щелчком в Проводнике и нажмите ОК в открывшемся диалоговом окне.
 
Затем зайдите в TestComplete в меню File – Install Script Extension, нажмите кнопку Reload и включите чекбокс напротив имени подключенной надстройки.
 
Теперь у вас есть новый объект, который вы можете использовать точно так же, как и любой встроенный объект TestComplete-а.

Назад: 9 Object Driven Testing Содержание Дальше: 11 Другие возможности