7. Обработка результатов (Results)

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

После запуска тесткейса, тестплана, или набора тесткейсов, SilkTest выводит окно с результатами отработанных тесткейсов. В нем отображается статистика по пройденным тесткейсам (общее количество, количество и процент тесткейсов, прошедших без ошибок – Passed, количество и процент прошедших с ошибками – Failed) и время, затраченное на прохождение всех тесткейсов. Также в этом окне отображается информация, выводимая в процессе работы скрипта функциями Print, ListPrint, LogError, LogWarning и другими. Для просмотра информации, выводимой в процессе работы тесткейса, необходимо нажать на значок [+] слева от названия тесткейса.

В файле результатов (с расширением *.res и таким же именем, как и название самого файла скрипта) хранятся результаты последних нескольких запусков. По умолчанию количество хранящихся результатов равно пяти, однако это количество можно изменить, зайдя в пункт меню Options – Runtime и установив в разделе Results в поле History size необходимое значение (от 0 до 32767). Кроме того, в этом же окне настроек в разделах Results и Debug можно изменить следующие опции:

  • Write to disk after each line – если включено, то SilkTest будет записывать результаты в файл каждый раз, когда генерируется новая строка результатов. Это необходимо для того, чтобы файл результатов содержал все сгенерированные данные в случае аварийного заершения работы самого SilkTest-а или системы (например при отключении питания). Недостатком включения этой опции является то, что из-за постоянной работы с файлом результатов работа скрипта замедляется
  • Log elapsed time, thread, and machine for each output line – если включено, то для каждой строки результатов будет выводиться информация о времени, прошедшем с начала запуска, имя текущего агента и номер параллельного процесса (подробнее о распараллеливании процессов читайте в главе 5. Распределенное, параллельное выполнение скриптов. Multitestcase). С помощью опций, находящихся в меню Results – View Options можно регулировать, какие именно из этих опций будут отображаться, а также отсортировать строки результата по одному из этих критериев
  • Find Error stops at warning – если включено, то при переходе к следующей ошибке (меню Edit – Find Error или клавиша F4) будут осуществляться переходы как к ошибкам (Error), так и к предупреждениям (Warning). Если выключено, то переходы будут осуществляться только к ошибкам, игнорируя предупреждения
  • Show overall summary – регулирует показывать или нет общую статистику по всем пройденным тесткейсам
  • Directory/File – здесь можно указать папку, в которую SilkTest должен помещать сгенерированные файлы результатов, либо само имя файла результатов (по умолчанию файл результатов будет называться так же, как и файл скрипта)
  • Print agent calls – если включено, то в файл результатов будут писаться все вызовы методов (их имена и передаваемы им параметры), которые происходят во время работы скрипта
  • Print tags with agent calls – если включено, то при вызове методов будут также выводиться и теги используемых окон

 

Последние две опции полезны при отладке, так как в этом случае четко выводятся все теги и вызываемые методы (подробнее об отладке читайте в разделе 2.5 Отладка скрипта (debug)). Из-за большего количества выводимой информации при их включении размер файла результатов существенно увеличивается.

Еще некоторые пункты меню Results:

  • Select – позволяет выбрать один из сохраненных ранее результатов (при открытии файла результатов по умолчанию открывается последний результат)
  • Merge – позволяет добавить к текущему выбранному результату один из прошлых результатов
  • Delete – удаляет один из имеющихся результатов
  • Extract – позволяет извлечь результаты и поместить их в новый файл в окне тесткейса (пункт Window), который затем можно сохранить как текстовый файл, либо поместить результат сразу в файл (пункт File), либо вывести сразу на печать (пункт Printer)
  • Export – позволяет конвертировать информацию о результатах (имя тесткейса, количество ошибок и их текст, количество предупреждений и т.п.) в текстовый файл с разделителями. Это может быть полезно для последующей перегонки результатов в базу данных или файл электронной таблицы
  • Send to Issue Manager – позволяет переслать результаты непосредственно в SilkCentral Issue Manager (систему управления дефектами от Segue)
  • Convert to Plan – конвертирует текущий файл результатов в файл тестплана. Данная опция доступна лишь в том случае, если файл результатов был сгенерирован при запуске отдельного тесткейса или скрипта (но не другого тестплана)
  • Show Summary/Hide Summary – скрыть/показать суммарную информацию по каждому тесткейсу
  • Goto Source – позволяет перейти к скрипту, откуда был вызван тесткейс. Если курсор находится в файле результатов в конкретном тесткейсе, то после открытия файла скрипта курсор будет находится в начале этого тесткейса. Если курсор в файле результатов находится на сообщении об ошибке, то при открытии файла скрипта курсор будет находиться в том месте, откуда было вызвано сообщение об ошибке
  • Mark Failures in Plan – выделяет в тестплане только те тесткейсы, которые прошли с ошибками, после чего можно их перезапустить отдельно от остальных

 

