Автоматизация тестирования. Заметка об AutoHotKey
Zakhar GryshchenkoОпубликовано 19.11.2007 в Статьи
AutoHotKey — не очень известная, но очень полезная утилита, позволяющая автоматизировать тестирование GUI–приложений. Как говорят классики, «это действительно очень таинственная программа для автоматизации тестирования», и уж точно более таинственная, чем SilkTest
И в самом деле, большинство украинских компаний используют дорогие, тяжеловесные и престижные продукты Rational, Mercury или Borland, в то время как бесплатный, компактный и open-source AutoHotKey не попадает в поле зрения украинских test automation инженеров.
Цель этой заметки — восполнить этот пробел и кратко рассказать об основных возможностях программы и сфере ее использования.
Для чего можно использовать AutoHotKey?
В пользовательской документации к продукту AutoHotKey описывается как программа, «способная автоматизировать любые действия пользователя, имитируя нажатия клавиш и кнопки мыши». И хотя разработчики AutoHotKey не позиционируют продукт как инструмент для автотестирования, многие пользователи используют AutoHotKey именно для этих целей.
Благодаря такому подходу AutoHotKey не имеет полнофункциональной IDE–оболочки и специализированных библиотек или компонент (например для работы с тест–планами и наборами тестов), но это компенсируется богатыми возможностями продукта и легкостью в использовании и настройке.
AutoHotKey состоит из нескольких компонентов:
- Интерпрератор — AutoHotKey.ехе, который принимает на вход AHK–скрипт и исполняет его.
- Генератор скриптов — позволяет автоматически генерировать AHK–скрипт, записывая сообщения от клавиатуры и мыши.
- Компилятор — преобразует AHK–скрипт в исполняемый EXE файл, который не требует установленного AutoHotKey и может исполняться на любой Windows системе.
- AutoHotKey Windows Spy — отображает скрытые характеристики UI элементов.
Для целей автотестирования, наиболее часто используются следующие функции языка AutoHotKey:
- Работа с окнами и любыми элементами пользовательского интерфейса.
- Обработка сообщений мыши и клавиатуры.
- Файловые операции.
- Запуск, остановка и проверка процессов.
- Операции с графическими изображениями.
- Функции для обработки строк, для работы с реестром, переменными окружения, буфером обмена, постановка команд в Windows очередь сообщений, математические команды и т. д.
Если какая-либо нужная функциональность отсутствует, есть возможность вызывать функции из DLL — как стандартные Windows API функции, так и написанные вами. Еще один способ дополнить базовую функциональность — скачать С++ исходники и написать собственный вариант AutoHotKey.
Тестируем калькулятор
В качестве демонстрации работы AutoHotKey напишем скрипт, который запускает калькулятор, делит 9 на 2 и закрывает окно калькулятора. Текст скрипта с комментариями приведен ниже.
;декларируем и инициализируем общие переменные
application :="calc.exe"
workingDir := "C:\\WINDOWS\\system32"
process_id = 0
window_title := "Calculator"
figure1 = 9
figure2 = 2
operation := "/"
; cтартуем калькулятор
Run, %application%, %workingDir%, UseErrorLevel, process_id
Sleep, 1000 ;подождать 1 секунду
; активируем окно
WinWaitActive, %window_title%,,2
; мышкой нажимаем кнопку с текстом %figure1% в активном окне
ControlGetPos, X, Y,,, %figure1%
MouseClick, left, X, Y
; смотрим на окно калькулятора
Sleep, 3000
;эмулируем нажатие клавиши мыши на кнопке с текстом %operation% в окне %window_title%
ControlClick, %operation%, %window_title%
; эмулируем нажатие клавиши %figure2% на клавиатуре, сообщение отсылается окну с %window_title%
ControlSend, , %figure2%, %window_title%
; смотрим на окно калькулятора
Sleep, 3000
; эмулируем нажатие клавиши = на клавиатуре. Событие отсылается активному окну
SendEvent, =
; любуемся результатом 5 сек
Sleep, 5000
; закрываем калькулятор "убивая" процесс
Process, Close, %process_id%
Чтобы запустить скрипт на вашем компьютере, необходимо установить AutoHotKey, записать приведенный выше пример в текстовый файл с расширением .ahk и запустить его двойным щелчком мыши.
Заключение
Несмотря на бесплатность, AutoHotKey поставляется с достаточно подробной документацией (на английском), где можно найти описание всех поддерживаемых команд и возможностей инструментов. Поддерживается форум, где можно задать вопрос опытным пользователям, найти дополнительные библиотеки, внести предложения по улучшению продукта.
AutoHotKey активно развивается, регулярно появляются новые версии (последняя вышла 28 августа 2007) и ищет новых пользователей и поклонников, в том числе и в Украине.
Все подробности об AutoHotKey можно найти на сайте продукта: www.autohotkey.com.
Понравилась статья? Подпишись на обновления по RSS/E-mail

