robot framework 을 이용한 기능 테스트...

152
1 RobotFramework 이용한 기능 테스트 자동화 오재훈 ()넷스루 연구소장 ( 이메일 : [email protected] , [email protected] , 페이스북 : https://www.facebook.com/jaehoon.oh.503 )

Upload: jaehoon-oh

Post on 16-Apr-2017

1.063 views

Category:

Software


20 download

TRANSCRIPT

Page 1: Robot framework 을 이용한 기능 테스트 자동화

1

RobotFramework 를 이용한 기능 테스트 자동화

오재훈 (주)넷스루 연구소장

( 이메일 : [email protected], [email protected],

페이스북: https://www.facebook.com/jaehoon.oh.503 )

Page 2: Robot framework 을 이용한 기능 테스트 자동화

2

소프트웨어를 빈번하게 출시해야 하는 상황에서도 높은 품질의 소프트웨어를

유지하기 위한 방법들을 소개한다. RobotFramework 를 이용한 레거시 시스템의

테스트 자동화 방법, 개발 초기부터 테스트를 자동화하는 인수테스트 주도

개발방법을 워크샾을 통해 몸에 익힌다. 테스트 자동화에 필요한 지식과 경험을

통해서 테스트 자동화를 현업에 적용하는 시발점을 제공한다.

이 자료의 목표

교육 목표

- 테스트 자동화의 개념을 이해하고, QA(테스트 엔지니어)가 해야할 역할과 책임을

파악한다.

- 테스트 자동화 프레임워크인 RobotFramework 를 이용해서 자동화된 테스트를

작성할 수 있다.

- 인수테스트 주도개발 방법으로 프로그래머와 협력하는 방법을 경험한다.

- 테스트 자동화를 점진적으로 개선하기 위한 다양한 방법과 경험들을 함께 만들고

공유한다.

개요 및 목표

2

Page 3: Robot framework 을 이용한 기능 테스트 자동화

3

Contents

Ⅱ. RobotFramework

Ⅳ. Commad Line Options

Ⅰ. SW 테스트 자동화

Ⅲ. Web Application Test

Page 4: Robot framework 을 이용한 기능 테스트 자동화

4

SW 테스트 자동화

1. SW 테스트

2. SW 테스트 자동화

3. SW 테스트 종류와 자동화

Page 5: Robot framework 을 이용한 기능 테스트 자동화

5

● 요구사항을 언제 전달받나요?● 요구사항의 의미를 이해하고 파악하는 방법은 무엇인가요?● 테스트 케이스를 언제 설계하나요?● 테스트 대상 시스템은 언제 전달받나요?● 테스트 대상 시스템을 전달 받은 후, 도출된 결함후보를 언제 어떻게 전달하나요?● 결함 후도들의 결함여부를 어떻게 결정하나요?● 결함이 수정된 버전을 받는데 얼마나 많은 시간이 걸리나요?● 개발팀과 언제 어떻게 소통하나요?● 제품을 얼마나 자주 출시하니요? (출시 주기)● 테스트를 얼마나 자주 반복하나요?● 자동화된 테스트가 있나요?● 자동화된 테스트가 있다면, 테스트 자동화 비중은 얼마나 되나요?

SW 테스트

테스팅 경험

Page 6: Robot framework 을 이용한 기능 테스트 자동화

6

전통적인 소프트웨어 테스트에서 어떤 문제들을 겪는가?

SW 테스트

Page 7: Robot framework 을 이용한 기능 테스트 자동화

7

V&V 모델

Page 8: Robot framework 을 이용한 기능 테스트 자동화

8

전통적인 SW 테스트에서 발생하는 문제들

● 개발 결과에 대한 피드백 주기가 길다.● 잘못 개발했다는 것을 너무 늦게 안다.● 개발자와 테스터가 요구사항을 다르게 이해하는 현상이 발생한다.● 개발내용이 요구사항에 부합하지 않는다는 사실을 프로젝트 막바지에 발견한다.

● 개발자-테스터간 협력이 일어나지 않는다.● 개발자-테스터가 서로를 비난하거나 비판한다.● ...

SW 테스트

Page 9: Robot framework 을 이용한 기능 테스트 자동화

9

소프트웨어 테스트 자동화가 왜 필요한가요?

테스트 자동화

Page 10: Robot framework 을 이용한 기능 테스트 자동화

10

테스트 자동화 왜 해야 하나?

Page 11: Robot framework 을 이용한 기능 테스트 자동화

11

● 소프트웨어를 자주 출시해서 자주 테스트해야 한다. ( 1개월/1주일/매일 )● 수작업 테스트는 너무 오래 걸린다.● 수작업 테스트를 수행하면 실수가 생긴다.● 테스트를 자동화하면 사람은 본연의 개발 업무에 더 집중할 수 있다.● 회귀테스트가 자동화되면 좀 더 안전하다.● 자동화된 테스트는 더 자주, 더 많이 피드백을 준다.● 테스트 자체가 훌륭한 문서다.● ...

테스트 자동화 왜 해야 하나?

Page 12: Robot framework 을 이용한 기능 테스트 자동화

12

무엇을 얼마나 자동화 해야 하나?

테스트 자동화의 장애물

Page 13: Robot framework 을 이용한 기능 테스트 자동화

13

테스트 피라미드

Page 14: Robot framework 을 이용한 기능 테스트 자동화

14

무엇이 테스트 자동화를 방해하는가?

테스트 자동화의 장애물

Page 15: Robot framework 을 이용한 기능 테스트 자동화

15

항상 바쁘다.

자동화를 왜 해야 하나요?

고통의 고갯마루

끊임없이 변화하는 코드

레거시 시스템

공포심

오래된 습관들

테스트 자동화의 장애물

Page 16: Robot framework 을 이용한 기능 테스트 자동화

16

자동화를 어떻게 해야 하는가?

테스트 자동화의 장애물

Page 17: Robot framework 을 이용한 기능 테스트 자동화

17

테스트 사분면

Page 18: Robot framework 을 이용한 기능 테스트 자동화

18

목적 : 테스트 용이성 ( 얼마나 테스트하기 쉬운가? )

- 단위 테스트, 통합테스트, 시스템테스트, 컴포넌트 테스트, 배포 테스트 - 개발자가 테스트를 작성하고 유지보수한다.- 내부 품질- CI 에서 실행됨

테스트 종류 설명

단위 테스트 데이터페이스 , 파일시스템 , 외부 시스템의 연동없이 단위 기능 하나하나가 정상 동작하는지 점점한다.개발자 관점 - 프로그램 설계

컴포넌트 테스트 시스템을 구성하는 컴포넌트들이 정상적으로 통합되어 기능이 동작하는지 점검한다.아키텍처 관점 - 시스템 테스트

배포 테스트 애플리케이션을 배포한 후에 애플리케이션이 정확하게 설치됐는지 , 제대로 설정됐는지 , 필요한 서비스에 접속할 수 있는지, 제대로 응답하는지를 점검한다.

팀을 지원하는 기술측면 테스트

Q1 Q4

Q2 Q3

Page 19: Robot framework 을 이용한 기능 테스트 자동화

19

장점

- 단위 테스트는 안전망- 리팩토링을 지원- 속도가 아니라, 품질이 목적이다.- 설계에 대한 자신감

팀을 지원하는 기술측면 테스트

Page 20: Robot framework 을 이용한 기능 테스트 자동화

20

비지니스를 지원하는 기술측면 테스트

목적

- 비즈니스 관점의 테스트로 개발을 이끈다.- 올바른 질문을 한다.- 고객이 명확하게 이해하도록 돕는다.- 예제를 만들어내고, 실행가능한 테스트로 표현한다.- 외부 품질과 관련되어 있다.- 개발이 언제 끝나는지를 정의한다.

테스트

- Functional Test- Examples- Story Tests- Simulation

Q1 Q4

Q2 Q3

Page 21: Robot framework 을 이용한 기능 테스트 자동화

21

제품평가를 위한 비즈니스측면 테스트

목적

- 애플리케이션이 사용자가 기대하는 기능을 제공하는지 확인한다.- 애플리케이션이 명세를 만족시키는지를 검증한다.- 애플리케이션의 명세가 올바른지도 확인한다. - 제품 평가를 위한 테스트를 공개적인 행사로 진행한다.

Q1 Q4

Q2 Q3

테스트 종류 설명

탐색적 테스트 테스트 수행과정에서 얻는 정보를 이용해 새롭고 더 나은 테스트를 설계한다.창조적인 배움의 과정으로 오류를 발견하고 애플리케이션의 신규요구사항을 제공한다.

사용성 테스트 사용자가 자신의 목적을 얼마나 쉽게 달성할 수 있는지 확인하기 위해 수행한다.애플리케이션이 사용자에게 진정 가치가 있는지를 확인한다.

사용자 인수테스트

시스템이 실제 운영 환경에서 사용될 준비가 되었는지 최종적으로 확인하는 단계이다. 시스템 검사는 사용자가 평가하고 관리자가 점검한다.

알파/베타 테스트

시스템을 릴리즈하기 직전단계의 테스트

Page 22: Robot framework 을 이용한 기능 테스트 자동화

22

제품평가를 위한 기술측면 테스트

목적 : 제품이 비기능 요구사항을 충족하는지를 테스트한다.

- 시스템의 용량, 가용성, 보안등 비기능 테스트를 수행한다.- 비기능 인수조건은 기능 인수 조건과 같은 방법으로 애플리케이션 요구사항의 일부다.

- 프로젝트 시작전에 기본적 비기능 테스트를 구축한다.- 도구를 이용하여 자동화한다.

Q1 Q4

Q2 Q3

Page 23: Robot framework 을 이용한 기능 테스트 자동화

23

RobotFramework

1. RobotFramework 소개

2. RobotFramework 설치

3. RobotFramework 테스트 케이스 작성하기

Page 24: Robot framework 을 이용한 기능 테스트 자동화

24

RobotFramework 란?

● 범용 테스트 자동화 프레임워크○ Keyword-Driven 방식의 테스팅을 사용○ End-to-End 인수테스트○ ATDD(Acceptance Test Driven Development) 도구로도 사용가능

● Python 으로 구현됨○ Jython(JVM), IronPython(.Net) 에서도 실행가능○ Python, Java 언어로 기능을 확장할 수 있음

● 오픈 소스○ GitHub 에 소스 존재○ Apache License○ Nokia Siemens Network 의 테스트 프레임워크

Page 25: Robot framework 을 이용한 기능 테스트 자동화

25

RobotFramework 특징

● 테이블 형식 문법으로 테스트 케이스를 쉽게 생성할 수 있다.● 기존 키워드들을 이용하여 상위 수준의 키워드를 재정의할 수 있다.● 보고서와 로그를 HTML 포맷으로 제공한다. ● Platform 과 Application 에 독립적이다.● 테스트 라이브러리를 Python 이나 Java 로 쉽게 구현할 수 있다.● 기존 빌드 인프라구조를 위한 command line interface 를 제공한다. ● 웹 테스트를 위한 Selenium, Java GUI 테스팅, 프로세스 실행, Telnet, SSH 등을 제공한다.

● Data-Driven 테스트 케이스를 지원한다.● 실행할 테스트 케이스를 선택하고 분류하는 태그를 제공한다.● 테스트 케이스, 테스트 슈트 수준의 setup / teardown 을 제공한다.

Page 26: Robot framework 을 이용한 기능 테스트 자동화

26

RobotFramework 구조

Page 27: Robot framework 을 이용한 기능 테스트 자동화

27

RobotFramework 설치

구분 용도

Python Robot 프레임워크 구동을 위한 언어. RobotFramework 은 Python 2.7 에서 동작하기 때문에 Python 2.7.x 를 설치한다. Python 3.x 에서는 RobotFramework 이 실행되지 않는다.

RobotFramework 테스트 자동화를 위한 테스트 프레임워크 도구 중 하나

Page 28: Robot framework 을 이용한 기능 테스트 자동화

28

Python 2.7 설치

Python 2.7 설치 여부 확인

1. Command 창을 띄운다.2. python --version 명령을 실행한다.3. Python 이 설치되지 않은 경우에는 아래 화면처럼 보인다.

<Python 설치되지 않은 경우>

Page 29: Robot framework 을 이용한 기능 테스트 자동화

29

Python 2.7 설치

Python 설치1. https://www.python.org/downloads/release/python-2711/ 접속한다.2. Windows x86-64 MSI Installer 를 다운받는다 .3. 다운받은 Installer 파일(python-2.7.11.amd64) 를 실행한다. 4. 시스템 환경 변수의 Path 에 “C:\Python27”, “C:\Python27\Scripts” 를 추가한다.

a. 시스템 속성 화면을 띄운다. (제어판>시스템보안>시스템>고급 시스템 설정)b. 시스템 속성 화면 “고급" 탭에서 “환경 변수" 버튼을 클릭한다.c. 시스템 변수에서 Path 를 선택한 다음, 편집을 클릭한다.d. 새로 만들기를 클릭하고, C:\Python27 를 입력한다.e. 새로 만들기를 클릭하고, C:\Python27\Scripts 를 입력한다.f. 확인을 누르고 빠져나온다 .

Page 30: Robot framework 을 이용한 기능 테스트 자동화

30

Python 2.7 설치

설치 확인 방법1. Command 창을 새로 띄운다.2. python --version 명령을 실행한다.3. <Python 정상 설치시 실행 화면> 처럼 보이면 설치 완료

<Python 정상 설치시 실행 화면>

Page 31: Robot framework 을 이용한 기능 테스트 자동화

31

RobotFramework 설치하기

설치 하기1. Command 창에서 “pip install robotframework” 을 실행한다.

설치 확인1. Command 창에서 pybot 명령을 실행한다.

<RobotFramework 설치 화면>

<pybot 정상 설치시 실행 화면>

Page 32: Robot framework 을 이용한 기능 테스트 자동화

32

*** Test Cases ***Test Should Be Equal as Integers Should Be Equal As Integers 42 42 Should Be Equal As Integers ABCD abcd base=16 Should Be Equal As Integers 0b1011 11

실습 - 첫번째 Test Case

실습 : BuiltIn Assert 문을 이해하기 위한 테스트 케이스를 만든다.

목적 :- Builtin Assertion Keyword 들을 이해하고 사용한다.- Test Case 파일의 Test Cases 테이블의 구조를 이해한다.- Test Case 파일을 실행하는 방법을 이해한다.- Test 실행 결과를 파악할 수 있다.

파일 이름 : Assert.robot 테스트케이스 실행방법 : pybot Assert.robot실행결과 확인

- 콘솔 - 테스트 실행 보고서 : ./report.html- 테스트 로그 : ./log.html

<Assert.robot 파일 내용>

Page 33: Robot framework 을 이용한 기능 테스트 자동화

33

Keywords Libraries

Strategy Description

Builtin http://robotframework.org/robotframework/latest/libraries/BuiltIn.html

Collections http://robotframework.org/robotframework/latest/libraries/Collections.html

DateTime http://robotframework.org/robotframework/latest/libraries/DateTime.html

Dialogs http://robotframework.org/robotframework/latest/libraries/Dialogs.html

OperatingSystem http://robotframework.org/robotframework/latest/libraries/OperatingSystem.html

Process http://robotframework.org/robotframework/latest/libraries/Process.html

ScreenShot http://robotframework.org/robotframework/latest/libraries/Screenshot.html

String http://robotframework.org/robotframework/latest/libraries/String.html

Telnet http://robotframework.org/robotframework/latest/libraries/Telnet.html

XML http://robotframework.org/robotframework/latest/libraries/XML.html

Selenium2Library http://robotframework.org/Selenium2Library/doc/Selenium2Library.html

DatabaseLibraryhttp://franz-see.github.io/Robotframework-Database-Library/api/0.5/DatabaseLibrary.html

RobotFramework 에서 사용할 수 있는 Keyword Library 들의 도움말

Page 34: Robot framework 을 이용한 기능 테스트 자동화

34

Keyword Arguments 설명

Should Be Empty item, msg=None item 이 empty 인지 검사한다. ↔ Should Not Be Empty

Should Be Equal first,second,msg=None,values=True

first 와 second 가 동일한지 비교한다. ↔ Should Not Be Equalvalues 가 False 이면 msg 만 출력한다. ( msg 가 없을 때는 값을 출력함. )

Should Be Equal As Integers

first,seocnd,msg=None,values=True,base=None

first와 second 를 정수로 변환한 값이 같은지 검사한다. ↔ Should Not Be Equal As Integers

Should Be Equal As Numbers

first,seocnd,msg=None,values=True,precision=6

first 와 second 를 숫자로 바꾼 다음에 일치하는지 검사한다. prcision 에 지정한 소수점 자리까지 값이 일치하는지 비교한다.↔ Should Not Be Equal As Numbers

Should Be Equal As Strings

first,seocnd,msg=None,values=True

first 와 seoncd 를 문자로 변환한 값이 일치하는지 검사한다.↔ Should Not Be Equal As Strings

Should Be True condition,msg=None condition 이 참인지 검사한다. ↔ Should Not Be True

Should Contain container,item,msg=None,values=True

container 가 item 을 포함하고 있는지 검사한다. ↔ Should Not Contain

Should Contain X Times

container,item,count,msg=None,values=True

container 가 item 을 정확하게 count 번 포함하고 있는지 검사한다. ↔ Should Not Contain X Times

Should End With str1,str2,msg=None,values=True

str1 이 str2 로 끝나는지 검사한다.

Builtin Assertions

RobotFramework 이 Builtin 으로 제공하는 Assertion 문들

Page 35: Robot framework 을 이용한 기능 테스트 자동화

35

Keyword Arguments 설명

Should Match string,pattern, msg=None,values=True

string 이 pattern 과 일치하는지 검사한다. ↔ Should Not Matchpattern 에 *,? 를 사용할 수 있다. (? 임의의 문자 한개 일치, * 임의의 문자 N 개 일치 )

Should Match Regexp

string,pattern, msg=None,values=True

string 이 pattern 과 일치하는지 검사한다. ↔ Should Not Match Regexp

Should Start With str1,str2,msg=None,values=True

str1 이 str2 로 시작하는지 검사한다. ↔ Should Not Start With

Variable Should Exist

name,msg=None name 이라는 변수가 있는지 검사한다.

Variable Should Not Exist

name,msg=NOne name 이라는 변수가 없는지 검사한다.

Builtin Assertions

Page 36: Robot framework 을 이용한 기능 테스트 자동화

36

Keyword 설명

Should Not Be Empty Should Be Empty 의 반대

Should Not Be Equal Should Be Equal 의 반대

Should Not Be Equal As Integers Should Be Equal As Integers 의 반대

Should Not Be Equal As Numbers Should Be Equal As Numbers 의 반대

Should Not Be Equal As Strings Should Be Equal As Strings 의 반대

Shoult Not Be True Shoult Be True 의 반대

Should Not Contain Should Contain 의 반대

Should Not End With Should End With 의 반대

Should Not Match Should Match 의 반대

Should Not Match Regexp Should Match Regexp 의 반대

Should Not Start With Should Start With 의 반대

Variable Should Not Exist Vairable Should Exist 의 반대

Builtin Assertions

Page 37: Robot framework 을 이용한 기능 테스트 자동화

37

반환 코드 설명

0 critical 한 테스트 케이스들이 모두 통과되었다 .

1-249 실패한 critical 테스트 수

250 실패한 critical 테스트 수가 250개 이상

251 도움말 혹은 버전 정보가 출력됨

테스트 성공/실패

Return Code : RobotFramework 실행 프로세스가 실행종료시 반환하는 실행 코드- CI 등과 연동할 때 반환 코드를 이용한다.- --NoStatusRC 옵셩을 주면 critical 한 테스트가 실패하더라도 무조건 0 을 반환한다.

구분 설명

Windows cmd> pybot --versioncmd> echo %ERRORLEVEL% 변수

Unix % pybot --version% echo $?251

반환 코드 확인 방법

Page 38: Robot framework 을 이용한 기능 테스트 자동화

38

테스트 성공/실패

구분 용도

전체 실패 critical 하지 않은 테스트 케이스가 하나라도 실패하면 실패다.

Test Case 실패 Test Case 의 Assertion 문이 실패한다.Test Case 실행에 지정된 시간(Timeout)이상이 소요된다.키워드가 실패한다.

키워드 실패 Keyword 의 Assertion 문이 실패한다.Keyword 실행에 지정된 시간(Timeout)이상이 소요된다.

반환코드는 테스트 실행이 성공/실패했는지를 알려준다.

Page 39: Robot framework 을 이용한 기능 테스트 자동화

39

*** Test Cases ***Test Should Fail Fail Test Failed

실습-Assertion 실패

실습 : 실패하는 테스트 케이스 작성하기

목적 :- 테스트 실행 실패시 반환코드의 값을 이해하고 활용할 수 있다.

확인- 테스트 실행(프로세스)의 반환 코드를 확인한다.

<Assert.robot 파일 내용>

Page 40: Robot framework 을 이용한 기능 테스트 자동화

40

*** Test Cases ***Test Should Fail by Timeout [Timeout] 1

Sleep 2

실습-Test Timeout

실습 : 지정된 시간을 초과하는 테스트 케이스 작성하기

목적 :- Test Timeout 을 이해하고 활용할 수 있다.

확인- 테스트 실행(프로세스)의 반환 코드를 확인한다.

Page 41: Robot framework 을 이용한 기능 테스트 자동화

41

20090322 19:58:42.528 ERROR Error in file '/home/robot/tests.robot' in table 'Setting' in element on row 2: Resource file 'resource.robot' does not exist

20090322 19:58:43.931 WARN Keyword 'SomeLibrary.Example Keyword' is deprecated. Use keyword `Other Keyword` instead.

<RobotFramework 실행 오류 로그>

오류와 경고 : 테스트를 실행하는 동안에 발생한 오류들은 ERROR 와 WARNING 으로 구분된다.오류와 경고는 콘솔에도 출력되고, log 파일의 “Test Execution Errors” 섹션에도 기록된다.

오류와 경고

Page 42: Robot framework 을 이용한 기능 테스트 자동화

42

*** Test Cases ***Test Should Fail by Timeout [Timeout] 1

Sleep 2

실습-에러 유발하기

실습 : 테스트 케이스 파일에 오류를 발생시킨다 .

목적 :- 오류를 발생시키고 , 오류가 보고되는 방식을 이해할 수 있다.

확인- 콘솔 화면- log.html

Page 43: Robot framework 을 이용한 기능 테스트 자동화

43

Critial Test 가 모두 성공한 경우는 배경이 초록색

Report 파일 생성 - 기본 이름 : report.

html

테스트 보고서

Page 44: Robot framework 을 이용한 기능 테스트 자동화

44

테스트 보고서

Critial Test 가 하나라도 실패한 경우는 배경이 빨간색

Page 45: Robot framework 을 이용한 기능 테스트 자동화

45

*** Test Cases ***Test Should Fail by Timeout [Timeout] 1

Sleep 2

실습-Tag 이용하기

실습 : Test Case 에 tag 를 지정하고, 테스트 실행시 tag 를 사용한다.- 실패하는 Test Case 에는 indev 태그를 단다.- 성공하는 Test Case 에는 finished 태그를 단다.

목적 :- Test Case 에 tag 를 지정하는 방식을 이해하고 활용할 수 있다.- Tag 를 이용하여 테스트를 실행할 수 있다.

실행- pybot --noncritical indev .

확인- 콘솔 화면 : 테스트 - 실행 프로세스의 반환 코드를 확인한다.- report.html : 보고서 결과가 성공인지 확인한다.

Page 46: Robot framework 을 이용한 기능 테스트 자동화

46

변수 설명

[Documentation] 테스트 케이스에 대한 설명을 문서화한다 .

[Tags] 테스트 케이스에 대한 tag 를 지정한다 .

[Setup] 테스트 케이스가 시작되기 전에 실행할 키워드를 지정한다 .

[Teardown] 테스트 케이스가 종료된 후에 실행할 키워드를 지정한다 .

[Timeout] 테스트 케이스의 타임아웃을 지정한다 . 테스트 실행시간이 지정된 시간을 초과한 경우, 테스트가 강제로 종료되고 테스트 케이스는 실패한다 .

[Template] 사용할 Template 키워드를 정의한다 .

테스트 자체에는 Argument 로 사용할 데이터만 포함한다 .

Test Cases Table

테스트 케이스 테이블에서 설정할 수 있는 항목들은 다음과 같다.- Setup / Teardown 이 설정되면, Settings Table 에서 정의한 Setup/Teardown 은 무시된다.

Page 47: Robot framework 을 이용한 기능 테스트 자동화

47

*** Test Cases ***Test Should Be Equal as Integers [Setup] Log To Console Start Of ${TEST NAME} [Teardown] Log To Console End Of ${TEST NAME} Should Be Equal As Integers 42 42 Should Be Equal As Integers ABCD abcd base=16 Should Be Equal As Integers 0b1011 11

실습-Test Setup/Teardown

실습 : Test Case 에 Setup/Teardown 시 화면에 로그를 출력한다.- Test Case 의 [Setup] 에서 화면에 로그를 출력한다.- Test Case 의 [Teardown] 에서 화면에 로그를 출력한다.

목적 :- Test Case 의 실행 구조를 파악하고 활용할 수 있다.

확인- 테스트를 실행해서 테스트 케이스가 성공하는지 확인한다.

<Test Case 의 Setup/Teardown>

Page 48: Robot framework 을 이용한 기능 테스트 자동화

48

*** Variables ***${ABCD} ABCD

*** Test Cases ***Test Should Be Equal as Integers Should Be Equal As Integers 42 42 Should Be Equal As Integers ${ABCD} abcd base=16 Should Be Equal As Integers 0b1011 11

실습-변수 사용하기

실습 : 상수 ABCD 를 변수로 선언한다.

목적 :- 변수로 선언하고 활용할 수 있다.

확인- 테스트를 실행해서 테스트 케이스가 성공하는지 확인한다.

<변수 사용 예제>

Page 49: Robot framework 을 이용한 기능 테스트 자동화

49

실습 : 상수 0b1011 를 변수로 선언하고, 테스트에 사용한다.목적 :

- RobotFramework 에서 0b1011 은 binary 로 표현된 숫자 형식이다. - 이런 형식을 처음보는 사람은 의미를 파악하기 쉽지 않다. - 0b1011의 의미를 쉽게 파악할 수 있게 의미 있는 변수 이름을 짓는다.

확인- 테스트를 실행해서 테스트 케이스가 성공하는지 확인한다.

실습-변수 사용하기

Page 50: Robot framework 을 이용한 기능 테스트 자동화

50

Variables

구분 설명

Scalar Variable *** Variables ***${NAME} Robot Framework${VERSION} 2.0${ROBOT} ${NAME} ${VERSION}${ERROR} VALUE1 VAUE2 #Error

List Variable *** Variables ***${TEAM1_MANAGER} Michael@{TEAM1_MEMBER} Tom Peter@{TEAM1} ${TEAM1_MANAGER} @{TEAM1_MEMBER}

Dictionay Variable *** Variables ***&{USER} username=robot password=pass

Environment Variable *** Test Cases ***Env Variables Log Current user: %{USER} Run %{JAVA_HOME}${/}javac

RobotFramework 에서는 다양한 형식의 변수들을 사용할 수 있다.

Page 51: Robot framework 을 이용한 기능 테스트 자동화

51

List Variables

List Variable : 프로그램 언어의 배열- 정의 : @{USER} robot password- 키워드의 Argument 로 List 변수를 넘길 수 있음

- Login robot password- Login @{USER}

- 요소를 접근하는 방법- @{USER}[index]

- 양의 index 는 0~n-1 ( 0: 맨처음, n-1: 맨끝 )- 음의 index -n~-1 ( -1: 맨끝, -n:맨처음 )

- Log To Console @{USER}[0], @{USER}[1]- Log To Console @{USER}[-2], @{USER}[-1]

- 요소가 하나밖에 없는 List Variable 은 Scalar Variable 로 접근할 수 있음- @{MANAGER} Me- Log To Console ${MANAGER}

Page 52: Robot framework 을 이용한 기능 테스트 자동화

52

Dictionay Variable

Dictionary Variable : (key,value) 쌍을 가지는 자료구조 - 정의 :

- *** Variables ***- &{USER} username=robot password=pass

- 키워드의 Argument 로 Dictionary 변수를 넘길 수 있음- *** Test Cases ***

- Login username=robot password=pass- Login &{USER}

- 요소를 접근하는 방법 : - &{USER}[name]

- Log To Console &{USER}[username], &{USER}[password]- ${USER.name}

- Log To Console ${USER.username}, ${USER.password}- Dictionary 추가된 순서로 접근하는 방법 : &{User}[${1}]

- 요소의 키를 배열로 가져오기 : @{USER}- Log To Console @{USER}

Page 53: Robot framework 을 이용한 기능 테스트 자동화

53

실습 : 광역자치단체가 인구순으로 정렬 되었는지 확인한다.- 지방자치단체 목록을 담은 변수를 선언한다.- 첫번째 원소가 ‘경기’인지 확인한다.- 마지막 원소가 ‘제주'인지 확인한다.목적 :

- 목록형 변수를 이해하고 활용할 수 있다.

확인- 테스트를 실행해서 테스트 케이스가 성공하는지 확인한다.

실습 - 변수 사용하기

경기 서울 부산 인천 대구 대전 광주 울산

12522 10022 3513 2925 2487 1518 1472 1173

경남 경북 충남 전남 전북 충북 강원 제주

3364 2702 2077 1908 1869 1583 1549 624

<2016 광역자치단체별 인구수(단위:천명)>

Page 54: Robot framework 을 이용한 기능 테스트 자동화

54

** Variables ***@{PROV_ORDERED_BY_POPULATION} 서울 경기 부산 제주

*** Test Cases ***Test Province Ordered By Population Should Be Equal @{PROV_ORDERED_BY_POPULATION}[0] 서울 Should Be Equal @{PROV_ORDERED_BY_POPULATION}[-1] 제주

실습 - 변수 사용하기

Page 55: Robot framework 을 이용한 기능 테스트 자동화

55

실습 : 각 광역자치단체별 인구수 Dictionary 로 선언하고 - 지방자치단체별 인구수를 Dictionary 로 선언한다.- 자치단체별 인구수가 올바로 할당되었는지 검사한다.목적 :

- dictionary 변수를 이해하고 활용할 수 있다.

확인- 테스트를 실행해서 테스트 케이스가 성공하는지 확인한다.

실습 - 변수 사용하기

Page 56: Robot framework 을 이용한 기능 테스트 자동화

56

*** Variables ***&{PROV_ORDERED_BY_POPULATION} 경기=12522 서울=10022 부산=3513 제주=624&{DICT} username=Tom password=secret

*** Test Cases ***Test Province Should Be Equal &{PROV_ORDERED_BY_POPULATION}[경기] 12522 Should Be Equal ${DICT.username} Tom

실습 - 변수 사용하기

Page 57: Robot framework 을 이용한 기능 테스트 자동화

57

Assigning Variables

구분 설명과 예제

Scalar Vairable keyword 가 반환하는 값들을 scalar variable 로 할당할 수 있다.*** Test Cases ***Assign To List Variable ${scalar}= Get Text username

List Variable keyword 가 List Variable 이나 list 와 유사한 객체를 반환하는 경우 list variable 로 할당할 수 있다.*** Test Cases ***Assign To List Variable @{team}= Create Team Tom Mary Steven Length Should Be @{team} 4

Dictionary Variable keyword 가 Dictionary Variable 을 반환하는 경우 dictionary variable 로 할당할 수 있다.*** Test Cases ***Assign To Dictionary Variable &{dict} = Create Dictionary first=1 second=${2} ${3}=third Length Should Be ${dict} 3 Do Something &{dict} Log ${dict.first}

Multiple Variables keyword 가 list 나 list-like 를 반환하는 경우 여러 변수에 할당할 수 있다.*** Test Cases ***Assign Multiple ${a} ${b} ${c} = Get Three ${first} @{rest} = Get Three @{before} ${last} = Get Three ${begin} @{middle} ${end} = Get Three

Page 58: Robot framework 을 이용한 기능 테스트 자동화

58

Built-in Variables

구분 변수명 설명

Operating System

${CURDIR} 테스트 데이터 파일이 있는 절대 경로. 변수는 대소문자를 구별함.

${TEMPDIR} 시스템 임시 디렉토리에 대한 경로. UNIX 의 경우 /tmp, Windows 의 경우 c:\Documents and Settings\<user>\Local Settings\Temp.

${EXECDIR} 테스트 실행을 시작한 디렉토리의 절대 경로

${/} 시스템 디렉토리 경로 구분자. UNIX: /, 윈도우즈 : \

${:} 시스템 PATH 환경 변수의 구분자. UNIX : ‘:’, 윈도우즈: ‘;’

${\n} 시스템의 라인 구분자. UNIX: \n, Windows : \r\n

Number ${숫자} 예) ${10}, ${3.14}

Boolean ${true} / ${false}

${None} / ${null}

Boolean 값

Python 의 None 값. Java 의 null 값

Space ${SPACE} 공백문자

Should Be Equal ${SPACE} \ \ Should Be Equal ${SPACE * 4} \ \ \ \ \ Should Be Equal ${SPACE * 10} \ \ \ \ \ \ \ \ \ \ \ Should Be Equal "${SPACE}" " " Should Be Equal "${SPACE * 2}" " \ "

Empty ${EMPTY} 빈 값.

Should Be Equal ${EMPTY} \

Page 59: Robot framework 을 이용한 기능 테스트 자동화

59

Automatic Variables

변수 설명 사용 가능

${TEST NAME} 현재 테스트 케이스 이름 Test case

@{TEST TAGS} 현재 테스트 케이스의 태그 목록. 알파벳 순으로. Set Tags, Remove Tags 사용 가능

Test case

${TEST DOCUMENTATION} 현재 테스트 케이스의 Documentation Test case

${TEST STATUS} 현재 테스트 케이스의 상태. PASS 혹은 FAIL Test teardown

${TEST MESSAGE} 현재 테스트 케이스의 메시지

${PREV TEST NAME} 이전 테스트 케이스 이름. 테스트 케이스가 실행되기 전에는 Empty String. Everywhere

${PREV TEST STATUS} 이전 테스트 케이스의 상태. PASS/FAIL. 테스트게이스 실행전 : EMPTY String Everywhere

${PREV TEST MESSAGE} 이전 테스트 케이스의 에러 메지시 Everywhere

${SUITE NAME} 현재 테스트 Suite 의 이름 Everywhere

${SUITE SOURCE} 슈트 파일 혹은 디렉토리의 절대 경로 Everywhere

${SUITE DOCUMENTATION} 현재 테스트 슈트의 Documentation Everywhere

&{SUITE METADATA} 현재 테스트 슈트의 metadata Everywhere

Page 60: Robot framework 을 이용한 기능 테스트 자동화

60

Automatic Variables

변수 설명 사용 가능

${SUITE STATUS} 현재 테스트 슈트의 상태. PASS/FAIL Suite teardown

${SUITE MESSAGE} 현재 테스트 슈트의 전체 메시지. 통계를 포함한다 .

${KEYWORD STATUS} 현재 키워드의 상태. PASS/FAIL User keyword teardown

${KEYWORD MESSAGE} 현재 키워드의 에러 메시지

${OUTPUT FILE} 출력 파일의 절대 경로 Everywhere

${LOG FILE} 로그 파일의 절대 경로 ( Log file 이 없으면 NONE ) Everywhere

${REPORT FILE} 보고서 파일의 절대 경로 ( Report file 이 없으면 NONE ) Everywhere

${DEBUG FILE} Debug 파일의 절대 경로 ( 없으면 NONE ) Everywhere

${OUTPUT DIR} 출력 디렉토리의 절대경로 Everywhere

Page 61: Robot framework 을 이용한 기능 테스트 자동화

61

Variable Priorities

변수 설명 우선순위

Variable Set During Test Execution

키워드 반환 값을 이용해서 정의한 변수나 Set Test/Suite/Global Variable 을 이용해서 정의한 변수는 항상 다른 변수를 덮어쓸 수 있다. 단, 이 변수들은 정의된 스코프동안만 유효하고, 정의된 스코프 외부에서는 유효하지 않다.

1

Built-in Variables 모든 변수중에서 우선순위가 가장 높다. Variable Table, Command Line 을 이용해서 값을 변경할 수 없다.테스트 실행 도중에는 바꿀 수 있다.

2

Variables from Command Line

Test Case 파일의 Variable Table 에서 정의된 변수나 Resource, Variable File 에서 Import 한 변수들을 덮어쓴다.Command Line 에서 지정한 vaiable_files 의 변수보다 개별 설정(--variable) 변수가 우선순위가 높다.

3

Variable Table in a Test Case File

Setting 에서 불러오는 Resource File 이나 Variable File 에 선언된 Variable 을 덮어쓴다.

4

Imported Resource or Variable File

보고서 파일의 절대 경로 ( Report file 이 없으면 NONE ) 5

Page 62: Robot framework 을 이용한 기능 테스트 자동화

62

Variable Scope

변수 설명

Global Scope

(대문자만 사용)

어디에서든 변수에 접근할 수 있다.

정의 방법

- Command Line 에서 정의한다. ( --variable, --variablefile )- Set Global Variable 을 이용해서 정의한다.

Test Suite Scope

(대문자만 사용)

Test Suite Scope 를 가진 변수들은 Test Suite 내 어디에서든 접근할 수 있다.

Test Suite Scope 는 재귀적이지 않다. 하위 레벨의 Suite 에서 상위 레벨 Suite 의 변수들을 접근할 수 없다.

정의방법 :

- Variable Tables 에서 정의한다.- Resource 나 Variable File 에서 가져온다. - Set Suite Variable 이용해서 정의한다.

Test Case Scope

(대문자만 사용)

Test Case 스코프의 변수들은 변수가 정의된 테스트 케이스와 테스트가 사용하는 사용자 Keyword 모두에서 볼 수 있다. 테스트 케이스에서는 글로벌 변수처럼 보이기 때문에 대문자를 사용하는 것을 추천한다.

정의 방법 : Set Test Variable 키워드를 이용하여 정의한다.

Local Scope

(소문자만 사용)

Local Scope 변수들은 변수가 정의된 Test Case 와 Keyword 에서만 보인다. 다른 Test Case 와 Keyword 에서는 보이지 않는다.

정의방법: Local Variable 은 Keyword 의 반환값을 이용해서 정의된다.

Page 63: Robot framework 을 이용한 기능 테스트 자동화

63

실습-실패하는 테스트

실습 : Shoule Be Equal 을 이용해서 실패하는 테스트를 작성한다. - Should Be Equal 은 패러미터를 4개까지 사용할 수 있다.- 첫번째(first), 두번째(second) 패러미터는 필수 패러미터다 .- 세번째(msg), 네번째(values) 패러미터는 선택 팩러미터다 .

목적 : - 실패하는 테스트를 작성하고, 실패시 오류 메시지를 이해한다.- 필수 패러미터와 선택 패러미터를 이해하고 사용할 수 있다.- 선택 패러미터 사용시 패러미터 이름을 지정하고 사용할 수 있다.- 테스트 실패시 화면 출력과 보고서의 내용을 이해할 수 있다.

파일 이름 :Failing_Test.robot 테스트케이스 실행방법 : pybot Failing_Test.robot

확인- 테스트를 실행해서 테스트 케이스가 실패하는지 확인한다.- 콘솔 출력과 출력된 보고서를 확인한다.

Page 64: Robot framework 을 이용한 기능 테스트 자동화

64

*** Test Cases ***Test Print Message of Should Be Equal (msg=,values=False) Should Be Equal ${emptyname} ${emptystring} False

Test Print Message of Should Be Equal (msg=Message,values=False) Should Be Equal ${emptyname} ${emptystring} Message False

Test Print Message of Should Be Equal (msg=,values=True) Should Be Equal ${emptyname} ${emptystring} values=True

Test Print Message of Should Be Equal (msg=Message,values=True) Should Be Equal ${emptyname} ${emptystring} values=True msg=Message

실습-실패하는 테스트

Page 65: Robot framework 을 이용한 기능 테스트 자동화

65

실습-계산기 만들기

실습 : Add 키워드를 정의하고, Add 가 정확하게 결과를 계산하는지 확인하기 위한 테스트를 작성한다.- Add 의 첫번째 패러미터는 augend 이다.- Add 의 두번째 패러미터는 addend 이다.- Add 는 augend 와 addend 의 값을 더한 결과를 반환한다.

목적 : - 사용자 정의 키워드를 선언하는 방법을 이해하고 사용할 수 있다.- 사용자 정의 키워드에서 Argument 를 사용하는 방법을 이해하고 활용할 수 있다.- 사용자 정의 키워드에서 값을 반환하는 방법을 이해하고 활용할 수 있다.- 키워드의 결과값을 변수로 저장하고 활용할 수 있다.

파일 이름 : Calculator.robot 테스트케이스 실행방법 : pybot Calculator.robot

Page 66: Robot framework 을 이용한 기능 테스트 자동화

66

실습-계산기 만들기

*** Test Cases ***Calculator Add Test

${sum}= Calculator Add 1 2Should Be Equal As Integers ${sum} 3

*** Keywords ***Calculator Add [Arguments] ${operand1} ${operand2} ${result}= Evaluate ${operand1} + ${operand2} [Return] ${result}

Page 67: Robot framework 을 이용한 기능 테스트 자동화

67

Keywords Table

변수 설명

[Documentation] 테스트 케이스에 대한 설명을 문서화한다 .

[Tags] 키워드의 태그를 지정한다 .

[Arguments] 키워드의 argument 를 정의한다 .

[Return] 키워드의 반환 값을 지정한다 .

[Teardown] 키워드가 종료된 후에 실행할 Teardown 을 지정한다 .

[Timeout] 키워드의 타임아웃을 지정한다 .

Keyword 는 프로그램의 함수/메소드와 같다.- Argument 를 가질 수 있다.- 반환 값을 가질 수 있다.- 키워드에서 설정할 수 있는 속성은 다음과 같다.

Page 68: Robot framework 을 이용한 기능 테스트 자동화

68

Keyword Argument

Positional Arguments(위치로 식별하는 Arguments)- 키워드에 [Arguments] 를 이용하여 정의한다 .- 키워드를 사용할 때 Argument 결정 방법

- 위치로 결정하기 : Keyword 를 부를 때 사용된 위치에 따라 결정- Print Employee Tom 10

- 이름지정하기 : Keyword 를 부를 때 Argument 의 이름을 지정한다 .- Print Employee age=10 name=Tom

- Argument 의 기본값(default value)- 지정 방식 : [Arguments] ${name} ${age}=10- 기본값을 지정한 Argument 는 선택적인(optional) argument 가 된다. - 기본값이 없는 Argument 는 필수(required) argument 다.- 선택적인 argument 를 필수 argument 앞에 정의하면 , 키워드를 부를 때 오류가 발생한다 .

- 오류 메시지 : Invalid argument specification: Non-default argument after default arguments.- 가변길이 Argument 지정 방식

- 가변길이 Argument : [Arguments] @{students}- 필수 Argument + 가변길이 Argument : [Arguments] ${student} @{friends}- 필수 Argument + 선택 Argument + 가변길이 Argument : [Arguments] ${student} ${age}=10 @{friends}

- Dictionary Argument 지정 ( kwargs )- Dictionary Argument 만 : [Arguments] &{properties}- 필수 + Dictionary Argument : [Arguments] ${teacher} &{properties}- 가변길이 Argument + Dictionary Argument : [Arguments] @{varargs} &{properties}

*** Keywords ***

Print Employee

[Arguments] ${name} ${age}

Log To Console (${name},${age})

<[Arguments] 를 이용해서 정의하기>

Page 69: Robot framework 을 이용한 기능 테스트 자동화

69

Return Value

*** Test Cases ***One Return Value ${ret} = Return One Value argument Some Keyword ${ret}

Multiple Values ${a} ${b} ${c} = Return Three Values @{list} = Return Three Values ${scalar} @{rest} = Return Three Values

*** Keywords ***Return One Value [Arguments] ${arg} Do Something ${arg} ${value} = Get Some Value [Return] ${value}

Return Three Values [Return] foo bar zap

Keyword 의 Return Value 를 지정하는 방법- [Return] 으로 반환- Return From Keyword / Return From

Keyword If 를 사용

*** Test Cases ***One Return Value ${ret} = Return One Value argument Some Keyword ${ret}

Advanced @{list} = Create List foo baz ${index} = Find Index baz @{list} Should Be Equal ${index} ${1} ${index} = Find Index non existing @{list} Should Be Equal ${index} ${-1}

*** Keywords ***Return One Value [Arguments] ${arg} Do Something ${arg} ${value} = Get Some Value Return From Keyword ${value} Fail This is not executed

Find Index [Arguments] ${element} @{items} ${index} = Set Variable ${0} :FOR ${item} IN @{items} \ Return From Keyword If '${item}' == '${element}' ${index} \ ${index} = Set Variable ${index + 1} Return From Keyword ${-1} # Could also use [Return]

Page 70: Robot framework 을 이용한 기능 테스트 자동화

70

실습-계산기 만들기

실습 : 빼기, 곱하기, 나누기 연산을 추가하고, 계산 결과가 정확한지 확인하는 테스트 케이스를 작성한다.

파일 이름 : Calculator.robot 테스트케이스 실행방법 : pybot Calculator.robot

Page 71: Robot framework 을 이용한 기능 테스트 자동화

71

Test Case File Sample

*** Settings ***Documentation Sample Test Case FileLibrary Selenium2LibraryResource ${RESOURCES}/common.robot

*** Variables ***${HOST} localhost:7272${LOGIN URL} http://${HOST}/${WELCOME URL} http://${HOST}/welcome.html${BROWSER} Firefox

*** Test Cases ***Valid Login Open Login Page Input Name tom Input Password secret Shuold Be Equal ...

*** Keywords ***Open Login Page [Documentation] Opens browser to login page Open Browser ${LOGIN URL} ${BROWSER} Title Should Be Login Page

Input Name [Arguments] ${name} Input Text username_field ${name}

Input Password [Arguments] ${password} Input Text password_field ${password}

Settings Table

Variables Table

Test Case Table

사용자 정의 Keyword

Page 72: Robot framework 을 이용한 기능 테스트 자동화

72

Settings Table

Settings Table 에서는 테스트 케이스 파일안에서 글로벌하게 적용되는 다양한 설정을 할 수 있다.- Settings Table 에서 설정 가능한 목록은 아래 표와 같다.

키워드 설명

Documentation Test Suite 에 대한 문서를 기록한다 .

Metadata name value 형식으로 메타데이터를 정의한다 .

Force Tags Test Suite 에 있는 모든 Test Case 들에 tag 를 지정한다 .

Suite Setup Test Suite 에 있는 Test Case 들이 실행되기 전에 실행할 키워드를 지정한다 .

Suite Teardown Test Suite 에 있는 모든 Test Case 들이 실행된 후에 실행할 키워드를 지정한다 .

Test Setup Test Suite 에 있는 각 Test Case 들이 실행되기 전에 실행된다 .

Test Teardown Test Suite 에 있는 각 Test Case 가 실행된 후에 실행된다 .

Test Timeout 테스트 케이스가 지정된 시간을 초과하면 , 테스트 케이스를 중지한다 .

Library 테스트에 사용할 Library 를 지정한다 . 절대경로 , 상대 경로, PYTHONPATH

Resource 읽어들일 리소스 파일의 경로를 지정한다 .

Variables 변수가 정의된 파일 경로를 지정한다 .

Page 73: Robot framework 을 이용한 기능 테스트 자동화

73

Settings Table

실습 : Settings 테이블에서 Suite Setup/Teardown, Test Setup/Teardown 을 설정하고 테스트를 실행해 본다.

목록- Suite Setup/Teardown 의 동작 구조를 이해하고 활용할 수 있다.- Test Setup/Teardown 의 동작 구조를 이해하고 활용할 수 있다.- Timeout 을 이해하고 활용할 수 있다.

Page 74: Robot framework 을 이용한 기능 테스트 자동화

74

Settings Table

*** Settings ***Suite Setup Setup Suite SettingSuite Teardown Teardown Suite SettingTest Setup Setup TestTest Teardown Teardown Test

*** Test CasesTest Something 1 Log To Console LOG:Test Something 1

Test Something 2 Log To Console LOG:Test Something 2

*** Keywords ***Setup Suite Setting Log To Console LOG:Setup Suite Setting

Teardown Suite Setting Log To Console LOG:Teardown Suite Setting

Setup Test Log To Console LOG:Setup Test

Teardown Test Log To Console LOG:Teardown Test

Page 75: Robot framework 을 이용한 기능 테스트 자동화

75

Settings Table 예제

*** Settings ***Documentation A Test Case for testing… Some more documentationMetadata vesion 1.0Force Tags indevSuite Setup Connect to DatabaseSuite Teardown Disconnect DatabaseTest Setup LoginTest Teardown LogoutTest Timeout 5Library Selenium2LibraryResource resource.txtVariables myvariable.py

Page 76: Robot framework 을 이용한 기능 테스트 자동화

76

For-Loop

반복하고 싶을 때 :FOR 루프를 사용할 수 있다.- 목록을 패러미터로 전달한다 .- FOR 루프 안에서 사용하는 키워드들은 들여쓰기를 해야 한다.- 들여쓰기를 사용할 때는 역슬래쉬(\)문자를 사용한다 .- 들여쓰기가 끝나는 지점이 FOR 루프가 끝나는 지점이다 .- 중첩 FOR 루프 (Netsted For Loop)은 지원하지 않는다. ( 중첩된 For Loop 을 수행할 별도 키워드를 만든다. )

예제 설명

*** Test Cases ***Example 1 :FOR ${animal} IN cat dog \ Log ${animal} \ Log 2nd keyword Log Outside loop

목록을 직접 지정한다 .루프를 두번 실행한다 . :FOR 루프 안의 문장을 들여쓴다 .

*** Test Cases ***Example 2 :FOR ${var} IN one two ... ${3} four ${last} \ Log ${var}

목록을 두 줄에 걸쳐 선언한다 .

*** Test Cases ***Example 3 :FOR ${element} IN @{ELEMENTS} \ Start Element ${element}

변수를 사용하여 목록을 지정한다 .

Page 77: Robot framework 을 이용한 기능 테스트 자동화

77

For-Loop

For-Loop 에서 여러 변수를 사용할 수 있다.

예제 설명

*** Test Cases ***Three loop variables :FOR ${index} ${english} ${finnish} IN ... 1 cat kissa ... 2 dog koira ... 3 horse hevonen \ Add to dictionary ${english} ${finnish} ${index} :FOR ${name} ${id} IN @{EMPLOYERS} \ Create ${name} ${id}

목록을 직접 지정한다 .루프를 두번 실행한다 . :FOR 루프 안의 문장을 들여쓴다 .

Page 78: Robot framework 을 이용한 기능 테스트 자동화

78

For-Loop

숫자를 이용해서 반복문을 제어하고 싶을 때에는 :FOR IN RANGE 를 사용한다 .

범위 지정 방법 설명 및 예제

범위의 최대값을 지정 최대값만 지정하는 경우의 범위 : 0~최대값-1 :FOR ${index} IN RANGE 10 # 0~9

범위의 최소값과 최대값을 지정

최대소값과 최대값을 지정한 경우의 범위 : 최소값~최대값-1 :FOR ${index} IN RANGE 1 11 #1~10

범위의 최소값, 최대값, 증분을 지정

최소값, 최대값, 증분을 지정한 경우의 범위 : 최소값~최대값-1실제 루프에서 실행되는 값은 : 최소값 + n*증분 :FOR ${index} IN RANGE 5 26 10 # 5,15,25

증분이 음수인 경우 :FOR ${index} IN RANGE 13 -13 -10 #13,3,-7

범위값에 연산식을 지정한 경우

범위에 연산식을 지정할 수도 있다. :FOR ${index} IN RANGE ${var}+1

Page 79: Robot framework 을 이용한 기능 테스트 자동화

79

For-Loop

:FOR INDEX IN ENUMERATE- 루프에서 INDEX 를 사용해야 할 때 사용한다 .

*** Test Case ***For-in-enumerate with two values per iteration :FOR ${index} ${english} ${finnish} IN ENUMERATE ... cat kissa ... dog koira ... horse hevonen \ Add to dictionary ${english} ${finnish} ${index}

Page 80: Robot framework 을 이용한 기능 테스트 자동화

80

For-Loop

:FOR IN ZIP- 연관된 목록을 FOR 루프에서 동시에 처리해야 할 때 사용한다 .

*** Variables ***@{NUMBERS} ${1} ${2} ${5}@{NAMES} one two five

*** Test Cases ***Iterate over two lists manually ${length}= Get Length ${NUMBERS} : FOR ${idx} IN RANGE ${length} \ Number Should Be Named ${NUMBERS}[${idx}] ${NAMES}[${idx}]

For-in-zip : FOR ${number} ${name} IN ZIP ${NUMBERS} ${NAMES} \ Number Should Be Named ${number} ${name}

Page 81: Robot framework 을 이용한 기능 테스트 자동화

81

For-Loop

For Loop 제어할 필요가 있을 때, Exit For Loop/Continue For Loop 를 사용한다 .

제어 설명 및 예제

Exit For LoopExit For Loop If

프로그램 언어의 break 문과 동일하다 .

*** Test Cases ***Exit Example ${text} = Set Variable ${EMPTY} :FOR ${var} IN one two \ Run Keyword If '${var}' == 'two' Exit For Loop \ ${text} = Set Variable ${text}${var} Should Be Equal ${text} one

Continue For LoopContinue For Loop If

프로그램 언어의 continue 문과 동일하다 .

*** Test Cases ***Continue Example ${text} = Set Variable ${EMPTY} :FOR ${var} IN one two three \ Continue For Loop If '${var}' == 'two' \ ${text} = Set Variable ${text}${var} Should Be Equal ${text} onethree

Page 82: Robot framework 을 이용한 기능 테스트 자동화

82

For-Loop

실습 : 광역자치단체별 인구를 인구가 많은 곳부터 가장 적은 곳까지 순서대로 출력한다.

목록- :FOR 루프를 이해하고 활용할 수 있다.- dictionary 변수를 선언하고 활용할 수 있다.

Page 83: Robot framework 을 이용한 기능 테스트 자동화

83

Test Suite Name

Test Suite 이름은 디렉토리 이름과 Test Suite 이름으로 구성된다.- 파일의 Test Suite 이름

- 확장자는 제외한다.- 밑줄(_, underscore)이 공백으로 대체된다.

- 디렉토리의 테스트 슈트 이름- 밑줄이 공백으로 대체된다.

- 실행 순서 지정- 파일이나 디렉토리에 ‘숫자__’ (밑줄 두개) 형식으로 기술한다.

- Suit Name 지정하기- robot -s “Some Tests” .

구분 예제 Test Suite 이름

파일 some_tests.robot Some Tests

01__some_tests.robot Some Tests

디렉토리 My_test_directory My test directory

02__My_test_directory My test directory

경로 My_test_directory/some_tests.robot My test directory.Some Tests

02__My_test_directory/01__some_tests.robot My test directory.Some Tests

Page 84: Robot framework 을 이용한 기능 테스트 자동화

84

테스트 케이스 실행 순서

실행 순서- 같은 테스트 케이스 파일에 있는 테스트들은 파일에 정의된 순서대로 실행된다.- 상위 레벨에 있는 테스트 Suite 들은 Alphabet 순서대로 실행된다.- Command Line 에서 여러 디렉토리나 파일을 여러 개 지정한 경우 지정된 순서대로 실행된다.

순서 지정하기- 같은 디렉토리내에 있는 테스트 슈트들의 순서를 정하고 싶으면 ‘nn__’ 형식의 접두어(prefix)를 사용한다.

- ex) 01__first.robot, 02_second.robot

