SilkTest: секреты. Часть 1

@ Пт, 25 июля, 18:49

В любой программе есть недокументированные возможности. Некоторые из них явно добавлены в программу (как, например, пасхальные яйца), некоторые являются недоработкой программистов, а какие-то - просто нереализованными возможностями.
В этой статье речь пойдет о недокументированном параметре функции LogError.



Функция LogError используется очень часто. Если верить справочной системе, эта функция принимает только один параметр: строку, содержащую информацию об ошибке. Однако на самом деле это не так. Чтобы убедиться в этом, достаточно написать в редакторе SilkTest-a "LogError(" и посмотреть на всплывающую подсказку.

Видно, что функция принимает больше одного аргумента.

Давайте попробуем передать ей второй аргумент (типа STRING) и посмотрим, что будет.

Рядом с текстом ошибки появился квадратик. Если нажать на него, то мы получим сообщение "Command: second argument. Unable to execute command - File not found". Очевидно, что SilkTest попытался выполнить команду, переданную во втором аргументе, но не смог. Давайте попробуем передать ему команду, которую выполнить получится.

LogError("Error message", "calc.exe")

Теперь, если нажать на квадратик рядом с текстом ошибки, запускается Калькулятор. Как это можно использовать? Вот простой пример.

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

[-] STRING CreateScreenShot ()
    [ ] STRING sBitmap
    [ ]
    [-] withoptions
        [ ] BindAgentOption (OPT_BITMAP_MATCH_COUNT, 1)
        [ ] sBitmap = "{GetProgramDir ()}\{GetTestCaseName ()}_{FormatDateTime (GetDateTime (), "_ddmmyyyy_hhnnss")}.bmp"
        [ ] Desktop.CaptureBitmap (sBitmap)
    [ ] return sBitmap

Эта функция создает скриншот в папке скрипта и возвращает полный путь к созданному файлу. Теперь осталось написать функцию Error:

[-] void Error (STRING sMsg)
    [ ] LogError (sMsg, "iexplore.exe {CreateScreenShot ()}")

Если теперь использовать функцию Error вместо стандартной LogError, то можно будет прямо из лога открыть снимок экрана в момент возникновения ошибки.

Для того, чтобы оставлять комментарии, вы должны войти под своим логином.