Archive

Archive for Август, 2008

Описание главного окна (MainWin declaration)

Август 29th, 2008

Описание главного окна требует особого внимания, т.к. непосредственно с ним будут осуществлятся основные действия.

Описание главного окна (как впрочем и любого другого) начинается со слова window. Далее идет описание класса окна, в частности – MainWin, за ним следует идентификатор, определяющий название окна по которому к нему будет идти обращение непосредственно в скрипте.

Главное окно (как и многие другие окна) идентифицируется с помощью нескольких меток, потому, ичпользуется зарезервированное слово multitag, нижеследующие метки позволяют безошибочно отличить его от других.

Советы:

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

SilkTest

Запись тестового фрэйма

Август 29th, 2008

Перед тем как начать писать тест кейсы в SilkTest’е, необходимо записать Тестовый фрэйм (Test frame) приложения. Тестовый фрэйм – это скелет приложения, служащий основной для построения и написания тест кейсов. Все элементы окна (страницы) находятся внутри тестовго фрэйма. Тестовый фрэйм является составным файлом проекта, имеет расширение .inc. Этот файл будет содержать описания главного окна приложения, а так же всех дочерних окон и всевозможных dialogBox’ов.

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

Допустим, ваше приложение выглядит следующим образом (рис 1):

Рис. 1. Пример приложения.

В данном случае мы имеем окно, внутри которого находится панель, текстовое поле, статическое текствовое поле и две кнопки, в свою очередь на панели находится комбобокс и еще одна кнопка. В таком случае, иерархическая структура окна, будет восприниматся SilkTest’ом следующим образом (Рис.2.)

Рис. 2. Иерархическая структура приложения с позиции SilkTest’а

Есть два способа записать тестовый фрэйм приложения.

  1. С помощью инстурмента записи тесткейсов (Recording.tool)
  2. С помощью инструмента записи фрэймов (Window declarations tool)

Первый способ хорош, только в двух случаях: когда вы только начнете работать с проектом, и будутете использовать Recording tool для записи своих шагов, автоматически создастся тестовый фрэйм – т.е. вы будете лишены необходимости собственноручно его создавать. Это удобно. Второй случай – когда использование Recording tool оправдывает себя – когда Вы имеете уже сформированое описание окна, но SilkTest отказывается адекватно воспринимать отдельные его элементы, так как вы недавно получили новую версию тестируемого приложения в которой изменились (добавились, удалились, переименовались) какие-либо элекменты. Такое бывает и очень часто. В таком случае очень удобно выбрать Recording tool и просто прокликать все изменившиеся элементы окна, которые в новом билде тестируемого приложения не распознались SilkTest’ом. В таком случае, после сохранения результатов, SilkTest автомматически обновит описание окна в соответствии с последними изменениями. Опять же, это может съэкономить много времени.

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

К примеру, вот структура Microsoft Notepad если используется Recording tool для создавния фрэйма (Рис..3):

Рис.3. Структура окна Microsoft Notepad созданная с помощью Recording tool

Для того, что бы получить такую структуру, мною были произведены следующие действия:

  1. При открытом NotePad кликнуть:
  2. Menu – Open.

Что мы и видим из структуры: записано только окно UntitledNotepad, меню File и пункт меню Open.

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

Рис.4. Описание Notepad с помощью Window Declarations

Нажмите Ctrl+Alt что бы выйти из режима Tracking и вставьте полученную структуру в файл с описанием окна. Как видно из рисунка 5, структура Notepad несколько более сложная нежели представленная выше на рисунке 3.

Рис.5. Структура окна Notepad созданная с помощью иснтрумента Window Declarations

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

SilkTest

Интеллектуальное управление игровыми объектами с помощью макросов

Август 27th, 2008

Привет всем

Данным постом я открываю целый раздел – Идеи. Здесь я буду собирать все интересные мысли меня посещающие и которые достойны публикации. Их можно будет обсуждать и решать достойны они воплощения или нет.

У меня уже есть первая идея!

Она осенила меня совсем недавно. Мне кажется она может претендовать на роль первопроходца данной рубрики.

Итак, собственно мысль.

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

Но это не интеллектуально… :)

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

Мне кажется это будет очень интересно, а главное заставит игрока думать!

Идеи , , ,

SilkTest: Как создать data driven тест кейс?

Август 27th, 2008

Первый шаг.

Для того, что бы создать data driven (ДТ) тест кейс необходимо включить Data driven workflow (workflow -> datadriven). Вид главной панели инструментов должен будет измениться с (рис.1) на (рис.2)

1

Рис. 1. Стандартная панель, Basic workflow

2

Рис. 2. Дата дривен панель. Datadriven workflow.

Далее...

Второй шаг

Что бы конвертировать обычный тест кейс в дата дривен необходимо щелкнуть по кнопке Data Drive Testcase, затем выбрать тесткейс из списка (рис.3.):

3

Рис.3. Выбор обычного тесткейча для конвертирования его в Data driven.

Третий шаг

