2.2 Что такое testcase, appstate и как с ними работать

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

А теперь непосредственно перейдем к тесткейсам. Тесткейс – это некоторый модуль, содержащий реализацию сценария тестирования, тот код, который заставляет СилкТест ( а точнее его Агента) выполнять какие-то действия по тестированию функциональности некоторого продукта. В SilkTest-е тесткейс реализован в виде блока с ключевым словом testcase.
Формат записи следующий:
testcase <Testcase Name> ( [Argument List]) appstate <Appstate Name> , где

  • Testcase Name – имя тесткейса
  • Argument List – список аргументов через запятую. Данная чать используется нечасто ( как правило), но такая возможность есть и в некоторых случаях весьма полезна.
  • Appstate Name – имя application state-а.

С именем тесткейса все понятно, с аргументами тоже ничего сложного нет. Дело в том, что тесткейс можно вызвать из main или другого именованного блока (только если это не testcase или appstate) и код этот будет иметь вид:

Code

[ ] // Обычный тесткейс, который печатает фразу "Hello World!!!"
[+] testcase tc_MyTestcase()
	[ ] Print("Hello World!!!") 
[ ] 
[ ] // Тесткейс с параметрами. Печатает фразу "Hello World" iCount раз.
[+] testcase tc_RunMyTestcase( INTEGER iCount )
	[+] while( (iCount--) > 0 )
		[ ] Print("Hello World")
[ ] 
[+] main()
	[ ] tc_MyTestcase()
	[ ] tc_RunMyTestcase( 5 ) // Вызов тесткейсов из main блока

 

Это простой пример и по старой доброй традиции мы начали с Hello World приложения. Можете написать этот текст в SilkTest-е и нажать на F9. Результат будет иметь вид:

[ ] Script Test.t - Passed
[ ] Machine: (local)
[ ] Started: 08:17:59PM on 01-Mar-2006
[ ] Elapsed: 0:00:00
[ ] Passed:  2 tests (100%)
[ ] Failed:  0 tests (0%)
[ ] Totals:  2 tests, 0 errors, 0 warnings
[ ] 
[+] Testcase tc_MyTestcase - Passed
	[ ] *** DefaultBaseState is setting Browser active, No window was active
	[ ] Hello World!!!
[+] Testcase tc_RunMyTestcase (5) - Passed
	[ ] Hello World
	[ ] Hello World
	[ ] Hello World
	[ ] Hello World
	[ ] Hello World

Тут тесткейсы запустились из main блока. Их можно запускать и отдельно. Выбираем меню Run > Testcase. Появится окно со списком тесткейсов, которые можно запустить. Выбираем тесткейс и жмем кнопку Run. Тесткейс запустится. Как правило, тесткейсы не содержат параметров ( нужные значения вычитываются из внешних файлов или из других источников), а также не используется функция main, так как файлы скриптов тоже можно подключать друг к другу и могут возникнуть ошибки, если в нескольких файлах будет объявлен main.

 

 

Но это было лирическое отступление. Однако, было уже показано, что с тесткейсами уже в такой форме можно работать. Осталось нераскрытым только назначение ключевого слова appstate.
appstate – это некоторый блок, который выполняется сразу до и сразу после тесткейса, к которому этот appstate привязан. Формат записи такой:
appstate <Appstate Name> () [basedon <Base Appstate Name>]
,где:

  • Appstate Name – имя appstate-а
  • Base Appstate Name – базовый appstate.

Для чего он нужен? Блоки данного вида предназначены для приведения тестируемого продукта к некоторому состоянию с которого должен началься тесткейс и восстановить исходное состояние независимо от того, успешно или неуспешно завершился тесткейс. Как правило его действие сводится к старту приложения и закрытия всех ненужных окон. В частности для веб-приложений наиболее употребительный сценарий appstate-а:

  • Закрыть все окна броузера
  • Открыть броузер. Стартовать домашнюю страницу тестируемого сайта
  • Зарегистрироваться или убедиться, что пользователь вошел в систему

Исходя из определения appstate-а, данный блок привязывается к тесткейсам. Привязка осуществляется так:

Code

[+]appstate apsMyAppstate() basedon none
	[ ] Print("Appstate")
[ ]
[+] testcase tc_MyTestcase() appstate apsMyAppstate
	[ ] Print("Hello World!!!") 
[ ]

 

То есть тесткейс имеет поле для привязки appstate-ов. Если никакое начальное состояние не используется, то желательно это явно указать. Во-первых, есть appstate по умолчанию, называемый DefaultBaseState, а также пустой appstate, называемый none. Поэтому, если нужно записать тесткейс, который не требует приведения к некоторому начальному состоянию, то его заголовок имеет вид:
testcase MyTestCase() appstate none

