Введение

  Содержание Дальше

Данное руководство описывает основные принципы работы с программой автоматизированного тестирования SilkTest.
Предполагается, что читатель знаком с основами объектно-ориентированного программирования (ООП), тестирования и разработки программного обеспечения.
Цель данного пособия: дать толчок начинающему изучать SilkTest, поэтому не надейтесь найти здесь исчерпывающее руководство.
Наиболее полным источником информации является Help, поставляемый с программой (на английском языке). Также предполагается хотя бы минимальное знание английского языка.
Все примеры делались на SilkTest версий 6.5, 7.1 и 7.5.

Все примеры, представленные в книге, вы можете найти в прилагающемся архиве здесь.

Авторы учебника: Николай Колесник, Геннадий Алпаев.

Начало работы с SilkTest

Прежде чем начинать работу, необходимо изучить базовые понятия SilkTest.
Скрипты в SilkTest состоят из двух частей: фрейм и тесткейс.

  • Фрейм (Frame) – это описания окон, с которыми работает SilkTest. Для каждого окна, которое будет использоваться в работе, необходимо создать описание (это делается автоматически). Подробно работа с фреймами описана в главе 1. Использование фреймов (Frame)
  • Тесткейс (Testcase) – собственно код программы, в котором описываются действия с системой (в частности, например, с окнами)

Информация об окнах обычно хранится в файлах с расширением *.inc, тесткейсы – в файлах с расширением *.t. В нашем первом примере для простоты мы поместим все в один файл с расширением *.t, хотя вообще делать это не рекомендуется (исключение можно сделать лишь для очень маленьких проектов, в которых нет смысла разбивать проект на несколько файлов).

 

В качестве примера для работы в нашем руководстве мы выбрали приложение TestApp, которое поставляется вместе с SilkTest.

Создание фрейма приложения

Итак, прежде всего создадим файл, в который затем будем помещать описания окон и скрипты. Для этого в SilkTest выбрите пункт меню File – New, в открывшемся окне выберите пункт 4Test script и нажмите ОК.

У вас откроется пустое окно, в которое можно помещать описания окон и скрипты. Желательно сразу сохранить файл, так как в случае написания кода вручную в несохраненном файле не будут работать функция Автозаполнения (выпадающий список с перечислением доступных свойств и методов) и всплывающие подсказки для функций (с перечислением необходимых аргументов). Для сохранения файла выберите пункт File – Save и сохраните файл.

SilkTest подготовлен к работе. Теперь необходимо подготовить наше тестовое приложение. Его можно открыть из главного меню Пуск – Программы – SilkTest – Sample Applications – TestApp Либо запустить файл testapp.exe из папки, в которую установлен SilkTest (“C:\Program Files\Segue\SilkTest” для старых версий SilkTest, либо “C:\Program Files\Borland\SilkTest” для SilkTest версии 8.0 и выше). Тестовое приложение запущено.

Теперь приступим к записи описаний окон (или, как их еще называют, оконных деклараций). Для этого в SilkTest выберем пункт меню Record – Window Declaration, дождемся появления окна Record Window Declaration, затем наведем курсор на заголовок окна TestApp и нажмем комбинацию клавиш Ctrl+Alt. В результате окно Record Window Declaration примет такой вид:

В нижней части окна мы видим список всех объектов приложения, расположенных в таком же иерархическом порядке, как они расположены в самом приложении. Выделяя объекты в этом списке в верхней части окна мы видим, как их распознает SilkTest.

В данном случае выделено собственно главное окно приложения. В разделе Window Detail мы видим, что это окно является окном класса MainWin (в зависимости от того, к какому классу принадлежит окно или элемент управления, с ним можно выполнять разные действия). Идентификатор окна (в нашем случае это TestApplication) – это, фактически, имя этого окна. Ниже мы видим поле Tag. Тег – это строка, уникальная характеристика окна, по которому SilkTest распознает элементы управления в приложениях. В правой части окна Record Window Declaration мы можем посмотреть более подробную информацию о теге. В нашем случае тег состоит из заголовка (Caption) и идентификатора (Window ID). Кроме того, у этого окна есть индекс (Index), в нашем случае он равен “#1″, однако, так как соответствующая галочка возле него выключена, он не будет присутствовать в теге.

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