Далее необходимо выбрать новый или существующий файл для хранения дата дривен тест кейсов. Если файла не существует – созадаем новый.

4

Рис.4. Выбор файла для хранения Дата дривен тесткейсов.

Четвертый шаг

Следующий этап – выбор источника данных для создаваемого дата дривен тест кейса. Самый легкий способ – хранить данные в Microsoft Excel. Создайте файл и заполните первый столбец какими-нибудь текствовыми значениями, в конце должно получится что-то вроде (Рис.5.):

5

Рис. 5. Пример хранилища данных Microsoft Excel

Сохраните и закройте файл.

Пятый шаг

Выберите в качестве типа источника данных DDA Excel и укажите путь к созданному в прошлом шаге файлу (рис. 6).

6

Рис. 6. Выбор типа источника данных

Шестой шаг

Теперь осталось только присвоить новое имя для создаваемого дата дривен тесткейса. В этом нам поможет следующее возникшее диалоговое окно (Рис. 7.):

7

Рис. 7. Присвоение имени дата дривен тест кейсу

Седьмой шаг

В этом шаге Силк предложит найти и заменить те переменные котороые будут использоваться в качестве динамически изменяющихся (data driven) – собственно то, ради чего и создавался этот тест кейс. Если скрипт тесткейса еще не написан – пропустите этот шаг нажав Cancel. Это можно сделать и позже. Если ваш тест кейс уже готов и осталось только назначить динамически изменяемы переменные – значит самый раз сделать это.

8

Выбрав необходимые настройки попробуйте найти переменные и заменить их на ссылки к столбцам из источника данных (data source) созданного в четвертом шаге.

Заключение

В итоге у вас может получится что-то вроде этого:

9

Во второй строке мы инициализируем переменную sFileName и передаем ей значение rData которое в свою очередь берется из столбца file name. Таким образом имея три различных значения в file name столбце, дата дривен тесткейс будет запускаться три раза с разными значениями для sFileName.

Выводы

Такой подход очень удобен когда необходимо тестировать небольшую форму (логин, заполнение анкеты и т.д.), но с большим набором входных параметров. В таком случае data driven подход оправдывает себя в полной мере. Конечно его можно применять и в других случаях, пути тестера неисповедимы… :)

SilkTest

Измерение времени с SilkTest. Часть 2

Август 27th, 2008

Недавно вновь появилась необходимость измерения времени загрузки приложения. Естественно я выбрал силк тест как инструмент и принялся реализовывать задуманное. Все бы было ОК, но замер времени невозможно было осуществить с встроенными Silk test функциями, такими как Exists () или IsEnabled (). Поэтому пришлось написать свою собственную.
Итак, проблема может быть описана так: существует некое приложение, которое после успешной авторизации соединяется с удаленным сервером и получает от него список контактов. Список контактов доставляется порционно, в зависимости от ширины канала, загрузки сервера, производительности компьютера клиента и других факторов. В моем случае, контакты загружались порциями по 50-60 штук в секунду. В основном окне приложения предусмотрена строка состояния, которая отображает количество загруженных контактов.

Моя задача заключалась в следующем: измерить количество времени за которое приложение загрузит 500 контактов. Или другими словами, количество времени которое пройдет со времени нажатия на кнопку Sign in (для того что бы авторизоватся в системе) до того момента, когда в строке состояния основного онка приложения отобразится число 500.

Далее привожу пример скрипта Silk test’а с комментариями, который и замеряет необходимое количество времени:

testcase MeasureApplicationStartupTime () // объявление тесткейса
// объявление переменных
STRING sOverallTime, sParssingString1, sParssingString2
NUMBER nContacts
HTIMER TotalTimer
INTEGER i