Осталось рассмотреть всего один момент. Зачастую appstate ведет себя по-разному, в зависимости от того, в каком месте тесткейса он запущен ( до, после или во время выполнения тесткейса). Одним из примеров может быть удаление из таблицы записи, которая была добавлена в ходе тесткейса. В данном случае, до выполнения тесткейса appstate просто стартует приложение или делает какие-то настройки, а после завершения тесткейса, нужно осуществить действия по удалению записи. Чтобы выявить, на какой стадии выполнения находится тесткейс, используется функция GetTestcaseState(), которая возвращает следующие значения:

  • TCS_ENTERING – тесткейс еще не начал выполняться
  • TCS_EXITING – тесткейс уже завершил свое выполнение
  • TCS_RUNNING – тесткейс сейчас выполняется

То есть исходя из данных значений можно сделать ветвление, например:

Code

[+]appstate apsStateBranching () basedon none	
	[+]if( GetTestcaseState() == TCS_EXITING )
		[ ] Print("Block for exiting only")
	[ ]Print("Common Block")

 

То есть, если мы привяжем этот appstate к тесткейсу, то он в начале выдаст строку Common Block, а в конце еще и Block for exiting only.

Подведем небольшой итог:

  • testcase – блок, содержащий реализацию сценария автоматического тестирования
  • appstate – блок, содержащий реализацию сценария приведения тестируемого приложения в некоторое исходное состояние сразу до и сразу после выполнения тесткейса, к которому данный блок привязан
  • Можно корректировать действия appstate-а в зависимости от того, на каком этапе тесткейса он запущен

Это основные возможности и как правило их достаточно. Ну, а теперь можно уже кое-что написать. У нас есть тестовое приложение и описанный фрейм. То есть, мы сейчас вполне можем создать файл, например TestApp.t, и вписать строки вида:

Code

[ ]use ".\TestApp.inc"
[ ]
[+]testcase TestApp_Menu()
	[ ]

 

А теперь перейдем к сценарию тестирования. Итак, у нас есть продукт Test Application, который поставляется вместе с SilkTest-ом. Нужно описать сценарий, который проверяет правильность работы той или иной функциональности. Пройдемся по пунктам меню и сделаем проверку на правильность выполнения тех или иных операций, заодно можем детально рассмотреть работу с теми или иными элементами управления да и просто осветить некоторые стандартные (и не очень) приемы, используемые при написании скрипта автоматизированного тестирования. Итак, сценарий имеет вид:

№ шага Описание Ожидаемые результаты
1 Из главного меню выберите File < New Появится окно с заголовком MDI Child Window #1
2 Из главного меню выберите File < New еще раз Появится окно с заголовком MDI Child Window #2
3 Выберите меню File < Close Окно с заголовком MDI Child Window #2 закроется
4 Выберите меню File < Exit Окно приложения закроется
5 Запустите приложение. Главное окно приложения открыто
6 Для каждого пункта подменю Controls проделать следующие операции:

  • Выбрать пункт меню
  • В появившемся окне нажать на кнопку Exit
Появится диалог, соответствующий данному пункту
Диалоговое окно закроется
7
  • Выберите меню Controls > Textfield
  • Введите текст в однострочное поле ввода
  • Введите текст в многострочное поле ввода (6 строк)
  • Поставьте галочку на поле RichEdit
  • Выделите первые 2 линии и поставьте галочку в поле Bold
  • Выделите следующие 2 линии и поставьте галочку в поле Italic
  • Выделите следующие 2 линии и поставьте галочку в поле Underline
  • Нажмите Clear
  • Нажмите Exit
  • Окно Text Field откроется
  • Данные введены правильно
  • Данные введены правильно
  • Многострочное поле воспринимает текст как Rich Text
  • 1-е 2 линии выделены жирным шрифтом
  • Линии выделены наклонным шрифтом
  • Линии выделены подчеркиванием
  • Одно и многострочные поля для ввода очищены
  • Окно Text Field закроется
8
  • Выберите меню Controls > Check box
  • Снимите галочку с поля The check box
  • Кликните на поле The check box
  • Кликните на поле Enabled
  • Кликните на поле Enabled еще раз
  • Введите текст в поле Label и нажмите на кнопку Set Label
  • Нажмите Exit
  • Диалог Check box появится
  • Отметка снята с поля The check box
  • Галочка появится на поле The check box
  • Поле The check box деактивировано
  • Поле The check box активировано
  • Поле The check box изменит текст на введенный
  • Диалог Check box закроется
