programming

Autoit 기초 익히기(상)


by Kitle · 2017. 06. 14.



Autoit 기초 익히기


시작하며…

Autoit 은 윈도우 GUI 와 범용 동작을 자동화하기 위해 제작된 BASIC 류의 공개 스크립트 언어다. 한번에 할 수 없는 작업을 자동화하기 위해 창/컨트롤 제어와 키 눌림, 마우스 이동 흉내내기를 사용하거나 신뢰성 있는 다른 언어를 사용한다. (예. VBScript 와 SendKeys). Autoit 은 또한 "런타임" 이란 것을 요구하지 않고 모든 버전의 윈도우에서 실행된다.
인용 : http://www.usboffice.kr/autoit/

Autoit 으로 테스트를?

컴퓨터라는 녀석은 사람이 해야 할 일을 대신 하기 위해 태어났다. 프로그램이라는 말의 어원이 ‘미리 작성된 것’이다. 컴퓨터는 시키는 일 밖에 할 줄 모른다는 바보라는 말도 여기서 나온다. 그런데 이 SW개발한 제품이 잘 돌아가는지 확인하는 방법도 매우 다양하다. 사람이 테스트를 직접 하는 경우도 있고, 자동화된 테스트를 활용하는 경우도 많다. 자동화 테스트 없이도 테스트가 충분하다고 생각 할 수도 있지만, 다양하고 복잡한 기능을 가지거나 방대하거나 정확성이 많이 요구되는 SW제품은 사람이 일일이 직접 테스트 하는 것도 한계가 있다. 인적 자원은 늘 한정적이고, 반복적인 테스트를 사람이 하기에도 힘들기 때문이다.

따라서 사람이 해야 할 부분을 또 다른 SW를 이용해 대신 해 테스트 하는 것이 여기서 이야기하고자 하는 자동화이다.

자동화도 다양한 방법과 접근이 있지만, 본 문서에서는 프로그램으로 사용자 동작을 코드화 하여 마치 사람이 직접 키보드를 타이핑하고, 마우스를 제어하고 윈도우 관련 이벤트 들을 활용하여 사람이 테스트 하지 않고도 자동화한 부분을 수행하게 할 수 있다.

Autoit으로 자동화의 가능성은?

테스트 중 발생하는 다양한 상황과 작업에 대한 반복적인 테스트와 분기(조건에 따른 다른 동작)가 가능한가? 가능하다. 스크립트 언어로 동작하므로, 해당 스크립트 언어에서 지원하므로 직접 구현하여 처리가 가능하다.
참고 : 일반적인 매크로 프로그램은 반복에는 유용하지만, 분기 부분이 부족한 경우도 있다.


반복테스트를 대신 해 줄 수 있다?


예를 들어 버튼을 클릭하고 값을 입력하고 엔터 키를 누르는 반복을 1000번 반복하는 테스트를 해야 한다고 가정하자. 사람은 기계처럼 고정적인 동작을 하지 않으므로 시간에 따른 피로도와 정확성 등에 대해서는 부족한 부분들이 있다. 1000번을 반복해서 누르는 과정에 대한 타이밍, 실수(사람이 저지르는 실수, 엔터키를 빼먹는다던가, 입력값을 잘못 입력한다던가, 클릭을 엉뚱한데 한다던가)가 발생되기 마련인데, 이것을 Autoit등의 스크립트로 구현한다면 - 구현한 동작이 항상 같은 타이밍, 같은 동작을 하도록 잘 설계되었다고 가정하고-차원에서는 자동스크립트가 우수하다.

(물론 PC도 오차가 있고 실수가 있을 수 있지만, 그것은 논외로 해 두자)


상황에 맞게 분기 동작을 할 수 있다?

SW의 특성상 상황에 따라 다른 결과가 나올 수 있다. 버튼을 클릭했을 때 때에 따라서 1이라는 값을 받으면 현재 진행중인 스크립트가 계속 진행되고, 0이라는 값을 받으면 스크립트를 종료시키거나 다른 스크립트를 수행하게 끔 처리가 가능하다.

절차적 프로그래밍은 선언문, 반복문, 분기문으로 구성되는데 이 autoit 문법역시 같은 형식이므로 스크립트를 구현하면 할 수 있다.
프로그래밍을 몰라도 쉽게 사용 가능한가?

세상에 공짜는 없다. 프로그래밍을 몰라도 기본적인 것들은 사용 가능하지만, 최소한 autoit 문법을 익히고 알아야 한다. 본 문서는 기본적인 사용법도 함께 포함하였다.


테스트 툴로 어떻게 활용 가능할까?

기능 테스트에 활용 - 키보드나 마우스로 입력하고 테스트 하는 기능 테스트 할 때 활용 할 수 있다.