Нажмите кнопку Options, отключите опцию Record Multiple Tags в нижней части окна Options, в разделе Default tag выберите Caption, в разделе Window declaration identifiers выберите Use the Caption и нажмите ОК.

Теперь в окне Record Window Declaration нажмите кнопку Resume Tracking (возобновить запись), снова наведите курсор мыши на приложение TestApp и нажмите Ctrl+Alt. Как видно, окно Record Window Declaration слегка изменилось. Теперь в качестве тега может выступать только один идентификатор (например, Caption), а не несколько, как было в прошлый раз.

Более подробно о тегах и о том, почему именно мы рекомендуем отключать опцию Record Multiple Tags можно прочитать в главе 1.2.2 Работа с тэгами (tags).

Теперь можно нажать кнопку Paste to Editor и описание окна TestApp вставится в документ SilkTest.

В полученном примере:

  • MainWin, Menu и MenuItem – это классы, по которым SilkTest различает, как работать с тем или иным элементом
  • TestApplication, File, New, Close (черного цвета) – это имена объектов приложения. Имена объектов можно (а иногда даже нужно) менять.
    Например, имя TestApplication кажется слишком длинным, его можно заменить на TestApp
  • “Test Application”, “File” (значения, содержащиеся в кавычках) – это теги объектов. По тегам SilkTest различает элементы управления одного класса.
    Например, пункты меню File, Control и Menu5 находятся на одном уровне иерархии (что естественно), а значит у каждого из них должен быть свой уникальный тег

 

Запись и воспроизведение скрипта

Когда декларации всех необходимых окон созданы можно приступить к записи и воспроизведению скрипта. Сразу оговоримся, что средства записи в SilkTest лучше использовать только на первых порах, знакомясь с приложением. В дальнейшем вам, скорее всего, придется перейти полностью на ручное написание скриптов. Однако пусть это вас не пугает: при создании сложных скриптов обычно гораздо проще писать все руками, чем сделать запись, а потом вносить изменения.

В качестве примера скрипта мы используем следующий сценарий:

  1. Выберем пункт меню File – New
  2. Передвинем главное окно приложения
  3. Выберем пункт меню File – New
  4. Закроем главное окно TestApp

 

Для начала записи выберите пункт меню Record – Testcase. На экране появится окно Record Testcase

В поле Testcase name введите имя теста (или оставьте существующее), в выпадающем списке Application state выберите пункт (None) и нажмите кнопку Start Recording.

После этого на экране появится небольшое окошко Record Status, в котором отображается статус записи и текущее окно, находящееся под курсором мыши. Кроме того, есть кнопка Pause, позволяющая приостановить запись, и кнопка Done, останавливающая процесс записи тесткейса.

Выполните в приложении TestApp действия, перечисленные выше, и нажмите кнопку Done в окне Record Status. На экране снова появится окно Record Testcase, однако на этот раз с записанным скриптом. Нажмите кнопку Paste to Editor и записанный код вставится в документ SilkTest.

Давайте проанализируем полученный код.

  • Скрипт начинается с ключевого слова testcase. Далее следует его имя (Test1), в скобках можно передать параметры для этого тесткейса. Затем следует ключевое слово appstate со значением none (подробнее об аппстейтах читайте главу 2.2 Что такое testcase, appstate и как с ними работать, сейчас мы не будем углубляться в эту тему)
  • Далее следует ключевое слово recording, которое показывает, что код ниже был записан автоматически. Это ключевое слово является лишь информативным и его можно смело удалить
  • TestApp.SetActive () – активация окна приложения. Хотя SilkTest автоматически активирует окно при первом обращении к нему (или к любому элементу внутри этого окна), все же желательно использовать метод SetActive(), чтобы быть точно уверенным, что окно активировано
  • TestApp.File.New.Pick () – выбор пункта меню File – New. Метод Pick() используется для выбора пунктов меню (для других элементов управления обычно используется метод Click() )
  • TestApp.Move (325, 189) – метод Move() используется для передвижения окон по экрану. В качестве параметров в этот метод передаются новые координаты по горизонтали и вертикали
  • TestApp.Close () – метод Close() служит для закрытия окон

 