Page 85: Robot framework 을 이용한 기능 테스트 자동화

85

Test Case Styles

Test Case 를 아래 세 가지 중 하나의 스타일로 정의할 수 있다.- Keyword-Driven Style- Data-Driven Style- Behavior-Driven Style

Page 86: Robot framework 을 이용한 기능 테스트 자동화

86

Test Case Styles

*** Test Cases ***Valid Login Open Login Page # 시스템을 초기상태로 만든다. Input Username demo # 시스템을 초기상태로 만든다. Input Password mode # 시스템을 초기상태로 만든다. Submit Credentials # 시스템에 Action 을 수행한다 . Welcome Page Should Be Open # 시스템의 상태가 예상과 맞는지 검증한다 .

Keyword Driven Style : 키워들을 순차적으로 부르는 워크프로우 형식으로 구성된다.- 시스템을 특정한 초기 상태로 만들고, 시스템에 뭔가를 수행한 후에, 시스템이 상태가 예상과 맞는지 검증한다.

Page 87: Robot framework 을 이용한 기능 테스트 자동화

87

*** Settings ***Test Template Login with invalid credentials should fail

*** Test Cases *** USERNAME PASSWORDInvalid User Name invalid ${VALID PASSWORD}Invalid Password ${VALID USER} invalidInvalid User Name and Password invalid invalidEmpty User Name ${EMPTY} ${VALID PASSWORD}Empty Password ${VALID USER} ${EMPTY}Empty User Name and Password ${EMPTY} ${EMPTY}

