Commited: 50+ воркшопів з ТОПами тестування: M.Bolton, G.Bahmutov, T.King, R.Desyatnikov, J.Bach. Лише за $40 на рік та економія $15 до 20 квітня
×Закрыть

Автоматизация тестирования. Заметка об AutoHotKey

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.

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті.

👍НравитсяПонравилось0
В избранноеВ избранном0
Подписаться на автора
LinkedIn

Похожие статьи




Підписуйтесь: iTunes | Google Podcast | YouTube


21 комментарий

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

По поводу примера с калькулятором — у меня он сразу не заработал, помогло изменение название окна с Calculator на Калькулятор, т.е. window_title: = «Калькулятор».

вопрос по AutoScriptWriter.exe: создал скрипт для запуска например блокнота, но при попытке запуска скрипта выдается сообщение "Error: Reequires at least of its window parameters. Line# —> 001: Winwait, "Разве созданный скрипт не должен запускаться без корректирования его вручную (убрал Winwait, и скрипт стал запускаться)?

Да, его я тоже посмотрел, но ведь с его с помощью просто записываются, а после выполняются скрипты, а ведь мне нужно отслеживать, какие из них отработали верно, а какие нет. Так что мне все равно придется хоть немножко да вникать в АНК.)) Я в общем-то и не против;)

Самый простой вариант быстро автоматизировать требуемую функциональность и при этом глубоко не вникать в особенности 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.

То Сашка: 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] обратитесь к Вашему менеджеру, объясните ситуацию и попросите чтобы Вам провели соответствующие тренинги. Будут также полезными консультации опытных разработчиков по общим вопросам программирования и дизайна.

И еще момент — у меня этот пример с калькулятором не проходит. Совсем не работает... Калькулятор запускается... Нажимаются кнопочки под мышкой, а результат никакой... И тут же опять вопрос: figure1 = 9 — это объявление самого объекта «кнопочка», или же это просто некий объект, которому присваивается объект с девяткой? Не знаю, наверное не очень понятно задал свой вопрос. Просто, это вопрос из того же род, что и предыдущий: Как распознать элементы в программе?

...сначала стоит отметить, что я совсем чайник (Передо мной стоит задача протестировать GUI одного приложения. У меня есть список багов, для которых я и дожен создать авто-тесты... один из своих вопросов я уже задал. Подскажите, пожалуйста, а как я могу узнать координаты ячейки? Т.е., у меня в окне есть табличка TAdvStringGrid, в которую я хочу вносить значения... пытался узнать координаты ячейки с помощю Activ Window Info, но там не могу найти такой информации ((

Большое спасибо за ответ.8-)

По этой ссылке можно найти дополнительные статьи по использованию AutoHotKey: http://www.script-coding.info/...Ответ на вопрос «как можно использовать autohotkey для тестирования GUI» зависит от того, что именно надо протестировать. Например, приведенный в статье пример с калькулятором можно преобразовать в автоматизированный тест-кейс, который выполняет деление двух целых чисел, сравнивает полученный результат с ожидаемым и выводит Pass/Fail статус в файл. Для этого можно дополнить скрипт таким образом: 1-ое дополнение:

;декларируем и инициализируем общие переменныеexpected_result = 4.5actual_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%}

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

2Виталий: Для цього краще використати Selenium.

Кто-то имеет опыт тестирования веб приложений. И возможно ли такое делать подобными программами?

Да, в отрыве от тестирования auto hotkey — очень классная вещь, можно минимальными усилиями на шорткат повесить сложную функциональность. Например, на F12 в GPS Mapedit считать в статус баре координаты курсора и открыть соответствующее место в Google Earth — делается в пару строчек: -) Так же можно добавить поддержку макросов и шаблонов в ноутпад: -)

AutoIt хорош тем, что у него есть activex версия, ее можно пользовать из скриптов wsh и hta. А плох тем, что работа с хендлами там никакущая. И активикс компонент ущербный в сравнении с нативной версией.В AutoHotKey можно пользовать только его язык, по-моему, не очень удобный.Это имхо. Мне надо было реагировать на окошки 1С предприятия (скотинко спрашивало очевидности, и отказывалось работать не дождавшись реакции) — я выбрал компонент АвтоИт, потому что так почти не пришлось переписывать существующие wsh скрипты.

Хотелось бы чтоб кто то сравнил программы AutoIt и AutoHotKey. Я пользовался AutoIt и те функции которые описаны в данной статье можно продублировать в AutoIt. Как я уже сказал хотелось бы обьективного сравнения этих двух программ.

Не користувався, але судячи з опису утиліта схожа на AutoIt (http://www.autoitscript.com/autoit3/), який я свого часу використовував для тестування GUI Windows-applications.

Кстати, не так давно на сайте продукта появился российский флажок, по которому открывается русскоязычный ресурс. У меня еще не было возможности оценить качество перевода и полноту документации, но факт интересный.

В данном примере паузы можно их убрать или закомментировать — вы получите тот же результат.Кроме того, в AutoHotKey есть механизмы которые позволяют останавливать исполнение скрипта до наступления необходимых условий. Для данного примера подойдут встроенные WinWaitActivate, WinWaitClose, Process (WaitClose), и функции проверяющие состояние UI элементов, например ControlGet (Visible & Enabled).

Прочтав статью родился небольшой вопрос, а что будет если предположим мы не знаем сколько секунд калькулятор будет делить 9 на 2? Т.е ситуация следующая — пока калькулятор не разделит 9/2 все остальные контролы неактивны, и програмка просто проэмулирует нажатие на неактивный контрол и весь хитрый план тестирования пойдёт под откос, или это как то учитывается, т.е можно заставить программку подождать выполнения результата? Дело в том что такая ситуация может возникнуть не только если мы не знаем сколько по времени занимает ситуация, но и просто если мы решим перенести тесты на другой компьютер который может думать быстрее или медленее...

Подписаться на комментарии