Блог разработчиков

Автоматизация тестирования. Заметка об 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.

top of hotblogs.org.ua
1 звезда2 звезды3 звезды4 звезды5 звезд (2 голосов, средний: 5 из 5)
Загрузка ... Загрузка ...

Понравилась статья? Подпишись на обновления по RSS/E-mail

Подписаться, не оставляя комментарий

Все комментарии (20) к “Автоматизация тестирования. Заметка об AutoHotKey”

  1. Петька говорит:

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

    Дело в том что такая ситуация может возникнуть не только если мы не знаем сколько по времени занимает ситуация, но и просто если мы решим перенести тесты на другой компьютер который может думать быстрее или медленее…

  2. Zakhar Gryshchenko говорит:

    В данном примере паузы можно их убрать или закомментировать - вы получите тот же результат.

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

  3. Zakhar Gryshchenko говорит:

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

  4. Андрій Рущак говорит:

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

  5. storm говорит:

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

  6. Caujka говорит:

    AutoIt хорош тем, что у него есть activex версия, ее можно пользовать из скриптов wsh и hta. А плох тем, что работа с хендлами там никакущая. И активикс компонент ущербный в сравнении с нативной версией.

    В AutoHotKey можно пользовать только его язык, по-моему, не очень удобный.

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

  7. Caujka говорит:

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

  8. Хацкеррр говорит:

    Порівняння “хто кручє” на обох сайтах :)

    http://www.autohotkey.com/forum/topic4363.html&sid=f2bd4e609b8480a535544c28ef30f675
    http://www.autoitscript.com/forum/index.php?showtopic=20897&hl=autohotkey

  9. Виталий говорит:

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

  10. Андрій Рущак говорит:

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

  11. Виталий говорит:

    2Андрій Рущак:
    Дякую!

  12. Сашка говорит:

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

  13. Zakhar Gryshchenko говорит:

    По этой ссылке можно найти дополнительные статьи по использованию 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%
    }

  14. Сашка говорит:

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

  15. Сашка говорит:

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

  16. Сашка говорит:

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

  17. Zakhar Gryshchenko говорит:

    То Сашка:

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

  18. Zakhar Gryshchenko говорит:

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

  19. Сашка говорит:

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

  20. Серж говорит:

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

Оставить комментарий

Указать свой сайт могут только зарегистрированные пользователи. Регистрация или вход.

Архив

Вакансии rss icon

Все вакансии

Комментарии