비 기능 테스트에 활용 - 반복적인 동작으로 스트레스나 부하를 줄 수도 있고, 지속적인 구동 테스트(aging test)등에 활용 할 수 있다.

스크립트로 작성되므로, 간단한 프로그램이나 유틸도 만들 수 있다.

설치하기


Autoit을 설치한다. Next만 누르면 되므로 쉽다. 설치 중간에 나오는 예제파일들은 모두 설치하자. 설치 중간에 오토잇 파일을 더블 클릭하면 RUN 시킬것 이냐, EDIT 모드로 띄울 것이냐 선택하는 부분이 나오는데 후자를 추천한다.

공식 홈페이지 : http://www.autoitscript.com/site/autoit/ 에서 다운로드 가능하다.

http://www.autoitscript.com/autoit3/docs/ 에는 스크립트 언어 참조에 대한 상세한 설명이 있어 추후 설명부분은 이분으로 대처하겠다.


컨트롤이 잘 되지 않는 경우(문제해결)

권한이 없는 경우 윈도우에서 컨드롤이 불가능 하다.

이 경우 UAC(사용자 계정 컨트롤)을 OFF상태에서 수행하도록 한다.

WIN8같은 경우는 제어판 만으로도 해결이 되지 않는다.

다음과 같은 방법으로 해결하도록 한다.


Windows 8 에서의 문제 해결하기

Windows 8 이상에서는 UAC(User Account Control)이 강화되어, UAC 를 제어판에제어 끄는 것 만으로 완전히 UAC가 차단되지 않는다고 한다. 따라서 다른 어플리케이션이 동작중일 경우 오토잇이 이를 컨트롤하지 못하게 하여 컨트롤이 안되는 경우가 있다.

해결방법 : 제어판에서 끄고, 레지스트리(REGEDIT)에서 끄는 방법으로 처리

레지스트리 수정 :

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System]
"EnableLUA"=dword:00000000




참고(인용) : http://cappleblog.co.kr/56

실행 및 첫 번째 스크립트 작성하기


C:\Program Files\AutoIt3\SciTE\SciTE.exe 를 실행하거나, 등록된 윈도우 아이콘을 실행해 본다.




다음과 같은 창이 나타나면 아래 텍스트를 복사해 붙여 넣는다. 그리고 저장버튼을 눌러 파일을 저장한다. 바탕화면에 임의의 파일명으로 저장했다.


;This is my first script
MsgBox(0, "My First Script!", "Hello World!")



ü 오토잇 스크립트로 작성된 파일의 확장자는 *.au3 이다.

ü 오토잇 편집창에서 ‘;’(세미콜론)으로 시작되는 단어부터 문장 한 끝 라인까지는 주석이다. 주석은 코드에 대한 설명이나 정보를 작성해 둘 때 유용하며 실제 스크립트 동작에는 영향을 주지 않는다.

ü 주의 : 작성된 스크립트가 저장되기 이전이면, 스크립트 수행이 불가능 하다. 작성 후 저장은 필수적으로 수행해야 한다.











작성을 다 하고 저장까지 하면 위 그림 화면이 나타난다. Tools 메뉴에 보면 작성된 스크립트를 바로 수행해 볼 수 있다.

옵션이 여러 가지가 있지만, 작성된 스크립트를 바로 실행해보는 Go(F5 키)와 autoit 설치 없이도 exe로 실행 가능하게 만들어주는 Build(F7) 옵션을 알아두자. 물론 작성된 코드에 이상이 없어야만 정상적으로 실행 및 빌드가 가능하다.



ü 작성된 스크립트를 바로 실행해보려면 F5키, exe파일로 만들고 싶으면 F7키를 누른다.



위의 화면에서 F5를 누르거나 Tools 메뉴의 > Go 메뉴를 선택해보자.











위와 같은 화면이 나오면 정상적으로 성공한 것이다. 시작이 반이다. 여러분은 이제 신세계에 입문한 것이다.





주석 추가 하기

이제 스크립트 코드를 다시 보자. 겁먹을 필요 없다. 단 한 줄만으로도 여러분은 위와 같은 메시지 창과 텍스트와 확인 버튼을 넣을 수 있다.













첫 번째 줄은 위에서도 설명했듯이 세미콜론으로 시작했으므로, 사용자에게 정보를 주기 위한 코드다. 이는 실제 실행(GO, F5)시 영향을 주지 않는다. 주석은 autoit에서 기본적으로 녹색 이탤릭 텍스트로 표시된다.

주석은 스크립트에 대한 정보를 남겨 놓아야 나중에 이해 하는데 많은 도움이 되므로 틈틈히 잘 기록해 두기를 추천한다.