Прочтав статью родился небольшой вопрос, а что будет если предположим мы не знаем сколько секунд калькулятор будет делить 9 на 2? Т.е ситуация следующая – пока калькулятор не разделит 9/2 все остальные контролы неактивны, и програмка просто проэмулирует нажатие на неактивный контрол и весь хитрый план тестирования пойдёт под откос, или это как то учитывается, т.е можно заставить программку подождать выполнения результата?
Дело в том что такая ситуация может возникнуть не только если мы не знаем сколько по времени занимает ситуация, но и просто если мы решим перенести тесты на другой компьютер который может думать быстрее или медленее…
В данном примере паузы можно их убрать или закомментировать – вы получите тот же результат.
Кроме того, в AutoHotKey есть механизмы которые позволяют останавливать исполнение скрипта до наступления необходимых условий. Для данного примера подойдут встроенные WinWaitActivate, WinWaitClose, Process(WaitClose), и функции проверяющие состояние UI элементов, например ControlGet(Visible & Enabled).
Кстати, не так давно на сайте продукта появился российский флажок, по которому открывается русскоязычный ресурс. У меня еще не было возможности оценить качество перевода и полноту документации, но факт интересный.
Не користувався, але судячи з опису утиліта схожа на AutoIt(http://www.autoitscript.com/autoit3/), який я свого часу використовував для тестування GUI Windows-applications.
Хотелось бы чтоб кто то сравнил программы AutoIt и AutoHotKey. Я пользовался AutoIt и те функции которые описаны в данной статье можно продублировать в AutoIt. Как я уже сказал хотелось бы обьективного сравнения этих двух программ.
AutoIt хорош тем, что у него есть activex версия, ее можно пользовать из скриптов wsh и hta. А плох тем, что работа с хендлами там никакущая. И активикс компонент ущербный в сравнении с нативной версией.
В AutoHotKey можно пользовать только его язык, по-моему, не очень удобный.
Это имхо. Мне надо было реагировать на окошки 1С предприятия (скотинко спрашивало очевидности, и отказывалось работать не дождавшись реакции) – я выбрал компонент АвтоИт, потому что так почти не пришлось переписывать существующие wsh скрипты.
Да, в отрыве от тестирования auto hotkey – очень классная вещь, можно минимальными усилиями на шорткат повесить сложную функциональность. Например, на F12 в GPS Mapedit считать в статус баре координаты курсора и открыть соответствующее место в Google Earth – делается в пару строчек
Так же можно добавить поддержку макросов и шаблонов в ноутпад
Порівняння “хто кручє” на обох сайтах
http://www.autohotkey.com/forum/topic4363.html&sid=f2bd4e609b8480a535544c28ef30f675
http://www.autoitscript.com/forum/index.php?showtopic=20897&hl=autohotkey
Кто-то имеет опыт тестирования веб приложений. И возможно ли такое делать подобными программами?
2Виталий:
Для цього краще використати Selenium.
2Андрій Рущак:
Дякую!
Подскажите, пожалуйста, какие-нибудь ресурсы, на которых есть информация о том, как можно использовать autohotkey (или подобных ей) для тестирования. В частности, тестирования GUI.
По этой ссылке можно найти дополнительные статьи по использованию AutoHotKey:
http://www.script-coding.info/AutoHotkeyTranslation.html#Articles
Ответ на вопрос “как можно использовать autohotkey для тестирования GUI” зависит от того, что именно надо протестировать. Например, приведенный в статье пример с калькулятором можно преобразовать в автоматизированный тест-кейс, который выполняет деление двух целых чисел, сравнивает полученный результат с ожидаемым и выводит Pass/Fail статус в файл. Для этого можно дополнить скрипт таким образом:
1-ое дополнение:
;декларируем и инициализируем общие переменные
expected_result = 4.5
actual_result := ""
result_file := "Test.txt"
2-ое дополнение надо вставить между «SendEvent, =» и «Sleep, 5000»
ControlGetText, actual_result, Edit1, %window_title%
IfNotEqual, expected_result, %actual_result%
{
FileAppend, %actual_result% not equals to %expected_result%. Test Failed., %result_file%
}
else
{
FileAppend, %actual_result% equals to %expected_result%. Test Passed., %result_file%
}
Большое спасибо за ответ.8-)
..сначала стоит отметить, что я совсем чайник( Передо мной стоит задача протестировать GUI одного приложения. У меня есть список багов, для которых я и дожен создать авто-тесты… один из своих вопросов я уже задал. Подскажите, пожалуйста, а как я могу узнать координаты ячейки? Т.е., у меня в окне есть табличка TAdvStringGrid, в которую я хочу вносить значения… пытался узнать координаты ячейки с помощю Activ Window Info, но там не могу найти такой информации((
И еще момент – у меня этот пример с калькулятором не проходит. Совсем не работает… Калькулятор запускается… Нажимаются кнопочки под мышкой, а результат никакой… И тут же опять вопрос: figure1 = 9 – это объявление самого объекта “кнопочка”, или же это просто некий объект, которому присваивается объект с девяткой? Не знаю, наверное не очень понятно задал свой вопрос. Просто, это вопрос из того же род, что и предыдущий: Как распознать элементы в программе?
То Сашка:
1) “У меня в окне есть табличка TAdvStringGrid, в которую я хочу вносить значения… пытался узнать координаты ячейки с помощю Activ Window Info, но там не могу найти такой информации”
-> [ZG] к сожалению, не зная специфики приложения, трудно ответить на на этот вопрос
2) “И еще момент – у меня этот пример с калькулятором не проходит. Совсем не работает…”
-> [ZG] 1) Сложно сказать почему пример не работает на Вашей системе(я проверял работу скрипта только на WinXP SP2)
2) во время работы скрипта важно не переключать фокус на другие окна
3) в примере даны разные варианты управления калькулятором. Если у Вас сработал вариант с 9-кой (кнопка калькулятора “9″ нажимается мышкой), попробуйте заменить им остальные варианты (эмуляция нажатия клавиш на клавиатуре, постановка сообщений, и т.д)
3) “figure1 = 9 – это объявление самого объекта “кнопочка?””
-> [ZG] с точки зрения языка AutoHotKey, figure1 – это переменная которой присваиватеся значение 9.
4) “Как распознать элементы в программе?”
-> [ZG] Многие функции AutoHotKey принимают на вход информацию которую показывает Windows Spy, хотя в некоторых случаях (например – использование нестандартных UI элементы), Spy не сможет получить и отобразить значения всех полей.
5) “..сначала стоит отметить, что я совсем чайник… У меня есть список багов, для которых я и дожен создать авто-тесты…”
-> [ZG] обратитесь к Вашему менеджеру, объясните ситуацию и попросите чтобы Вам провели соответствующие тренинги. Будут также полезными консультации опытных разработчиков по общим вопросам программирования и дизайна.
Самый простой вариант быстро автоматизировать требуемую функциональность и при этом глубоко не вникать в особенности AutoHotKey и нестандартного UI – возпользоваться генератором AHK скриптов AutoScriptWriter.exe, который поставляется вместе с AutoHotKey.
Из документации:
Although macros can be written by hand, you might find it easier to write long ones with the aid of AutoScriptWriter, which is a macro recorder included with AutoHotkey. It watches what you type and where you click, and keeps track of which window is active. It transcribes these actions into a working macro that can later be “played back” at a faster speed.
Да, его я тоже посмотрел, но ведь с его с помощью просто записываются, а после выполняются скрипты, а ведь мне нужно отслеживать, какие из них отработали верно, а какие нет. Так что мне все равно придется хоть немножко да вникать в АНК.)) Я в общем-то и не против;)
вопрос по AutoScriptWriter.exe: создал скрипт для запуска например блокнота, но при попытке запуска скрипта выдается сообщение “Error: Reequires at least of its window parameters. Line# –> 001:Winwait,”
Разве созданный скрипт не должен запускаться без корректирования его вручную (убрал Winwait, , и скрипт стал запускаться)?
По поводу примера с калькулятором – у меня он сразу не заработал, помогло изменение название окна с Calculator на Калькулятор, т.е. window_title := “Калькулятор”.