*** Test Cases ***Invalid Password [Template] Login with invalid credentials should fail invalid ${VALID PASSWORD} ${VALID USER} invalid invalid whatever ${EMPTY} ${VALID PASSWORD} ${VALID USER} ${EMPTY} ${EMPTY} ${EMPTY}

Data-Driven Style : 워크플로우 형식이 아니라, 키워드 하나로 테스트 케이스를 정의한다. 워크플로우는 지정된 키워드에 정의된다.

- Settings Table 에서 Test Template 으로 실행할 Keyword 를 정의한다.- Test Cases 에서는 Arguments 들만을 정의한다.- Test Cases 뒤에 패러미터의 이름을 적어주면, 테스트를 이해하는데 도움이 된다.

Test Case Styles

Page 88: Robot framework 을 이용한 기능 테스트 자동화

88

Test Case Styles

Test Case 에서 [Template] 를 이용한 테스트 케이스

*** Test Cases ***Test Login [Template] Login invalid valid password invalid user invalid password

*** Keywords ***Login [Arguments] ${userid} ${password} Log To Console try to login with ${userid}

Page 89: Robot framework 을 이용한 기능 테스트 자동화

89

*** Test Cases ***Add two numbers Given I have Calculator open When I add 2 and 40 Then result should be 42

Add negative numbers Given I have Calculator open When I add 1 and -2 Then result should be -1