제공되는 함수 사용하기



작성된 스크립트의 두 번째 줄을 보자.


MsgBox() 형태로 구성되어 있다. 이렇게 파란색으로 뜨는 것은 미리 만들어져 있는 함수를 사용 하고 있다는 것이다.

스크립트 화면의 아랫줄에 타이핑하여 Msgbox( 까지만 입력해 보자.













친절하게 사용 방법을 알려준다. 하지만 프로그래밍 지식이 없거나 본 스크립트 문법에 친숙하지 않다면 내용 파악이 어렵다. 이때는 위에서 소개한 autoit document 를 참조하도록 한다.



Msgbox는 함수이므로 http://www.autoitscript.com/autoit3/docs/functions.htm 에서 찾을 수 있다. 종류가 많으므로 ctrl + F 을 이용 해 msgbox를 찾아 클릭하자.











검색 후 원하는 함수를 클릭하면 함수에 대한 설명, 사용법들이 나와있다.

이미 충분한 전문가들이 자주 쓰는 기능에 대해서는 다 함수로 만들었다. 따라서 직접 만들어서 쓸 수도 있지만, 이미 검증된 함수를 사용해 코드 작성에 낭비되는 시간을 줄이고, 안정적인 사용이 가능하다는 것이다.

함수를 일일이 다 알아야 하는가에 대한 의문이 들 수도 있으나, 다 외울 필요도 없고 모두다 잘 쓸 필요도 없다. 단, 본인이 스크립트를 사용하면서 필요 하겠다 싶은 많은 기능들이 이미 함수로 구현되어 있어, 이렇게 검색이나 참조를 통해 쉽게 이용이 가능하다.





제공되는 함수 문법 익히기

이제 다시 MsgBox 함수로 돌아가보자. 함수명은 MsgBox로 메시지 박스이다. 친절하게도 영어로 설명이 잘 되어있다. 그리 어렵게 설명되어 있지 않으니 이해 하는데는 큰 어려움이 없을 것이다.

함수는 보통 함수이름() 괄호로 묶이며 ()안에는 파라미터가 또 존재한다. Msgbox함수는 flag, title, text, timeout, hwnd 파라메터다. 파라메터는 필수로 값을 입력 해야하는 파라메터와, 옵션으로 입력할 수 있는 파라메터를 가진다.



Flag 같은 경우는 일종의 옵션으로 볼 수 있다. 도큐먼트에 자세히 설명이 나와있지만 0을 입력하는 경우 ok버튼, 1을 입력하는 경우 Ok 버튼과 cancel 버튼이 자동으로 생성된다.











위 왼쪽과 오른쪽의 버튼의 차이가 보이는가? 왼쪽이 플래그를 0으로 입력한 경우이고, 오른쪽이 플래그를 1로 입력한 경우이다.

두번째 파라메터는 title, 세번째는 text이다. Title은 윈도우 창의 상단 header title을 의미하고, text는 메시지 창안에 텍스트를 의미한다.

입맛에 맞게 바꾸어보자. Flag를 1, Title을 autoit, text를 abcd로 변경해 보겠다.












다음과 같이 출력 되었으면 정상 출력 된 것이다.





가장 기본이 되는 변수 다루기

이번엔 변수에 대해 알아보자. 변수 사용은 프로그래밍에 있어 가장 기본적이고 가장 중요한 부분이다.

전산학에서의 변수란 데이터를 담는 그릇이라고 보면 된다. 예를 들어 1 + 1 에 대한 결과 프로그램을 만들고 싶으면, 앞에 1과 뒤에 1을 담는 그릇이 필요하다. 위와 같은 데이터에 대한 다양한 연산을 수행하기 위해서는 데이터가 기억장치에 저장되어 있어야 한다. 그 기억장치에 공간을 확보하고 숫자를 집어넣고, 그에 대한 출력 값을 담을 그릇 또한 필요하다.



ü 프로그래밍의 가장 기본은 바로 입력 – 연산 – 출력이다. 변수 선언은 입력 값을 연산을 위해 보관하기 위해 저장장치의 공간을 확보하겠다는 뜻이며, 실제 코드가 실행될 때 자동으로 공간을 확보해 준다. 이 공간은 주기억장치(RAM)의 용량을 사용하는 것이다.



ü autoit에서는 $변수명 = 값



왼쪽은 이름, 오른쪽은 값이다. $점심값 = 5000 이라고 입력했다면, 점심값은 현재 5000 원이라고 컴퓨터는 기억하게 된다. 그러나 점심값은 때에 따라서 올라 갈 수도 있고 내려 갈 수도 있는데, 이럴 때 처리를 위해서 변수가 필요한 것이다.

다음의 코드를 작성해 보자.


$var_operand1 = 1
$var_operand2 = 2
$var_sum = $var_operand1 + $var_operand2



위의 문장들을 일반적으로 ‘선언문’ 이라고 하며, 가장 기본적인 문장이다. A 는 B 이다 식의 구조를 가진다. 4번째 줄 문장처럼 필요에 따라서는 사칙연산이나, 논리연산이 활용 될 수도 있다. 위에서는 총 3개의 변수를 선언 했다.

$var_operand1 을 선언하고 값으로는 숫자 1을, $var_operand2 를 선언하고 값으로는 숫자 2를, $var_sum 에는 $var_operand1의 값과 $var_operand2 를 더한 결과 값을 할당했다.

실제 코드를 수행해보자. 아무런 결과값이 나오지 않는다. 왜냐하면 연산만 했지 결과값을 화면에 출력해주는 부분은 작성되지 않았기 때문이다. 스크립트는 요청한 연산만을 수행한다는 것을 꼭 기억하자.

아래 스크립트를 작성 및 저장 하고 하고 F5키를 눌러보자.

$var_operand1 = 1
$var_operand2 = 2
$var_sum = $var_operand1 + $var_operand2
ConsoleWrite ($var_sum)
MsgBox(0, "Sum is", $var_sum)



다음과 같은 화면이 출력 될 것이다.









6번째 줄의 문장을 통해, 콘솔 화면에 3 이라는 결과값이 출력되었다. 변수의 값을 오토잇 콘솔화면에 출력하고 싶으면 해당 함수를 이용한다. 그 뒤에 붙는 >Exit… 문장은 시스템 출력 메시지이다.



이번에는 앞에 설명했던 msgbox 를 통해 출력 해 보자.

$var_operand1 = 1

$var_operand2 = 2



$var_sum = $var_operand1 + $var_operand2



MsgBox(0, "Sum is", $var_sum)



위의 스크립트를 작성하고 실행 해 본다.








실제 연산결과인 3이 정상적으로 $var_sum에 할당되었고 그 값을 메시지 박스로 불러와 출력이 정상적으로 성공했다.

ü 해보기 : Msgbox에 $var_operand1, $var_operand2, $var_sum 을 바꿔가며 출력해보자.





자료형에 대해 알아보기

우리가 쓰는 많은 용어와 단어 들도 같은 말이지만 상황에 따라서 다른 것이 되는 경우가 있다. 여러 타입이 있지만 가장 많이 쓰는 것이 숫자타입과, 문자 타입을 알아보자.

 
$var_test = test


MsgBox(0, "var_test is", $var_test)



위의 문장을 실행해 보자.









메시지 박스가 정상적으로 출력되지 않고, editor 하단에 에러코드가 출력된다.



그렇다면 이번에는 $var_test의 내용을 test가 아닌 1로 출력해보자. $var_test = 1 로 변경하고 한번 출력해보자.













1은 되고 test는 안된다? 컴퓨터에게 숫자인지 문자인지 구분해서 알려줘야 한다. 이런 구분을 자료형이라고 하는데, 컴퓨터에게 정확한 처리를 하게 하기 자료형들은 이미 사전에 약속되어 있는 형태로 처리되어야 올바른 결과를 줄 수 있기 때문이다. 그렇다면 문자는 어떻게 써야 할까? 바로 “ ” 로 묶어 주는 것이다. 그러면 컴퓨터한테 얘는 문자니깐 문자로 처리해줘~ 라고 하는 것이다.

따라서 기본적으로 autoit에서의 변수는 숫자타입으로 선언되어 있어 1은 특별히 숫자라고 “ ” 같은 어떤 형태로 지시하지 않아도 알아 듣는다.



ü 데이터 형식과 변수의 형태에 대한 설명은 오토잇 도움말을 참고하도록 합니다.



다음 문장을 출력해 보자.

$var_test = “test”



MsgBox(0, "var_test is", $var_test)












이제 에러없이 정상 출력된다.



ü autoit의 변수의 기본타입은 숫자형이다. 문자형으로 사용하고 싶으면 “ ” 로 묶어준다.



스크립트 중간에 값을 줄 수는 없나요?

지금까지는 코드안에 직접 변수의 값을 넣었지만, 실행중에 중간에 값을 받아서 저장 할 수도 있다. 다음의 코드를 실행해 보자.

$answer = InputBox("Question", "Where were you born?", "Planet Earth")



MsgBox(0, "Your answer is", $answer)












값을 직접 입력해 보거나, 변경한 후 OK 버튼을 눌러보자











이렇게 메시지 창을 통해 변수의 값을 할당 받고, 저장하고 출력 할 수 있다.

-다음 글에 계속-