Автологируемые контролы

При написании скриптов автоматизированного тестирования на 4test (и не только) одним из важных аспектов является результирующий файл, получаемый после выполнения скрипта. В данном результирующем файле довольно подробно должна быть представлена информация о последовательности всех действий, которые произвел скрипт. Поэтому в самом коде постоянно нужно следить за логированием и писать много ненужного (для самого процесса тестирования) кода.
[ ] //Пример #1
[ ] STRING sUserName = "administrator"
[ ] 
[ ] wMainWnd.HtmlTextField("$user name").SetText(sUserName )
[ ] Print("В текстовое поле 'user name' был помещен текст {sUserName}.")
[ ] 
[ ] wMainWnd.HtmlPushButton("$login").Click()
[ ] Print("Нажата кнопка 'login'.")

Как видно из примера, практически на каждую строчку с определенным действием приходится добавлять строку логирования этого самого действия. Хорошим решением в данном случае будет создать свой собвственный набор контролов со всеми необходимыми методами, которые будут автоматически логировать все свои действия.
Для модернизации примера приведенного выше создадим два winclass-а: MyPushButton и MyTextField с переопределенными методами Click() и SetText() соответственно.
[-] winclass MyPushButton : HtmlPushButton
 [-] void Click(int iBtn optional, int iX optional, int iY optional)
  [ ] Print("Нажата кнопка '{this.GetCaption()}'.")
  [ ] derived::Click(iBtn, iX, iY)

[-] winclass MyTextField : HtmlTextField
 [-] void SetText(STRING sValue)
  [ ] Print("В текстовое поле '{this.GetCaption()}' был помещен текст {sValue}.")
  [ ] derived :: SetText(sValue)

Теперь можно переписать пример.
[ ] //Пример #2
[ ] STRING sUserName = "administrator"
[ ] 
[ ] wMainWnd.MyTextField("$user name").SetText(sUserName )
[ ] 
[ ] wMainWnd.MyPushButton("$login").Click()

В данном случае мы вместо базовых классов HtmlTextField и HtmlPushButton используем MyTextField и MyPushButton. Мы избавились от лишнего кода и логирование будет выполненно автоматически. Результирующие файлы примера #1 и примера #2 будут одинаковы.

Использование API функций в SilkTest

Иногда в Silktest возникает необходимость в использовании Windows API. Например когда необходимо получить доступ к директории «Cookies» путь к которой содержит имя пользователя, под которым Вы в данный момент залогинены на компьютере. SilkTest предоставлет нам такую возможность.

Для получения доступа к функциям из внешних DLL, необходимо использовать конструкцию вида:
[-] dll dllName.dll
 [ ] [ReturnType] FuncName ( [ArgList] ) [alias dllFuncName]

где:
dllName.dll — имя библиотеки dll, функции которой предполагаетс использовать.
ReturnType — возвращаемый тип. (Является необязательным параметром)
FuncName — имя импортируемой функции. Может отличаться от имени, которое указано в DLL. Если имя функции указывается другое, то необходимо указать последний параметр alias
ArgList — список принимаемых аргументов. (Является необязательным параметром)
alias dllFuncName — имя функции, как оно указано в DLL. Указывается только в том случае, если имя FuncName отличается от оригинального имени функции.

Пример:
// Импорт функции для получения имени залогиненного в данный момент пользователя.
[-] dll "advapi32.dll"
 [ ] LONG DLL_GetUserName(out STRING lpBuffer, inout LONG nSize) alias "GetUserNameW"

// Использование импортированной функции.
[ ] STRING sUserName // Переменная имени полученного пользователя.
[ ] LONG nSize = 0 // Переменная длинны имени полученного пользователя.
[ ] DLL_GetUserName(sUserName, nSize)

О пользе тестирования

В последнее время на рынке программного обеспечения появляется все больше и больше программных продуктов. В связи с этим конкуренция между производителями все возрастает. В конечном итоге выигрывает тот, кто в состоянии создать более функциональный (удовлетворяющий запросам пользователей), надежный (стабильно выполняющий свои функции) программный продукт с меньшими финансовыми затратами на создание. Оставим проблему функциональности для решения аналитиками и займемся рассмотрением тестирования.
В настоящее время тестирование стало неотъемлемой частью процесса создания программного обеспечения. Тестирование позволяет выпустить более надежный продукт и в ряде случаев помогает существенно снизить его себестоимость. Ведь чем позже будет обнаружена ошибка в программном коде, тем дороже будет ее исправление. Исправление ошибок в программном продукте, который уже попал к потребителям, стоит очень и очень дорого.
Тестирование подразделяется на ручное и автоматизированное, а автоматизированное в свою очередь делится на нагрузочное, регрессионное.
В этом блоге основное внимание я буду уделять автоматизированному регрессионному тестированию. Я буду приводить примеры связанные с особенностям тестирования с использованием SilkTest и языка 4Test.
Очень надеюсь что материалы этого блога будут полезны для его читателей.

Как пользоватсья netcoder.ru

Всем добрый день…
Если говорить вкратце, то на netcoder.ru нет админки и админов. Это сообщество программистов (хотелось бы), которые сами все решают в зависимости от рейтинга.


( конкретнее )
  • +4
  • 5 февраля 2009, 06:42
  • admin
  • 5+5