Behavior-Driven Style: 요구사항을 프로젝트의 모든 이해관계자들이 이해할 수 있는 테스트케이스로 작성할 수도 있다.실행가능한 요구사항은 인수테스트 주도개발(Acceptance Test Driven Development)의 핵심 역할을 한다.이런 테스트 케이스를 BDD(Behavior Driven Development) 형식으로 지정할 수 있다.

- Given: 시스템의 초기 상태를 지정할 때 사용한다.- When: 시스템에 수행하는 Action 을 지정할 때 사용한다.- Then: 예상되는 결과를 검증할 때 사용한다.- And, But : 하나 이상의 행동을 기술할 때 사용한다.- Given, When, Then, And, But 은 키워드를 매칭할 때 무시된다.

*** Keywords ***I have ${program} open Start Program ${program}

I add ${number 1} and ${number 2} Input Number ${number 1} Push Button + Input Number ${number 2} Push Button =

Result should be ${expected} ${result} = Get Result Should Be Equal ${result} ${expected}

Test Case Styles

Page 90: Robot framework 을 이용한 기능 테스트 자동화

90

*** Keywords ***Select ${animal} from list Open Page Pet Selection Select Item From List animal_list ${animal}

Embedded Argument

*** Keywords ***Select cat from list Open Page Pet Selection Select Item From List animal_list cat