9
  • Выберите меню Controls > Static text
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Введите текст в поле Label и нажмите на кнопку Set Label
  • Нажмите Exit
  • Диалог Static text появится
  • Текстовое поле The static text деактивировано
  • Текстовое поле The static text активировано
  • Текстовое поле The static text изменит свое значение на введенное.
  • Диалог Static text закроется
10
  • Выберите меню Controls > Popup List
  • Введите текст в поле Text item и нажмите на кнопку Add Item .Повторите действие 5-10 раз (каждый введенный элемент должен начинаться с различных букв)
  • Поочередно введите первые буквы элементов списка
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Нажмите Clear
  • Введите текст “10” в поле Text item и нажмите на кнопку Set Data
  • Выберите поочередно все элементы
  • Нажмите Exit
  • Диалог Popup List появится
  • Текст введен и элементы с таким текстом добавлены в список
  • Выберется элемент, начинающийся с соответствующей буквы
  • Поле The popup list деактивировано
  • Поле The popup list активировано
  • Поле The popup list очищено, список пустой
  • Список заполнен значениями Item 1, Item 2, … Item 10
  • Соответствующий элемент выбран
  • Диалог Popup List закроется
11
  • Выберите меню Controls > ListBox
  • Введите текст в поле Text item и нажмите на кнопку Add Item
  • Повторите предыдущее действие 5-10 раз
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Нажмите Clear Items
  • Введите текст “10” в поле Text item и нажмите на кнопку Set Data
  • Поочередно установите галочку в поле Vertical Scrollbar,Horizontal Scrollbar,Multicolumn
  • В поле Select Type выберите Extended
  • Выберите одновременно первые 4 элемента
  • Выберите элементы 5, 7, 9
  • В поле Select Type выберите Multiple
  • Выберите одновременно все элементы
  • Выберите поочередно все элементы
  • Нажмите Exit
  • Диалог ListBox появится
  • Текст введен и элемент с таким текстом добавлен в список
  • Те же результаты
  • Поле The list box деактивировано
  • Поле The list box активировано
  • Поле The list box очищено, список пустой
  • Поле The list box заполнится 10-ю записями вида Item 1, Item 2 …
  • Поле The list box приобретет соответствующие атрибуты ( вертикальную/горизонтальную полосы прокрутки и т.д.)
  • Поле The list box изменит свой стиль на расширенный
  • 4 элемента выбраны одновременно
  • Элементы выбраны одновременно
  • Поле The list box изменит свой стиль на Multiple
  • Все элементы выбраны одновременно
  • Каждый из элементов выбран отдельно
  • Диалог ListBox закроется
12
  • Выберите меню Controls > Combo box
  • Введите текст в поле Text item и нажмите на кнопку Add Item
  • Повторите предыдущее действие 3 раза
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Нажмите Clear
  • В поле Style выберите Drop down
  • Введите текст в поле Text item и нажмите на кнопку Add Item (повторите эти действия 3 раза)
  • Кликните на поле Extended
  • Выберите поочередно все элементы
  • Нажмите Exit
  • Диалог Combo box появится
  • Текст введен и соответствующий элемент появился в The combo box
  • Тот же результат
  • Поле The combo box деактивировано
  • Поле The combo box активировано
  • Поле The combo box очищено, список пустой
  • Значение поля Style установлено в Drop down и стиль элемента The combo box изменен соответственно
  • Список The combo box содержит 4 элемента, соответствующих введенным строкам
  • Поле The combo box изменит свой стиль на расширенный
  • Соответствующий элемент выбран
  • Диалог Combo Box закроется
13
  • Выберите пункт Controls > Radio Button
  • Выберите поочередно все элементы радио-списка
  • Выберите элемент The custom choice и нажмите Disable
  • Выберите элемент The third choice. Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Введите текст в поле Label и нажмите кнопку Set Label
  • Нажмите на Exit
  • Диалог Radio Button появится
  • Соответствующие элементы выбраны
  • Элемент The custom choice деактивирован
  • Элемент The third choice выбран. Список деактивирован
  • Список активирован
  • Текст введен и заголовок списка радио-кнопок изменен
  • Диалог Radio Button закроется