Обратите внимание на то, как SilkTest обращается к объектам. Если нам нужно обратиться к пункту меню New, который является потомком меню File, мы не можем написать TestApp.New. В этом случае SilkTest выдаст ошибку. В этом примере совсем немного элементов управления и нет большой вложенности объектов (иерархии). Однако в больших приложениях иерархия может быть огромной (10-20 уровней вложенности). В таких случаях необходимо существенно модифицировать фрейм, группируя элементы управления не так, как это делает SilkTest по умолчанию. Об этом подробнее рассказывается в главе 1. Использование фреймов (Frame).

Теперь осталось запустить записанный тесткейс и посмотреть, отработает ли он так, как был записан. Не забудьте открыть приложение TestApp, которое было закрыто в процессе записи!

Для того, чтобы воспроизвести скрипт, необходимо выбрать пункт меню Run – Testcase, в появившемся окне выбрать необходимый тесткейс (в нашем случае это Test1) и нажать кнопку Run.

Скрипт отрабатывает примерно за 1 секунду и происходящее практически невозможно понять! В конце SilkTest выдаст отчет о проделанной работе (во сколько времени скрипт начал работать, как долго работал, сколько произошло ошибок и предупреждений и т.п.). Более подробно обо всем этом мы поговорим в следующих главах.

Несколько слов о редакторе SilkTest

Вы, скорее всего, уже заметили, что редактор в SilkTest отличается от большинства других редакторов кода. И это неспроста. Дело в том, что в отличие от других языков программирования, в языке 4Test используется иерархическое представление блоков кода.

В языке с++, например, блоки выделяются в помощью фигурных скобок {..}. В языке Pascal отделение блоков производится с помощью конструкции begin..end. В SilkTest для того, чтобы выделить какой-то блок (например, условный блок if, или циклы for), необходимо поместить код, который должен быть в этом блоке, на один уровень “правее” в редакторе. Точно так же можно скрывать длинные комментарии, оставляя видимой только первую строку и раскрывая весь комментарий по мере надобности.

Если вы поместите какой-то блок кода в недопустимом месте, то SilkTest пометит эти строки красными крестиками, а в строке статуса выдаст сообщение Syntax error.

“Передвигать” блоки текста можно с помощью комбинаций клавиш Alt + стрелочки (вверх, вниз, влево или вправо, в зависимости от того, куда вам необходимо передвинуть блок текста). Чтобы “раскрыть” блок текста, нажмите Ctrl+клавиша плюс на цифровой клавиатуре. Ctrl+цифровой минус, наоборот, свернет блок текста.

Если вы попытаетесь передвинуть блок слишком далеко влево (например, кусок кода за пределы уровня ключевого слова testcase), то SilkTest просто не даст вам допустить эту ошибку.

В примере с ключевым словом recording мы можем избавиться от этого слова таким образом.

  1. поставьте курсор на строку, содержащую слово recording и нажмите комбинацию клавиш Shift+стрелка вниз. Выделится вся строка
  2. нажмите клавишу Delete. Строка удалится
  3. теперь выделите все строки, которые были внутри блока recording и нажмите комбинацию клавиш Alt+стрелка влево. Весь выделенный текст переместиться на один уровень влево, на котором раньше было ключевое слово recording

 

И хотя последний пункт не является обязательным (равнозначные строки кода могут иметь любой уровень вложенности), все же лучше не делать излишней вложенности там, где в этом нет необходимости.

Например, следующие два тесткейса совершенно одинаковые с точки зрения SilkTest и будут выполняться одинаково хорошо.


  Содержание Дальше