Select dog from list Open Page Pet Selection Select Item From List animal_list dog

*** Keywords ***Select from list [Arguments] ${animal} Open Page Pet Selection Select Item From List animal_list ${animal}

<Arguments 방식>

<Keyword Embedded Arguments 방식>

Test Case Styles

Page 91: Robot framework 을 이용한 기능 테스트 자동화

91

Keyword Argument

Embedding Arguments- 지정방식 : 키워드에 ${argument} 를 직접 정의한다.- Embedded Argument 의 제약

- [Arguments] 를 사용할 수 없다.- 선택적인 Argument 를 사용할 수 없다.- 가변 길이 Argument 를 사용할 수 없다.

- 패턴 사용하기- ${argument:pattern}- pattern 은 Python 의 Regular Expression

*** Keywords ***

Select ${animal} from List

Log To Console ${animal}

<Embedded Argument 정의하기>

*** Test Cases ***

Test

Select Team Los Angeles Lakers

*** Keywords ***

Select Team ${city} ${team}

Log To Console ${team} in ${city}

Page 92: Robot framework 을 이용한 기능 테스트 자동화

92

Keyword Argument

변수 설명

. 개행문자를 제외한 모든 문자와 일치한다 . ex) a.b 와 일치하는 문자열 : aab, abb, acb, ...

^ 문자열의 처음. 라인의 처음과 일치한다 . ex) ^ab* 와 일치하는 문자열 : ab 로 시작하는 문자열 혹은 줄

$ 문자열의 맨 마지막, 라인의 마지막과 일치한다 . ex) .*ab$ 와 일치하는 문자열 : ab 로 끝나는 문자열 혹은 줄

* 바로 앞의 패턴과 0번 이상 일치하다 . ex) ab* 와 일치하는 문자열 : a, ab, abb, abbb, ….

+ 바로 앞의 패턴과 1번 이상 일치한다 . ex) ab+ 와 일치하는 문자열 : ab, abb, abbb, abbbb….

? 바로 앞의 패턴과 0번 혹은 1번 일치한다 . ex) ab? 과 일치하는 문자열 : a, ab

\

[...] [ ] 안에 있는 문자 하나와 같으면 일치 : ex) [abc] 와 일치하는 문자열 : a, b, c

[abcs-z] 와 일치하는 문자열 : a,b,c,s,t,u,v,w,x,y,z

| A|B : A, B 둘 중 하나. A,B 는 정규표현식 .

(expression) 괄호안의 정규표현식 (expression)과 일치하는 문자를 추출한다 . 일치하는 문자열을 \number 와 같이 사용할 수 있다.

(?iLmsux) 이 그룹은 empty string 과 일치하고 , 정규표현식 전체와 일치시킬 때 option 을 지정한다 .

i: Ignore case, L: locale dependent, m:multiline, s:dot 이 모두 일치, u:유니코드 dependent, x: verbose

더 자세한 내용은 https://docs.python.org/2/library/re.html 참조

Embedded Argument 에 사용할 수 있는 정규 표현식

Page 93: Robot framework 을 이용한 기능 테스트 자동화

93

Keyword Argument

Embedded Argument 에서 사용할 수 있는 정규 표현식

변수 설명

\number 개행문자를 제외한 모든 문자와 일치한다 . ex) a.b 와 일치하는 문자열 : aab, abb, acb, ...

\A 문자열의 처음과 일치한다 .

\b 문자열의 맨 마지막, 라인의 마지막과 일치한다 . ex) .*ab$ 와 일치하는 문자열 : ab 로 끝나는 문자열 혹은 줄

\B 바로 앞의 패턴과 0번 이상 일치하다 . ex) ab* 와 일치하는 문자열 : a, ab, abb, abbb, ….

\d 숫자와 일치한다 .

\D 수자가 아닌 문자와 일치한다 . [^0-9] 와 같다.

\s 공백 문자와 일치한다 . [ \t\n\r\f\v]

\S 공백이 아닌 문자와 일치한다 .

\w 알파벳과 숫자, 밑줄(underscore)와 일치한다 . [a-zA-Z0-9_]

\W 알파벳, 숫자, 밑줄이 아닌 문자와 일치한다. [^a-zA-Z0-9_]

\z 문자열의 끝과 일치한다 .

더 자세한 내용은 https://docs.python.org/2/library/re.html 참조

Page 94: Robot framework 을 이용한 기능 테스트 자동화

94

Keyword Argument

*** Test Cases ***Example I execute "ls" I execute "ls" with "-lh" I type 1 + 2 I type 53 - 11 Today is 2011-06-27

*** Keywords ***I execute "${cmd:[^"]+}" Run Process ${cmd} shell=True

I execute "${cmd}" with "${opts}" Run Process ${cmd} ${opts} shell=True

I type ${a:\d+} ${operator:[+-]} ${b:\d+} Calculate ${a} ${operator} ${b}

Today is ${date:\d{4\}-\d{2\}-\d{2\}} Log ${date}

Page 95: Robot framework 을 이용한 기능 테스트 자동화

95

Keyword Argument

*** Test Cases ***Example I execute "ls" I execute "ls" with "-lh" I type 1 + 2 I type 53 - 11 Today is 2011-06-27

*** Keywords ***I execute "${cmd:[^"]+}" Run Process ${cmd} shell=True

I execute "${cmd}" with "${opts}" Run Process ${cmd} ${opts} shell=True

I type ${a:\d+} ${operator:[+-]} ${b:\d+} Calculate ${a} ${operator} ${b}

Today is ${date:\d{4\}-\d{2\}-\d{2\}} Log ${date}

Page 96: Robot framework 을 이용한 기능 테스트 자동화

96

Resource File