i = 100
// создаем таймер
TotalTimer = TimerCreate ()
// функция которая стартует тестовое приложение
AppStart1 ()
// Включаем таймер
TimerStart (TotalTimer)
// Функция которая осуществляет процесс
// авторизации и соединяет клиент с сервером
SignIn (username2, password2, false)
// Время необходимое для выполнения предыдущей
// операции приблизительно равно 3 секундам,
// потому во избежания пропуская последовательности
// действий – ждем 3 секунды.
sleep (3)
// входим в цикл while
while (i > 0)
// здесь я применял фукцию GetField ()
// для того что бы распарсить строку,
// в которой у меня отображалось
// количество загруженных контактов.
// строка имела следующий вид:
// “The number of contacts loaded #100 …”
sParssingString1 = GetField (ApplicationMainWin.StatusBar.GetFullCaption (), “#”, 2)
sParssingString2 = GetField (sParssingString1, ” “, 1)
// присваиваем значению nContacts распаршенное
// значение количества загруженных контактов, теперь
// nContacts содержит только число загруженных контактов.
nContacts = Val (sParssingString2)
// создаем первое условие
if (nContacts < 700)
sleep(0.5)
i -= 1
// если по человечески то примерно так:
// если количество загруженных контактов
// меньше 700 то ждем пол секунды,
// затем отнимаем от счетчика i (который вначале равен 100) единицу.
// создаем второе условие
if (nContacts >= 500)
TimerStop (TotalTimer)
sOverallTime = TimerStr (TotalTimer)
Print (”Contacts loaded in {sOverallTime} seconds”)
TimerDestroy (TotalTimer)
i = 0

// если количество контактов больше 500,
// то останавливаем таймер, приводим его
// к строковому виду, печатаем финальную фразу :)
// уничтожаем таймер и обнуляем счетчик i
// что бы выйти из цикла while.

Вот собственно и весь скрипт, который позволяет заменить в какой-то степени готовую silk test функцию Exists ().

Если кому будет что-то непонятно – пишити в каментах, будем разбиратся.

На сим прощаюсь.

SilkTest

Замер времени с SilkTest за 10 минут

Август 27th, 2008

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

1. Создание и инициализация таймера.

2. Старт таймера. (таймер включен, время пошло…)

3. Выполнение приложением какого-нибудь действия.

4. Проверка выполнено ли действие.

5. Если да – остановка таймера.

Рассмотрим алогритм пошагово.

1. Для того, что бы создать и проинициализировать таймер можно использовать функцию TimerCreate ().

HTIMER hMyTimer

hMyTimer = TimerCreate()

2. Старт таймера осуществляется по команде TimerStart (hTimer). Где hTimer – ваш таймер, в данном случае hMyTimer.

TimerStart (hMyTimer)

3. После этого SilkTest должен выполнить участок скрипта, которые отвечает за выполнение действия. Допустим мы измеряем сколько времени требуется приложению для того что бы залогинится к серверу и загрузить 1000 контактов. Для этого нам просто надо в окне MyApp кликнуть по кнопке SignIn.
MyApp.SignIn.Click ()

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

  • Если по окончании процесса должно появится диалоговое окно или popup или еще какой либо объект, то можно использовать метод Exists (), который проверяет существует ли окно впринципе, например по окончании действия появляется диалоговое окно MyWindow, проверка будет выглядеть следующим образом:

if (MyWindow.Exists ())

Метод Exists () может принимать параметр таймаута, т.е. того времени в течение которого SilkTest будет ожидать появления окна.

  • Если по окончании действия элемент переходит из активного состояния в пассивное (или наоборот), можно воспользоваться методом IsEnabled (). Например, по окончании действия, кнопка переходит из активного состояния в пассивное, тогда проверка будет выглядеть так:

if (!MyButton.IsEnabled ())

5. Если проверка вернула ожидаемый результат, таймер следует немедленно остановить, для этого используется TimerStop (hTimer) функция.

TimerStop (hMyTimer)

Сейчас, переменная myTimer имеет тип HTIMER, но для того, что бы сохранить результат как STRING, переменную необходимо конвертировать. Для этого воспользуемся функцией TimerStr (hTimer).

sMyTimer = TimerStr (hMyTimer)

Теперь sMyTimer можно выводить в Result файл SilkTest’а с помощью функции Print () или сохранить его в лог файл.
После окончания работы с таймером его необходимо уничтожить, во избежание путаницы и нежелательных результатов. Это можно сделать с помощью функции TimerDestroy (hTimer).

Ниже приведен полный пример измерения времени с помощью SilkTest:

STRING sMyTimer
HTIMER hMyTimer
hMyTimer = TimerCreate ()
TimerStart (hMyTimer)
// … Проверка, выполнилось ли действие
TimerStop (hMyTimer)
sMyTimer = TimerStr (hMyTimer))
Print (”Action was done in {sMyTimer } seconds”)
TimerDestroy (hMyTimer))

SilkTest

Тайна девятой планеты

Август 27th, 2008

Нижеследующий флэшролик открывает серию моих работ по изучению дальнего и ближнего космоса :)

Всем кому интересно – изучаем скорость смены времен года на планетах Солнечной системы:

(по просьбам трудящихся выкладываю новую версию файла: теперь планеты не сталкиваются, а фокус на планету переходит по событию onPress)

solarsystem_20

Flash ,

Мой первый флэш сайт :)

Август 27th, 2008

Кликаем по ссылке:

index

Flash ,

Мой сайт

Август 25th, 2008

Добрый день!

Да, это то что я называл «Городом-садом». Он наконец-то готов. Кое-какой мусор еще не убран, ящики не разобраны, мебель не расставлена… но в целом все готово. Конечно, вы можете презрительно сузить глаза и сказать так это же ВордПрэсс! Да! а что в этом токого?

Хочу сразу предупредить – это не блог, блог у меня уже есть – maniak.blog.tut.by, а это – мой сайт. Чувствуете разницу? И я пока тоже….

Надеюсь вскоре все изменится.

Новости

Привет мир!

Август 25th, 2008

Добро пожаловать в WordPress. Спасибо за выбор качественного перевода от lecactus.ru. Это Ваша первая запись. Отредактируйте или удалите ее. Затем начинайте заниматься блогингом!

Новости