14
  • Выберите пункт меню Control > List View
  • Создайте 3 колонки ( колонка создается путем ввода текста в поле Item Text и нажатием на кнопку Add Column)
  • Заполните 3 строки (вводим текст в поле Item Text и жмем на кнопку Add Item). Элементы вводятся построчно
  • Поочередно сделайте двойной клик мышкой на всех элементах
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Нажмите на кнопку Clear All, введите в поле Item Text строку “3*4″ и нажмите кнопку Set Data
  • Нажмите на кнопку Clear All. Создайте файл со следующим содержимым:
    	3*4
    	Column1
    	Column2
    	Column3
    	Item1-1
    	Item1-2
    	Item1-3
    	Item2-1
    	Item2-2
    	Item2-3
    	Item3-1
    	Item3-2
    	Item3-3
    	Item4-1
    	Item4-2
    	Item4-3
    

    Введите в поле Item Text текст @file, где file – полное имя только что созданного файла. Нажмите кнопку Set Data

  • В секции View выберите поочередно Icon, Small icon, List, Details
  • В секции Options поставьте галочки на всех полях
  • Выберите 1-ю и 3-ю строку одновременно
  • Снимите галочку с поля Header секции Options
  • Нажмите Exit
  • Диалог List View появится
  • Список The List View содержит 3 колонки
  • Список The List View заполнен 3-мя строками в соответствии с введенными данными
  • DoubleSelect of item < номер строки> detected
  • Список The List View деактивирован
  • Список The List View активирован
  • Список заполнится данными в 3 колонки и 4 строки. Имена колонок: Column < номер колонки>. Имена элементов: Item < номер строки>-< номер колонки>.
  • Список очистится. Список заполнится данными, аналогичными предыдущему пункту
  • Поле The List View последовательно отобразит элементы в виде больших значков, маленьких значков, списка и детального списка.
  • Все галочки в секции Options установлены
  • 1-я и 3-я строка выбраны одновременно
  • Галочка снята, заголовок поля The List View исчез
  • Диалог List View закроется
15
  • Выберите меню Control > Tree View
  • В поле Item введите значение “5” и нажмите на Set Data
  • Выберите элемент 5
  • Нажмите клавишу Up, а затем Left
  • Нажмите клавишу Right, а затем Up
  • Нажмите клавишу -, а затем +.
  • Сделайте двойной щелчек на пункте 2
  • Нажмите на Enabled
  • Нажмите на Enabled еще раз
  • Нажмите на Clear Items
  • Нажмите на Exit
  • Диалог Tree View появится
  • Элемент The Tree View заполнится элементами от 1 до 5 (каждый последующий элемент лежит ниже в иерархии)
  • Элемент 5 выбран
  • Выбран узел 4 и все его под-узлы схлопнуты
  • Узел 4 раскрыт и узел 3 выбран
  • Узел 3 вначале закроется, а потом раскроется
  • Узел 2 закроется
  • Элемент The Tree View деактивирован
  • Элемент The Tree View активирован
  • Элемент The Tree View очищен
  • Диалог Tree View закроется
16
  • Выберите меню Control > Page List
  • Введите текст в поле Item Text и нажмите кнопку Add Item
  • Нажмите кнопку Reset
  • Введите текст в поле Item Text и нажмите кнопку Add Item. Повторите это действие 4 раза
  • Выберите поочередно все закладки
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Нажмите на Exit
  • Диалог Page List появится
  • Появится закладка с заголовком, совпадающим с введенным текстом
  • Закладки исчезнут
  • Появятся 4 закладки, заголовки соответствуют тексту введенному в поле Item Text.
  • Все закладки поочередно выбраны
  • Закладки деактивированы
  • Закладки активированы
  • Диалог Page List закроется
17
  • Выберите пункт Controls > PushButton
  • Нажмите кнопку The button
  • Нажмите кнопку The default button
  • Нажмите кнопку The graphical button
  • Нажмите кнопку The custom button
  • Нажмите на поле Enabled
  • Введите текст в поле Label и нажмите кнопку Set Label
  • Нажмите на поле Enabled еще раз
  • Введите текст в поле Label и нажмите кнопку Set Label
  • Нажмите кнопку The custom button
  • Кликните в поле Label и нажмите клавишу Enter
  • Нажмите Exit
  • Диалог Push Button появится
  • Появится сообщение Click on ‘The button’ detected (закройте сообщение нажатием на ОК)
  • Появится сообщение Click ‘The default button’ detected (закройте сообщение нажатием на ОК)
  • Появится сообщение Click on ‘The graphical button’ detected (закройте сообщение нажатием на ОК)
  • Появится сообщение Click on ‘The custom button’ detected (закройте сообщение нажатием на ОК)
  • Кнопки деактивированы
  • Кнопка The custom button изменит свой текст на введенный
  • Кнопки активированы
  • Кнопка The custom button изменит свой текст на введенный
  • Появится сообщение Click on ‘The custom button’ detected (закройте сообщение нажатием на ОК)
  • Появится сообщение Click ‘The default button’ detected (закройте сообщение нажатием на ОК)
  • Диалог Push Button закроется