*** Settings ***Documentation An example resource fileLibrary Selenium2LibraryResource ${RESOURCES}/common.robot

*** Variables ***${HOST} localhost:7272${LOGIN URL} http://${HOST}/${WELCOME URL} http://${HOST}/welcome.html${BROWSER} Firefox

*** Keywords ***Open Login Page [Documentation] Opens browser to login page Open Browser ${LOGIN URL} ${BROWSER} Title Should Be Login Page

Input Name [Arguments] ${name} Input Text username_field ${name}

Input Password [Arguments] ${password} Input Text password_field ${password}

여러 Test Suite 에서 공통적으로 사용되는 변수 혹은 키워드를 정의한다.

- Resource 가 필요한 Test Case 파일에서 불러서 사용한다.

- Settings, Variables, Keyword 를 정의할 수 있다.- Test Cases 는 정의할 수 없다.

Page 97: Robot framework 을 이용한 기능 테스트 자동화

97

Variable File

여러 Test Suite 에서 공통적으로 사용되는 변수들을 모아놓고, 각 Test Case File 에서 불러서 사용한다.변수 파일을 불러올 때, Python 모듈로 불러들인다(import).변수 이름은 대소문자를 구분하지 않지만, 글로벌 변수인 경우에는 대문자만 사용할 것을 권장한다.

VARIABLE = "An example string"ANOTHER_VARIABLE = "This is pretty easy!"INTEGER = 42STRINGS = ["one", "two", "kolme", "four"]NUMBERS = [1, INTEGER, 3.14]MAPPING = {"one": 1, "two": 2, "three": 3}

Page 98: Robot framework 을 이용한 기능 테스트 자동화

98

*** Settings ***Test Timeout 2 minutes

*** Test Cases ***Default Timeout [Documentation] Timeout from the Setting table is used Some Keyword argument

Override [Documentation] Override default, use 10 seconds timeout [Timeout] 10 Some Keyword argument

Custom Message [Documentation] Override default and use custom message [Timeout] 1min 10s This is my custom error Some Keyword argument

Variables [Documentation] It is possible to use variables too [Timeout] ${TIMEOUT} Some Keyword argument

No Timeout [Documentation] Empty timeout means no timeout even when Test Timeout has been used [Timeout] Some Keyword argument

No Timeout 2 [Documentation] Disabling timeout with NONE works too and is more explicit. [Timeout] NONE Some Keyword argument

Timeout

테스트 케이스/키워드는 지정된 시간안에 실행되지 못하면 실패한 것으로 간주되고실행이 중지된다.

Page 99: Robot framework 을 이용한 기능 테스트 자동화

99

Web Application Test

1. 도구 설치하기

2. Locators

3. 테스트 케이스 작성

Page 100: Robot framework 을 이용한 기능 테스트 자동화

100

도구 설치하기

구분 용도

RIDE RobotFramework 테스트를 편집하기 위한 IDERIDE 는 wxPython 에서 동작하기 때문에, wxPython 을 설치해야 한다.

Selenium2Library RobotFramework 에서 Selenium 을 사용하기 위해 필요한 Library

Selenium Selenium 라이브러리 . Selenium2Library 가 설치될 때 같이 설치되기 때문에 별도 설치 필요없음

웹 브라우저 드라이버

Firefox Driver : Selenium2Library 에 기본적으로 내장되어 있기 때문에 별도 설치 필요 없음Chrome Driver : 별도 설치 필요함IE Driver : 별도 설치 필요함

Selenium IDE Record & Playback 을 지원하는 Firefox Plugin 으로,

웹 브라우저 웹 Applicaion 을 테스트할 때 사용할 웹 브라우저 (Firefox, Chrome 등 설치)

Page 101: Robot framework 을 이용한 기능 테스트 자동화

101

RIDE 설치하기

설치 하기1. Command 창에서 “pip install robotframework” 을 실행한다.

설치 확인1. Command 창에서 ride.py 명령을 실행한다.

<robotFramework-ride 설치 화면>

<ride.py 정상 설치시 실행 화면>

Page 102: Robot framework 을 이용한 기능 테스트 자동화

102

wxPython 설치하기

설치 하기1. http://sourceforge.net/projects/wxpython/files/wxPython/2.8.12.1 접속한다.2. wxPython2.8-win64-unicode-2.8.12.1…...exe 를 다운받는다 .3. 다운받은 파일을 설치한다.

Page 103: Robot framework 을 이용한 기능 테스트 자동화

103

wxPython 설치하기

설치 확인1. Command 창에서 ride.py 명령을 실행한다.2. RIDE 화면이 보이면 wxPython 설치 완료

Page 104: Robot framework 을 이용한 기능 테스트 자동화

104

Selenium2Library

설치 하기1. Command 창에서 pip install robotframework-selenium2library 실행

설치확인하기 1. Command 창에서 Python 을 실행한다.2. Python 창에서 “from selenium import webdriver” 를 실행한다.3. 오류가 뜨지 않으면 설치 완료

Page 105: Robot framework 을 이용한 기능 테스트 자동화

105

Selenium 설치 확인

Selenium 설치 확인하기1. Firefox ( Firefox 46.0.1 버전) 를 다운받아 설치한다.

a. 최신 버전인 Firefox 47.0 버전은 현재 지원되지 않음2. Python 창에서 아래 명령어를 실행한다.

a. from selenium import webdriverb. webdriver.Firefox()

3. Firefox 브라우저가 화면에 나타나면, Selenium 설치 완료

Page 106: Robot framework 을 이용한 기능 테스트 자동화

106

ChromeDriver 설치

ChromeDriver 설치1. Chrome 브라우저를 다운받아 설치한다. 2. https://sites.google.com/a/chromium.org/chromedriver/downloads 에 접속한다.3. 최신 ChromeDriver 를 다운받는다 .4. 다운받은 파일의 압축을 풀고 디렉토리(chromedriver_win32)를 C: 아래로 복사한다.5. 시스템 속성에서 Path 환경변수에 “C:\chromedriver_win32” 경로를 추가한다.

ChromeDriver 설치 및 경로 설정확인하기1. Command 창을 새로 실행한다.2. Command 창에서 chromedriver 명령어를 입력한다.3. Ctrl+C 를 입력해서 chromedriver 를 중지한다.

Chrome/Selenium 연동 확인하기1. Google Chrome 브라우저를 다운받아 설치한다.2. Python 창에서 아래 명령어를 실행한다.

a. from selenium import webdriverb. webdriver.Chrome()

3. Chrome 브라우저가 화면에 나타나면, ChromeDriver 과 Selenium 연동 완료

Page 107: Robot framework 을 이용한 기능 테스트 자동화

107

IE Driver 설치

IE Driver 설치1. http://selenium-release.storage.googleapis.com/index.html 에 접속2. 최신 버전을 다운받는다 . ( IEDriverServer_x64_2.53.1.zip )3. 다운받은 파일의 압축을 푼 디렉토리(IEDriverServer_x64_2.53.1)를 C: 아래로 복사한다.4. 시스템 속성의 Path 환경 변수에 “C:\IEDriverServer_x64_2.53.1” 를 추가한다.

IE Driver 설치 및 Path 확인하기1. Command 창에서 IEDriverServer_x64_2.53.1 를 입력한다.2. 아래 화면처럼 동작하면 IE Driver 설치 완료3. Ctrl+C 를 입력해서 IEDriverServer 를 중지한다.

IE Selenium 연동 확인하기1. Python 창에서 아래 명령어를 실행한다.

a. from selenium import webdriverb. webdriver.Ie()

2. IE 브라우저가 화면에 나타나면, IE와 Selenium 연동 완료

Page 108: Robot framework 을 이용한 기능 테스트 자동화

108

브라우저 열기

실습 : Selenium2Library 키워드를 이용하여 로그인 테스트를 자동화하는 테스트 케이스를 작성한다.

목적- Selenium2Library 의 키워드를 이용하여 자동화된 테스트케이스를 작성할 수 있다.

Page 109: Robot framework 을 이용한 기능 테스트 자동화

109

브라우저 열기

*** Settings ***Library Selenium2Library

*** Test Cases ***Add Open Browser http://www.site.you.want Chrome

Page 110: Robot framework 을 이용한 기능 테스트 자동화

110

실습-계산기 테스트

실습 : 계산기 Web Application 이 정상 동작하는지 테스트한다 .

목록- 다양한 Locator 지정 방법을 이해하고 활용할 수 있다.- Web Element 의 Locator 를 파악할 수 있다.

Page 111: Robot framework 을 이용한 기능 테스트 자동화

111

브라우저 열기

*** Settings ***Library Selenium2Library

*** Test Cases ***Add Open Browser file:///…….../robot/Calculator/calculator.html Chrome Click Element xpath=//button[text()='1'] Click Element xpath=//button[text()='+'] Click Element xpath=//button[text()='2'] Click Element xpath=//button[text()='='] Get Text xpath=//button[text()='2']

Page 112: Robot framework 을 이용한 기능 테스트 자동화

112

Locators

Selenium2Library 의 키워드들은 페이지에 있는 Element 를 찾기 위한 패러미터가 필요하다.- 이 패러미터를 Locator ( webelement locator ) 라고 한다.- Locator 는 Element 를 찾는 방법을 지정한다. - Element 를 찾는 전략에 따라 지정 방법이 다르다.

Page 113: Robot framework 을 이용한 기능 테스트 자동화

113

WebElement Locators

Strategy Example Description

identifier Click Element | identifier=my_element Matches by @id or @name attribute

id Click Element | id=my_element Matches by @id attribute

name Click Element | name=my_element Matches by @name attribute

xpath Click Element | xpath=//div[@id='my_element'] Matches with arbitrary XPath expression

dom Click Element | dom=document.images[56] Matches with arbitrary DOM express

link Click Element | link=My Link Matches anchor elements by their link text

partial link Click Element | partial link=y Lin Matches anchor elements by their partial link text

css Click Element | css=div.my_class Matches by CSS selector

jquery Click Element | jquery=div.my_class Matches by jQuery/sizzle selector

sizzle Click Element | sizzle=div.my_class Matches by jQuery/sizzle selector

tag Click Element | tag=div Matches by HTML tag name

default* Click Link | default=page?a=b Matches key attributes with value after first '='

Selenium 에서 Web Element 를 지정하는 문자열을 Locator 라고 한다. ( | 는 탭구분자 )

Page 114: Robot framework 을 이용한 기능 테스트 자동화

114

XPath

XPath 를 이용하여 Web Element 를 지정할 수 있다.

XPath 설명

nodename

node 의 이름이 nodename 인 모든 노드를 선택한다.

/ root node 를 선택한다.

// 현재노드에서 문서에 있는 노드들을 선택한다.

. 현재 노드를 선택한다.

.. 현재 노드의 패부모 노드를 선택한다.

@ 속성을 선택한다.

* 모든 노드

@* 속성을 가진 모든 노드

node() 모든 노드

Page 115: Robot framework 을 이용한 기능 테스트 자동화

115

XPath

XPath 예제

예제 설명

bookstore 이름이 bookstore 인 node 를 모두 선택한다.

/bookstore /bookstore 노드를 선택한다.

bookstore/book book child 노드를 가진 bookstore 노드를 선택한다.

//book 모든 book 노드를 선택한다.

bookstore//book bookstore 노드 하위의 모든 book 노드를 선택한다.

//@lang 모든 노드의 lang 속성을 선택한다.

Page 116: Robot framework 을 이용한 기능 테스트 자동화

116

XPath

XPath Predicate : 여러 노드들 중에서 특정 노드나, 특정 값을 가진 노드를 선택할 때 Predicate 을 사용한다.

- predicate 은 항상 [ ] 안에 명시한다.

예제 설명

/bookstore/book[1] /bookstore 노드의 child 인 book 노드중 첫번째 노드 ( IE 는 0번 부터, W3C 표준은 1번부터 )

/bookstore/book[last()] /bookstore 노드의 child 인 book 노드중 마지막 노드

/bookstore/book[last()-1] /bookstore 노드의 child 인 book 노드중 마지막 이전 노드

/bookstore/book[position()<3] /bookstore 노드의 child 인 book 노드중 첫번째 두 노드

bookstore//book bookstore 노드 하위의 모든 book 노드를 선택한다.

//title[@lang] lang 속성이 있는 title 노드

//title[@lang=’en’] lang 속성의 값이 ‘en’ 인 title 노드

/bookstore/book[price<3] /bookstore 의 child book 노드 중, book/price 노드의 값이 3보다 작은 노드

/bookstore/book[price<3]/title /bookstore 의 child book 노드 중, book/price 노드의 값이 3보다 작은 노드의 title 노드

* 모든 노드를 선택

@* 속성을 가진 모든 노드

node() 모든 노드

//book[text()=’A’] book 노드의 텍스트가 ‘A’ 인 모든 book 노드

Page 117: Robot framework 을 이용한 기능 테스트 자동화

117

예제 설명

.intro class="intro" 인 모든 element

#firstname id="firstname" 인 모든 element

* 모든 element

p 모든 <p> element

div, p 모든 <div>,<p> element

div p <div> 안에 있는 모든 <p> element

div > p 부모가 <div> 인 모든 <p>

div + p <dive> 바로 다음에 정의된 <p>

p ~ ul 앞에 <p> 가 있는 모든 <ul>

[target] target 속성이 있는 모든 element

