Добрый день.
Продолжаем разговор о PowerShell. В поставку оболочки входит больше сотни командлетов (cmdlets), облегчающих выполнение административных задач в среде Windows. В то же время, для автоматизации тестирования GUI потребуются дополнительные средства: командлеты, учитывающие специфику тестируемых приложений, либо прямое обращение к классам Microsoft .NET Framework.
В статье “UI Automation with Windows PowerShell” Dr. James McCaffrey объясняет принципы создания и использования командлетов, способных работать с элементами графического интерфейса. По ссылке можно скачать cамораспаковывающийся архив TestRun2007_12.exe, в состав которого входит исходный код командлетов (CustomUICmdletsLib) и тестируемого приложения (TheAppToTest). После сборки в Visual Studio соответственно получаем CustomUICmdletsLib.dll и TheAppToTest.exe. Библиотеку нужно зарегистрировать с помощью прилагаемого Microsoft.PowerShell_profile.ps1:
function RegisterUILib { write-host "registering custom cmdlets for UI automation`n" $env:path = $env:path += ";C:\Windows\Microsoft.NET\Framework\v2.0.50727" sl 'C:\UIautomationWithPowerShell\CustomUICmdletsLib\bin\Debug' installutil.exe CustomUICmdletsLib.dll | out-null add-pssnapin LibPSSnapin write-host "get-window, get-control, get-controlByIndex, send-chars, send-click" write-host "get-listBox, send-menu, and get-textBox custom cmdlets are enabled `n" } RegisterUILib # invoke function set-location C:\UIautomationWithPowerShell
В результате в нашем распоряжении оказываются следующие командлеты: get-window, get-control, get-controlByIndex, send-chars, send-click, get-listBox, send-menu, get-textBox. Скрипт testScenario.ps1, присутствующий в архиве, выполняет запуск тестируемого приложения и операции с ним (нахождение окна, нажатие на кнопки, ввод текста и т.п.). Изучение, модификация и запуск этого скрипта (он довольно простой) позволят понять специфику командлетов.
Вот еще три примера реализации:
1. Windows Automation Snapin for PowerShell. Представлены следующие командлеты: Select-Window, Select-Control, Send-Click, Send-Keys, Set-WindowActive, Set-WindowPosition, Get-WindowPosition, Remove-Window. Вот вступительное слово от автора. Определенный интерес представляет и предыдущая версия этих командлетов, снабженная примером автоматизации работы Notepad (вот краткое описание).
2. PowerShell Scripts for Testing. Примеры использования этой библиотеки можно почерпнуть в блоге ее создателей.
3. PowerShell Community Extensions. Неплохая подборка командлетов и скриптов.
Стоит отметить, что PowerShell можно применять и для тестирования Web-приложений. Вот небольшой пример (получить текст web-страницы и проверить наличие в ней определенной строки):
$url = "http://openquality.ru" $pattern = "OpenQuality" $obj = new-object System.Net.WebClient $page = $obj.DownloadString($url) if($page -match $pattern) { write-output "OK" } else { write-output "Failed" }
Подходы к тестированию Web-интерфейса изложены в статье “Web UI Automation with Windows PowerShell”, где Dr. James McCaffrey рассматривает примеры работы с элементами web-страницы.
Эффективность применения PowerShell в автоматизации тестирования графического интерфейса напрямую зависит от объекта тестирования. Это .Net-приложение? Есть необходимые командлеты или .Net-классы? Опыт программирования в среде С#? В таких случаях PowerShell достоин самого серьезного рассмотрения.
Хорошим инструментом для работы с PowerShell-скриптами является графическая оболочка PowerGUI, которая позволяет не только запускать готовые скрипты в различных конфигурациях, но и создавать и отлаживать новые.
Всего доброго. Оставайтесь с нами.
Что такое качество программного обеспечения и как его улучшить: теория и практика, задачи и решения, подводные камни и обходные пути.