Ниже приведен список функций для работы с результатами:

  1. Print(vaExprs) – выводит в файл результата одну или несколько переменных любого типа, разделенных пробелами. Например:
    Code

    Print ("Window opened", 123, {"one", "two", "three"}, wTestApp.Exists())
    

    В этом примере в файл результата выводятся: строка “Window opened”, число 123, список строк {“one”, “two”, “three”} и результат, возвращаемый методом Exists окна wTestApp (TRUE или FALSE)

  2. ListPrint(lList) – выводит в файл результата список, каждый элемент которого будет расположен в новой строке (в отличие от функции Print, которая выводит все элементы списка в одной строке, разделенные запятыми)
  3. Printf(sFormat, aArgs, …) – выводит форматированную строку sFormat. aArgs – любое количество аргументов. Сходна с функцией языка С printf. Здесь мы не будем подробно рассматривать эту функцию, приведем лишь небольшой пример:
    Code

    Printf ("Current time is %s, here are 5 spaces: '%5s', random integer value: %d", TimeStr(), "", RandInt(1, 32000))
    

    В результате будет выведена следующая строка:

    Code

    Current time is 22:04:18, here are 5 spaces: '     ', random integer value: 2178
    

    Мы предоставим читателю самому разобраться в особенностях работы этой функции, воспользовавшись встроенной справкой.

  4. LogWarning (sWarning) – выводит строку предупреждения (по умолчанию фиолетового цвета). Обычно используется для предупреждения пользователя о какой-либо некритичной ошибке
  5. LogError (sMsg) – выводит сообщение об ошибке (по умолчанию красного цвета). Здесь необходимо отметить одну недокументированную особенность функции LogError, которая может оказаться очень полезной. Хотя в справке сказано, что эта функция принимает один параметр, на самом деле ей можно передать еще один строковый параметр. В случае, когда будет вызвана функция LogError с заданным вторым параметром, в файле результата возле собственно сообщения об ошибке (параметр sMsg) будет расположен красный квадратик. Если щелкнуть по этому квадратику, то SilkTest попытается запустить программу, имя которой должно быть передано в том самом втором недокументированном параметре. Например, после того, как сработает следующая функция
    Code

    LogError ("Here is calculator for you!", "calc.exe")
    

    В файле результата будет выведена строка “Here is calculator for you!”, слева от которой будет расположен квадратик. Если по нему щелкнуть, то откроется обычный калькулятор из стандартной поставки Windows (calc.exe – это имя исполняемого файла для калькулятора). Естественно, что второй параметр может быть любой программой, которую вам нужно запустить в данном случае. Достаточно простым и в то же время полезным действием в случае возникновения ошибки было бы делать скриншот экрана для того, чтобы во время разбора причины ошибки можно было бы увидеть, что именно отображалось на экране в момент ее возникновения. Захват изображения любого объекта осуществляется с помощью метода CaptureBitmap(). Для захвата изображения всего экрана используется объект Desktop. Итак, функция, которая захватывает изображение экрана и сохраняет его в bmp-файл с таким же именем, как и имя текущего тесткейса, будет выглядеть так:

    Code

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

    Эта функция создает файл с именем, совпадающим с именем тесткейса в той же папке, где находится файл скрипта с этим тесткейсом. Кроме того, к имени файла в конце прибавляется текущая дата и время для того, чтобы в случае возникновения нескольких ошибок в одном тесткейсе файл со скриншотом не перезаписывался, а создавался новый файл с уникальным именем. Функция возвращает полное имя созданного файла. Пусть вас пока не смущает ключевое слово withoptions и вызов функции BindAgentOption(). Они будут рассмотрены позднее в разделе 10.3 Динамическое изменение настроек Агента, а сейчас мы лишь скажем, что SilkTest позволяет указать, какое количество одинаковых скриншотов должно быть сделано для того, чтобы захват изображения считался успешным, а в противном случае сгенерируется ошибка и изображение захвачено не будет. Здесь количество успешных захватов устанавливается равным единице, то есть захват изображения произойдет с первого раза.
    Теперь, для того, чтобы каждый раз не передавать второй параметр для функции LogError() для открытия скриншота (что придется делать достаточно часто), мы напишем новую функцию Error(), которая будет делать это автоматически. Выглядеть она будет так:

    Code

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

    Теперь, если вы захотите, чтобы во время прочтения сообщения об ошибке пользователь мог при одном нажатии на кнопку мыши посмотреть снимок экрана в момент возникновения ошибки, используйте функцию Error() вместо LogError(). Эти функции находятся в файле TestAppUtils.inc. Естественно, что вы можете указать любой просмотрщик картинок, который вам нравится, вместо MS Paint. Единственным недостатком этой функции состоит в том, что каждый bmp-файл имеет достаточно большой объем, отчего свободное место на жестком диске может уменьшаться достаточно быстро. В качестве решения этой проблемы можно использовать какую-либо утилиту, которая конвертирует bmp-файлы в файлы более экономного типа (например, JPG), однако мы оставим эту задачу на рассмотрение читателю.

  6. AppError(sMsg) – прерывает выполнение тесткейса и передает управление рекавери системе (подробно об этом читайте в главе 3. Recovery-система). Кроме того в файл результатов будет выведено сообщение sMsg, в начале которого будет строка “*** Error:”
  7. RaiseError(iExcept, sMessage) – генерирует исключение с заданным номером iExcept и указанным сообщением sMessage в файле результатов, также вписывая в начале строку “*** Error:”. Подробнее об исключениях читайте в главе 10.4 Обработка исключительных ситуаций
  8. Verify (aActual, aExpected [, sDesc]) – сравнивает два значения aActual и aExpected любого типа и генерирует исключение, если они не совпадают. Оба параметра должны быть одного типа, иначе сгенерируется другое исключение Type mismatch (несовпадение типов)
  9. LogVerifyError (aData1, aData2 [, sDesc]) – выдает сообщение об ошибке несовпадения двух значений aData1 и aData2. В отличие от функции Verify, эта функция не проверяет, совпадают ли значения, а просто пишет сообщение об ошибке. Полезна в том случае, если функция Verify по каким-либо причинам не может быть использована
  10. ResPrintList (sName, lSubItems) – открывает новый иерархический раздел в файле результатов с именем sName и заносит в него данные из списка lSubItems. Для того, чтобы просмотреть этот список, необходимо щелкнуть по значку [+] слева от названия списка sName.
  11. ResOpenList (sName), ResCloseList () – соответственно открывает и закрывает новый иерархический раздел sName в файле результатов. В отличие от функции ResPrintList содержимое иерархического раздела не передается через параметр функции. Вместо этого после открытия раздела с помощью функции ResOpenList выводе всех функций (Print, LogError, LogWarning и т.п.) будет производиться в этот раздел и закончится после того, как раздел будет закрыт с помощью функции ResCloseList. Допускается использование вложенных разделов
  12. SetAgentTrace (bTraceOn) – устанавливает или снимает вывод в файл результатов вызовы функций и методов агентом. Аналогична установке или снятию флажка Print Agent Calls в окне Runtime Options. Возвращает предыдущее значение этого же параметра
  13. ResExport, ResExtract – конвертируют файл результатов (.res) в формат экспортированного файла результатов (.rex) и текстовый файл (.txt) соответственно. Аналогичны операциям, осуществляемым через меню Results – Export и Results – Extract соответственно. Здесь же упомянем о функции ResExportOnClose, которая позволяет автоматически сконвертировать результаты в формат экспортированных результатов после завершения работы скрипта или тестплана.

 


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