[target=_blank] target="_blank"인 모든 element

[title~=flower] title 속성값에 "flower" 를 포함하는 모든 element

[lang|=en] lang 속성이 en 으로 시작하는 element

CSS Selector

css=값 형식으로 element 를 지정한다. ( http://www.w3schools.com/cssref/css_selectors.asp 참조 )

http://www.nextree.co.kr/p8468/

Page 118: Robot framework 을 이용한 기능 테스트 자동화

118

CSS Selector

css=값 형식으로 element 를 지정한다. ( http://www.w3schools.com/cssref/css_selectors.asp 참조 )

예제

input:checked checked <input> element

input:disabled disabled <input> element

input:enabled enabled <input> element

input:focus focus 를 가진 input element

input:in-range 지정된 range 안에 있는 input element

input:invalid 유효하지 않은 value 를 가진 입력 element

input:optional required 속성이 없는 input element

input:out-of-range 지정된 range 밖에 있는 input element

input:read-only readonly 속성의 명시된 input element

input:read-write readonly 속성이 명시되지 않은 input element

input:required required 속성을 가진 input element

input:valid 유효한 값을 가진 input element

Page 119: Robot framework 을 이용한 기능 테스트 자동화

119

예제

a[href^="https"] href 속성이 https 로 시작하는 <a> element

a[href$=".pdf"] href 속성이 .pdf 로 끝나는 <a> element

a[href*="w3schools"]

href 속성에 w3cschools 로 포함한 <a> element

a:active active link

a:hover Selects links on mouse over

a:link Selects all unvisited links

a:visited Selects all visited links

CSS Selector

css=값 형식으로 element 를 지정한다. ( http://www.w3schools.com/cssref/css_selectors.asp 참조 )

Page 120: Robot framework 을 이용한 기능 테스트 자동화

120

CSS Selector

css=값 형식으로 element 를 지정한다. ( http://www.w3schools.com/cssref/css_selectors.asp 참조 )

예제 설명

p:empty text 노드도 없고 자식 노드도 없는 <p> element

p:first-childp:last-childp:nth-child(2)p:nth-last-child(2)

<p> 가 첫번째 child 인 <p> 노드들<p> 가 마지막 child 인 <p> 노드들<p> 가 두번째 child 인 <p> 노드들<p> 가 거꾸로 두번째 child 인 <p> 노드들

p::first-letter <p> 의 첫번째 문자

p::first-line <p> 의 첫번째 줄

p:first-of-typep:last-of-typep:nth-of-type(2)p:nth-last-of-type(2)

<p> 의 부모의 첫번째 요고사 <p>인 모든 <p><p> 의 부모의 마지막 요소가 <p>인 모든 <p><p> 의 부모의 두번째 요소가 <p>인 모든 <p><p> 의 부모의 끝에서 두번째 요소가 <p>인 모든 <p>

p:lang(it) lang 속성이 “it” 인 <p>

:not(p) <p> 가 아닌 모든 element 들

p:only-of-type <p> 만을 가진 부모의 모든 <p> (<p> 가 여러개라도 true )

p:only-child child 노드가 <p> 딱 하나밖에 없는 모든 <p>

:root Document 의 root element

::selection 사용자가 선택한 element 들

Page 121: Robot framework 을 이용한 기능 테스트 자동화

121

jQuery Selector

jQuery=xxx 와 같이 사용함

셀렉터 문법 문법 설명

* 문서의 모든 element

div 모든 div element

div a div 안에 있는 a element

div>a div 의 자식 노드 중 a element

div+a div 바로 다음에 나오는 a element

div~ul div 다음에 나오는 모든 ul element

div:has(a) 자손중에 a 태그가 하나 이상인 div

div.classname class 가 classname 이 모든 div ( .classname = *.classname 과 동일 )

div#idname 아이디가 idname 인 div

div[lang=’en’] lang 속성 값이 ‘en’ 인 div

div[lang^=’en’] lang 속성 값이 ‘en’ 으로 시작하는 div

div[lang$=’en’] lang 속성 값이 ‘en’ 으로 끝나는 div

div[lang*=’en’] lang 속성 값에 ‘en’ 을 포함하는 div

div[lang] lang 속성이 있는 div

Page 122: Robot framework 을 이용한 기능 테스트 자동화

122

jQuery Selector

Selenium 에서 Web Element 를 지정하는 문자열을 Locator 라고 한다. ( | 는 탭문자임 )

셀렉터 문법 문법 설명

div:first 모든 div 엘리먼트중 맨 처음 div 엘리먼트

div:last 모든 div 엘리먼트중 맨 마지막 div 엘리먼트

div:first-child div 의 첫번째 자식 엘리먼트

div:last-child div 의 첫번째 마지막 엘리먼트

div:only-child 형제가 없는 div 엘리먼트

div:nth-child(n) div 엘리먼트의 부모 엘리먼트를 기준으로 두번째 div

div:nth-child(even or

odd)

div 엘리먼트의 부모 엘리먼트를 기준으로 짝수(even)/홀수(odd)번째 div

div:even or div:odd 전체 div 노드 중에서 짝수(even) 혹은 홀수(odd)번째 엘리먼트

div:eq(n) 선택된 div 중에서 n번째 div

div:gt(n) 선택된 div 중에서 n 보다 큰 div

div:lt(n) 선택된 div 중에서 n 보다 작은 div

Page 123: Robot framework 을 이용한 기능 테스트 자동화

123

jQuery Selector

셀렉터 문법 문법 설명

:animated 현재 애니매이션이 적용되고 있는 엘리먼트 선택

:button 모든 버튼 선택

:checkbox 체크 박스 엘리먼트만 선택 (input[type=checkbox])

:checked 선택된 체크 박스나 라디오 버튼만을 선택

:contains(foo) 텍스트 foo를 포함하는 엘리먼트만 선택

:disabled 인터페이스에서 비활성화 상태인 모든 폼 엘리먼트를 선택

:enabled 인터페이스에서 활성화 상태인 모든 폼 엘리먼트를 선택

:file 모든 파일 엘리먼트를 선택 (input[type=file])

:header 헤더 엘리먼트 선택 (<h1>~<h6>)

:hidden 감춰진 엘리먼트만 선택

:image 폼 이미지만 선택 (input[type=image])

:input 폼 엘리먼트만 선택 (input, select, textarea, button)

:not(filter) 필터의 값을 반대로 변경함.

:parent 빈 엘리먼트를 제외하고 , 텍스트도 포함해서 자식 엘리먼트를 가지는 엘리먼트

:password 패스워드 엘리먼트 선택 (input[type=password])

:radio 라디오 엘리먼트 선택 (input[type=radio])

:reset 리셋 버튼을 선택 (input[type=reset] or button[type=reset])

:selected 선택된 엘리먼트만 선택

:submit 전송 버튼을 선택 (input[type=submit] or button[type=submit])

:text 텍스트 엘리먼트만 선택 (input[type=text])

:visible 보이는 엘리먼트만 선택

Page 124: Robot framework 을 이용한 기능 테스트 자동화

124

Selenium IDE 설치

Selenium IDE 설치하기1. Firefox 를 실행한다.2. https://addons.mozilla.org/en-US/firefox/addon/selenium-ide/ 에 접속한다.3. “Add to Firefox” 버튼을 클릭해서 Selenium IDE 를 설치하고 Firefox 를 재시작한다 .

1.

Page 125: Robot framework 을 이용한 기능 테스트 자동화

125

Selenium IDE 설치

Selenium IDE 설치 확인1. Firefox 주소창에 “about:addons” 를 입력한다.2. Extensions 를 클릭하고, “Selenium IDE” 가 표시되는지 확인한다.

Page 126: Robot framework 을 이용한 기능 테스트 자동화

126

Selenium IDE

Record & Playback 지원- Firefox 브라우저에서만 실행- Web Element 의 Locator 를 파악하는데 유용 기록녹화 /중지 버튼

- 녹화모드 : 브라우저의 Action 을 모두 기록

Target Element 찾기

Page 127: Robot framework 을 이용한 기능 테스트 자동화

127

Selenium IDE

파일 > Export Test Case As 에서 다양한 테스트 코드를 생성할 수 있음

Page 128: Robot framework 을 이용한 기능 테스트 자동화

128

Local 환경에서 테스트하기

Web Application (혹은) 페이지를 내 로컬 환경에서 테스트하고 싶은 경우- 테스트하고 싶은 페이지를 로컬에 html 문서로 다운받아서 테스트할 수 있다.- wget version 1.18 이상을 사용한다.- wget windows 1.18 버전 다운로드하기

- 1. Google 에서 “wget windows 1.18” 을 검색한다.- 2. https://eternallybored.org/misc/wget/ 로 이동한다.- 3. 원하는 버전(32비트, 64비트)을 wget.exe 를 다운받는다 .

- wget 파일 복사하기- 32비트를 다운받은 경우

- c:\program files(x86)\Wget 디렉토리를 만들고 복사한다.- 64비트를 다운받은 경우

- c:\program files\Wget 디렉토리를 만들고 복사한다.- 경로설정하기

- PATH 환경변수에 Wget 을 복사한 디렉토리 경로를 추가한다.- 확인하기

- Command 창을 새로 실행한 후에, wget 을 입력해서 실행되는지 테스트한다 .

Page 129: Robot framework 을 이용한 기능 테스트 자동화

129

Local 환경에서 테스트하기

Command 창의 코드 페이지 확인하기- Command 창의 Caption Bar (제목이 있는 창)에서 오른쪽 버튼을 누르고, 속성을 선택한다.- “명렬 프롬프트” 속성의 현재 코드 페이지를 확인한다.

Page 130: Robot framework 을 이용한 기능 테스트 자동화

130

Local 환경에서 테스트하기

Command 창의 코드 페이지를 바꾸기- Command 창에서 아래 명령을 실행해서, 코드 페이지를 UTF-8로 바꾼다.- C:\User\Jaehoon> CHCP 65001

Page 131: Robot framework 을 이용한 기능 테스트 자동화

131

Local 환경에서 테스트하기

브라우저에서 테스트하고 싶은 웹 페이지로 이동합니다 .- 브라우저 주소창에서 URL 을 복사합니다 .- Command 창에서 아래 명령어를 입력합니다 .

- wget -k -r -np --local-encoding=utf-8 --restrict-file-names=windows “URL”- 실행 결과 확인

- URL 의 도메인 디렉토리가 생성되었는지 확인합니다 .- URL 의 도메인 디렉토리 아래 파일이 생성되었는지 확인합니다 .

Page 132: Robot framework 을 이용한 기능 테스트 자동화

132

다음 계산기 테스트 자동화

1. 다음(www.daum.net)에 접속한다.2. 검색어창에 “계산기"를 입력한다.3. URL 을 복사한다.4. wget 을 실행해서 계산기 페이지를 로컬에 다운받는다 .5. 다운된 파일 이름을 Calculator.html 로 변경한다.

Page 133: Robot framework 을 이용한 기능 테스트 자동화

133

다음 계산기 테스트 자동화

Legacy Application Test : 이미 완성된 기능들에 대한 테스트를 자동화한다 .

실습 : 더하기 계산이 정상적으로 동작하는지 확인한다.생각해야 할 것들

- 더하기 계산이 정상 동작한다는 것을 증명하려면 얼마나 많이 테스트해야 하는가?a. 한자리수 더하기만 하더라도 10x10 = 100 개 조합이 만들어진다 . b. 두자리수는 100 x 100 = 10000개 조합이 가능하다.c. 이 모든 조합을 테스트해야 하는가?

- 모든 조합을 테스트하는 것을 불가능하다 .- SW 를 테스트하는 이유는?

Page 134: Robot framework 을 이용한 기능 테스트 자동화

134

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html

*** Test Cases ***# 1 + 2 = 3Add Numbers with Single Digit Click Element //button[text()='1'] Click Element //button[text()='+'] Click Element //button[text()='2'] Click Element //button[text()='='] ${result}= Get Value jQuery=#calculatorColl .box_result .num_result .tf_comm Should Be Equal As Strings ${result} 3

한자리 덧셈이 정상 동작하는지 확인한다.

Page 135: Robot framework 을 이용한 기능 테스트 자동화

135

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html

*** Test Cases ***# 1 + 2 = 3Add Numbers with Single Digits Add Single Digit Numbers 1 2 Add Single Digit Numbers 3 4 Add Single Digit Numbers 5 6

*** Keywords ***Add Signgle Digit Numbers [Arguments] ${augend} ${addend} Click Element //button[text()='${augend}'] Click Element //button[text()='+'] Click Element //button[text()='${addend}'] Click Element //button[text()='='] ${result}= Get Value jQuery=#calculatorColl .box_result .num_result .tf_comm Should Be Equal As Strings ${result} 3

한자리 덧셈이 정상 동작하는지 확인한다.- 여러 번 반복되는 경우, 사용자 정의 키워드를 만들어서 추상화 레벨을 높인다.

Page 136: Robot framework 을 이용한 기능 테스트 자동화

136

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html ChromeTest Template Add Single Digit Numbers

*** Test Cases ***Single Digit Numbers(1+2) 1 2Single Digit Numbers(3+4) 3 4Single Digit Numbers(5+6) 5 6

*** Keywords ***Add Signgle Digit Numbers [Arguments] ${augend} ${addend} Click Element //button[text()='${augend}'] Click Element //button[text()='+'] Click Element //button[text()='${addend}'] Click Element //button[text()='='] ${result}= Get Value jQuery=#calculatorColl .box_result .num_result .tf_comm Should Be Equal As Strings ${result} 3

각각의 테스트 케이스를 별개로 만들고 싶다면, Test Template 을 이용한다.

Page 137: Robot framework 을 이용한 기능 테스트 자동화

137

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html Chrome

*** Test Cases ***Add Numbers with Single Digits

[Template] Add Signgle Digit NumbersSingle Digit Numbers(1+2) 1 2Single Digit Numbers(3+4) 3 4Single Digit Numbers(5+6) 5 6

*** Keywords ***Add Signgle Digit Numbers [Arguments] ${augend} ${addend} Click Element //button[text()='${augend}'] Click Element //button[text()='+'] Click Element //button[text()='${addend}'] Click Element //button[text()='='] ${result}= Get Value jQuery=#calculatorColl .box_result .num_result .tf_comm Should Be Equal As Strings ${result} 3

Test 안에 Template 을 이용하기

Page 138: Robot framework 을 이용한 기능 테스트 자동화

138

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html Chrome

*** Test Cases ***[Technical Activity] Add Numbers with Double Digits Click Element //button[text()='1'] Click Element //button[text()='2'] Click Element //button[text()='+'] Click Element //button[text()='4'] Click Element //button[text()='6'] Click Element //button[text()='='] ${result}= Get Value jQuery=#calculatorColl .box_result .num_result .tf_comm Should Be Equal As Strings ${result} ${expected_value}

Technical Activity 로 기술하기

Page 139: Robot framework 을 이용한 기능 테스트 자동화

139

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html Chrome

*** Test Cases ***Add Numbers with Double Digits A user enter a number 12 A user enter plus A user enter a number 34 Result Should Be 46

*** Keywords ***A user enter a number [Arguments] ${number} ${length}= Get Length ${number} :FOR ${index} IN RANGE ${length} \ Click Element //button[text()='${number[${index}]}']

A user enter plus Click Element //button[text()='+']

Result Should Be [Arguments] ${expected_value} Click Element //button[text()='='] ${result}= Get Value jQuery=#calculatorColl .box_result .num_result .tf_comm Should Be Equal As Strings ${result} ${expected_value}

Workflow 로 기술하기

Page 140: Robot framework 을 이용한 기능 테스트 자동화

140

다음 계산기 테스트 자동화

*** Settings ***Library Selenium2LibrarySuite Setup Open Browser file://.../Calculator/calculator.html Chrome

*** Test Cases ***Add Numbers with Sigle Digit Number 1 Plus Number 2 Should Be Equal 3

*** Keywords ***Number [Arguments] ${number} A user enter a number ${number}

Plus A user enter plus

Should Be Equal [Arguments] ${expected_value} Result Should Be ${expected_value}

비즈니스 규칙으로 기술하기

Page 141: Robot framework 을 이용한 기능 테스트 자동화

141

IV. Command Line Options

1. Command Line Options

Page 142: Robot framework 을 이용한 기능 테스트 자동화

142

옵션 설명

-N, --name <name> Top-level Test Suite 이름을 지정한다 .

-D, -d <document> Top-level Test Suite document 지정한다 .

-M, --metadata <name:value> Top-level test suite metadat 를 설정한다 .

-G, --settag <tag> 실행된 모든 test case 들의 tag 를 지정한다 .

-t, --test <name> 테스트 케이스를 이름으로 선택한다 .

-s, --suite <name> 테스트 슈트를 이름으로 선택한다 .

-i, --include <tag> 지정된 tag 를 포함한 테스트 케이스만 실행한다 .

-e, --exclude <tag> 지정된 tag 를 포함한 테스트 케이스만 실행하지 않는다.

-c, --critical <tag> 지정된 tag 를 포함한 테스트 케이스들은 critical 한 테스트 케이스로 간주한다 .

-n, --noncritical <tag> 지정된 tag 를 포함한 테스트 케이스들은 critical 하지 않은 테스트 케이스로 간주한다 .

-v, --variable <name:value> variable 을 설정한다 .

-V, --variablefile <path:args> variable files 를 이용하여 variable 을 설정한다 .

-d, --outputdir <dir> 출력 파일들을 저장할 디렉토리를 지정한다

Command Line Options

Page 143: Robot framework 을 이용한 기능 테스트 자동화

143

옵션 설명

-o, --output <file> output 을 저장할 파일 경로를 지정한다 .

-l, --log <file> 실행 log 를 기록할 파일 경로를 지정한다 .

-r, --report <file> report 를 저장할 파일 경로를 지정한다 .

-x, --xunit <file> xUnit 형식의 결과를 저장할 파일 경로를 지정한다 .

--xunitskipnoncritical non-critical 한 테스트를 xUnit 형식 결과 파일에서 제외한다 .

-b, --debugfile <file> 디버그 용 파일 경로를 지정한다 .

-T, --timestampoutputs 모든 출력 파일들에 timestamp 를 추가한다 .

--splitlog log file 을 더 작은 파일로 쪼개서 저장한다 .

--logtitle <title> 생성된 테스트 로그의 제목을 지정한다 .

--reportitle <title> 생성된 테스트 리포트의 제목을 지정한다 .

-L, --loglevel <level> 로깅 thredshold 를 지정한다 .

--suitestatlevel <level>

--tagstatinclude <tag> 지정된 tag 를 가진 테스트 케이스들만 통계에 포함한다 .

Command Line Options

Page 144: Robot framework 을 이용한 기능 테스트 자동화

144

옵션 설명

--tagstatexclude <tag> 지정한 tag 를 가진 테스트 케이스들은 통계에서 제외한다 .

--tagstatcombine <tags:title> tags 들을 이용해서 통계를 조합한다 .

--tagdoc <pattern:doc> 지정된 테그들에 대한 documentation 을 추가한다 .

--tagstatlink <pattern:link:title> 통계에 외부 링크를 추가한다 .

--removekeywords <all/passed/name:pattern/tag:pattern/for/wulks>

로그 파일에서 키워드를 제거한다 .

--flattenkeywords <for/foritem/name:pattern/tag:pattern>

로그 파일에 Keyword 를 flatten 한다.

--listener <name:args> 테스트 실행을 모니터링하기 위한 리스너를 설정한다 .

--warnonskippedfiles 내용이 잘못된 파일들을 skip 할 때, 경고 메시지를 보여준다 .

--nostatusrc 테스트 케이스가 실패하더라도 프로세스의 반환코드로 0(성공)을 돌려준다 . 보통은 Error 코드가 반환된다 .

--runemptysuite 지정한 테스트 슈트가 비어 있는 것처럼 테스트를 실행한다 .

--dryrun 테스트 라이브러리들에 있는 키워드를 실행하지 않은 상태에서 테스트 케이스를 실행한다 . 테스트 데이터 문법을 검사하는데 유용하다 .

Command Line Options

Page 145: Robot framework 을 이용한 기능 테스트 자동화

145

옵션 설명

--exitonfailure critical 테스트 케이스가 실패하면 더 이상 테스트 실행을 멈춘다.

--exitonerror 테스트 데이터를 parsing 하거나, 라이브러리를 import 하는 과정에서 오류가 발생하면 테스트 실행을 멈춘다.

--skipteardownonexit 테스트 실행이 중지될 때, teardown 을 실행하지 않는다.

--prerunmodifier <name:args> 테스트 데이터의 programmatic 변경을 활성화한다 .

--prerebotmodifier <name:args>

결과의 programmatic 변경을 활성화한다 .

--randomize <all/suites/tests/none>

테스트 실행 순서를 랜덤하게 한다. ( 테스트가 랜덤하게 실행되도록 한다. )

--console <verbose/dotted/quiet/none>

콘솔 출력 형식을 결정한다 .

--dotted --console dotted 의 short cut

--quiet --console quite 의 short cut

-W, --consolewidth <width> 콘솔 출력의 너비를 지정한다 .

-C, --consolecolors <auto/on/ansi/off>

콘솔 출력의 색을 지정한다 .

Command Line Options

Page 146: Robot framework 을 이용한 기능 테스트 자동화

146

옵션 설명

-K, --consolemarkets <auto/on/off>

테스트 케이스에 있는 top level 키워드들이 끝날 때, 콘솔에 마커를 보여준다 .

-P, --pythonpath <path> python 모듈을 검색할 경로를 추가적으로 지정한다 .

-E, --escape <what:with> 콘솔 출력시 문제가 발생되는 캐릭터들을 코드로 변환해서 출력한다 .

-A, --argumentfile <path> 실행시 추가적인 argument 를 읽어올 파일을 지정한다 .

-h, --help 도움말을 출력한다 .

--version 버전을 출력한다 .

Command Line Options

Page 147: Robot framework 을 이용한 기능 테스트 자동화

147

구분 설명

Short Option -X 형식의 Option. 지정한 옵션 뒤에 공백문자를 쓰고 값을 지정예)% robot -L debug ...

Long Option --something 형식의 Option. 지정한 옵션 뒤에 공백문자 혹은 ‘=’ 를 사용해서 값을 지정한다 .예) % robot --loglevel=debug …. % robot --loglevel debug ...

옵션 값을 지정할 때 대부분의 경우, 다음 표와 같은 패턴을 지정할 수 있다.- 패턴 매칭시에는 대소문자를 구분하지 않는다.

구분 설명

* 어떤 문자열과도 일치한다 .예) % pybot --test Invalid* DataDrivenStyle.robot% pybot --test INVALID* DataDrivenStyle.robot

? 한 문자만 일치한다 .예)% pybot --test ?nvalid* DataDrivenStyle.robot