18
  • Выберите меню Controls > Cursors
  • Наведите курсор на секцию Pointer
  • Наведите курсор на секцию Insert
  • Наведите курсор на секцию Delay
  • Наведите курсор на секцию Cross
  • Наведите курсор на секцию UpArrow
  • Наведите курсор на секцию Size
  • Нажмите на Exit
  • Диалог Cursors появится
  • Курсор примет вид обычной стрелки
  • Курсор примет вид аналогичный курсору для ввода текста
  • Курсор примет вид песочных часов
  • Курсор примет вид графического крестика
  • Курсор примет вид стрелки вверх
  • Курсор примет вид крестика для изменения размеров окна
  • Диалог Cursors закроется
19
  • Выберите меню Control > Track Bar
  • Установите ползунок The Track Bar в значение 4
  • Введите в поле Position значение 6 и нажмите Apply
  • Введите в поля Minimum значение 10, Maximum – 20, Position – 15 и нажмите Apply
  • Введите в поле Position значение 6 и нажмите Apply. Повторите то же действие для значения 30.
  • Нажмите на поле Enabled
  • Нажмите на поле Enabled еще раз
  • Нажмите на Exit
  • Диалог Track Bar появится
  • Ползунок установлен в значение 4. Соответствующее значение хранится в поле Position
  • Значение введено и ползунок установлен в позицию 6.
  • Поля введены и ползунок установлен во введенное значение
  • Появится сообщение Position must be between 10 and 20 (закройте сообщение нажатием на ОК)
  • Элемент The Track Bar деактивирован
  • Элемент The Track Bar активирован
  • Диалог Track Bar закроется
20
  • Выберите меню Control > Up-Down
  • В поле The Up-Down введите 1, в поле Minimum – 1, в поле Maximum – 5. Нажмите Apply.
  • В поле The Up-Down 5 раз нажмите на стрелку вверх
  • В поле The Up-Down 5 раз нажмите на стрелку вниз
  • Установите флаг в поле Wraparound
  • В поле The Up-Down введите 1 и нажмите стрелку вниз
  • В поле The Up-Down убедитесь, что установлено значение 5, и нажмите стрелку вверх
  • Нажмите на Exit
  • Появится диалог Up-Down
  • Значения установлены.
  • Поле The Up-Down последовательно изменит своё значение от 1 до 5
  • Поле The Up-Down последовательно изменит своё значение от 5 до 1
  • Флаг установлен
  • Поле The Up-Down содержит значение 5
  • Поле The Up-Down содержит значение 1
  • Диалог Up-Down закроется
21
  • Выберите пункт меню Menu > Popup Menu
  • Кликните правой кнопкой мыши в поле Text field
  • Выберите пункт The item
  • Из контекстного меню выберите вначале Check, а затем Uncheck.
  • Из контекстного меню выберите вначале Enable, а затем Disable.
  • Повторите пункты 2-5 шага для кнопки Button, только активация контекстного меню происходит нажатием левой кнопки мыши.
  • Нажмите на Exit
  • Диалог Popup Menu появится
  • Контекстное меню появится
  • Появится окно сообщения (нажмите Enter чтобы закрыть его)
  • Напротив пункта меню The check item флажок сначала появится потом исчезнет
  • Пункт меню The enable item сначала активируется, потом деактивируется
  • Те же результаты
  • Диалог Popup Menu закроется
  • Этого сценария в качестве обучающего примера более чем достаточно. Он охватывает работу с основными типами объектов. Теперь можно приступить и к автоматизации этого сценария. Первым делом нужно гарантировать, что при запуске данного тесткейса приложение будет находиться в некотором детерминированном состоянии. Для этого в файле TestApp.inc допишем appstate :

    Code

    [-] appstate apsTestApp () basedon none
    	[-] if (!wTestApp.Exists (0))
    		[ ] Print ("Application not opened. Starting...")
    		[ ] wTestApp.Start (wTestApp.sCmdLine, wTestApp.sDir)
    	[ ] 
    	[ ] wTestApp.CloseAll ()
    
    

     

    Ну и соответственно тесткейс теперь имеет вид:

    Code

    ........
    [+]testcase TestApp_Menu() appstate apsTestApp
    	[ ]
    

     

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


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