RobotFramework 의 Command Line Option 은 Short Option 과 Long Option 으로 구분된다.

Command Line Options

Page 148: Robot framework 을 이용한 기능 테스트 자동화

148

Tag Pattern : tag 를 지정할 때, tag pattern 을 사용할 수 있다.- 태그 매칭은 대소문자를 구분하지 않는다.

구분 설명

AND (&) --include fooANDbar : foo, bar 태그가 모두 지정된 테스트 케이스만을 실행한다 .--exclude xx&yy&zz : xx,yy,zz 태그가 모두 지정된 테스트 케이스만 제외한다 .

OR --include foorORbar : foo, bar 태그 둘중 하나 이상 지정된 테스트 케이스를 실행한다 .--execlude xxORyyORzz : xx, yy, zz 중에 하나 이상 지정된 테스트 케이스를 제외한다 .

NOT --include fooNOTbar : foo 태그가 지정된 테스트 케이스 중, bar 가 없는 테스트 케이스를 실행한다 .--exclude xxNOTyyNOTzz : xx 가 지정된 테스트 케이스 중, yy 나 zz 가 없는 테스트 케이스를 제외한다 .

Command Line Options

Page 149: Robot framework 을 이용한 기능 테스트 자동화

149

Command Line Options

RobotFramework 는 환경변수에 설정된 값을 기본 Option 으로 사용한다.

명령어 환경변수 사용예

robot ROBOT_OPTIONS % robot --test ?nVALID* DataDrivenStyle.robot

% export ROBOT_OPTIONS="--test ?nVALID*"% robot DataDrivenStyle.robot

rebot REBOT_OPTIONS % rebot --test ?nVALID* DataDrivenStyle.robot

% export REBOT_OPTIONS="--test ?nVALID*"% rebot DataDrivenStyle.robot

Page 150: Robot framework 을 이용한 기능 테스트 자동화

150

Command Line Options

Escape Character- Option 값으로 특수값을 사용해야 할 때는 Escape 문자를 사용한다.

- 예제) pybot --test ?nvalidSPACEUsername DataDrivenStyle.robot- 기본 Escape 문자 대신 다른 문자를 사용하고 싶을 때는 -E(--escape) 옵션을 사용한다.

- 예제) pybot --escape space:_ --test ?nvalid_Username DataDrivenStyle.robot

문자 이름 문자 이름

& amp ( paren1' apos ) paren2@ at % percent\ bslash | pipe: colon ? quest, comma " quot{ curly1 ; semic} curly2 / slash$ dollar space! exclam [ square1> gt ] square2# hash * star< lt

Page 151: Robot framework 을 이용한 기능 테스트 자동화

151

Command Line Options

Argument Files- RobotFramework 를 실행할 때마다 옵션을 많이 사용해야 하는 경우에는 자주 사용하는 Option 들을 파일에 지정한 후에, RobotFramework를 실행할 때 Argument 파일을 지정할 수 있다.

--doc This is an example (where "special characters" are ok!)--metadata X:Value with spaces--variable VAR:Hello, world!# This is a commentpath/to/my/tests

구분 사용 예

Argument 파일 사용 robot --argumentfile all_arguments.robotrobot --name Example --argumentfile other_options_and_paths.robotrobot --argumentfile default_options.txt --name Example my_tests.robotrobot -A first.txt -A second.txt -A third.txt tests.robot

표준 입력으로 받기 generate_arguments.sh | robot --argumentfile STDINgenerate_arguments.sh | robot --name Example --argumentfile STDIN tests.robot

<Argument 파일 예제>

Page 152: Robot framework 을 이용한 기능 테스트 자동화

152

감사합니다.