1. 도구개요 소개 주요기능 HTTP서버와자바프로그램을통해상호작용을할수있는오픈소스기반의자바라이브러리. 은자바프로그램에서브라우저없이직접서버에접근. 은 HTML서버들의상호작용에대한 API를제공하여 JUnit 또는 Cactus 와함께사용하여테스트를작성. HTML 서버들의상호작용에대한 API 제공 카테고리 세부카테고리테스트설계및실행 커버리지단위테스트도구난이도중 라이선스형태 / 비용 MIT License / 무료사전설치도구 Eclipse, JDK 1.4 이상, 테스트케이스도구 (JUnit 혹은 Cactus) 운영체제 Windows, Linux, Mac OS X, UNIX 최신버전 1.7 (2010. 10) 특징 브라우저없이자바프로그램에서직접서버에접근 HTML 파싱, 폼전송, 하이퍼링크, 쿠키설정, 웹브라우저와연관된기능들을수행하는 API 제공 서블릿을다루기위한클래스라이브러리제공 단위테스트보다는통합테스트에유용 테스트케이스작성에관한도구로 JUnit( 또는 Cactus) 을사용 적용회사 / 프로젝트 - 관련도구 JUnit, Selenium, httpunit, JCoverage, CppUnit, Jdepend 제작사 Russell Gold, Wolfgang Fahl ( 개발자 ) 공식홈페이지 http://www.httpunit.org/ 1
2. 기능요약 HTTP 서버와자바프로그램을통해상호작용을할수있는오픈소스기반의자바라이브러리 주요기능 IDE내별도의편집기및 UI 제공정적웹페이지검사하이퍼링크테스트웹페이지 UI테스트정적웹페이지검사테스트자동화 지원여부 일부지원 : JUnit UI 제공 ( 라이브러리기반, 자바테스트코드작성 ) 지원 지원 지원 ( 테이블, 입력폼테스트 ) 지원 지원 ( 자체프로젝트, 시나리오의테스트케이스자동화 ) 1
3. 도구실행환경 Eclipse IDE 상에서설치및구현이가능 다양한 OS 를지원 Windows : Windows XP / Windows 7 (32, 64-bit 모두지원 ) Linux : 32, 64-bit 지원 Mac OS X : 32, 64-bit 지원 UNIX : 32, 64-bit 지원 JDK, 자바기반도구 (IDE 등 ) 및테스트케이스도구필요 플러그인 (IDE 필요 ) 형태도구및기본테스트케이스작성을위한테스트케이스도구필요 (Eclipse Plug-in 형태 ) 테스트케이스도구 (JUnit / Cactus) Eclipse IDE JDK (Java development kit) Windows / Linux / Mac OS / UNIX 1
4. 도구설치방법 세부목차 4.1 다운받기 4.2 디렉터리구조 4.3 Eclipse에 라이브러리등록하기 4.4 라이브러리의종류 1
4. 도구설치방법 4.1 다운받기 다음사이트에서 을다운 http://www.httpunit.org/ Download 1.7 을클릭하여다운로드 2
4. 도구설치방법 4.2 디렉토리구조 다운받은 파일의압축해제 doc : 에관한문서들 - tutorial : Servlet을기초로하여만들어진웹사이트에대한 test 튜토리얼 - api : Javadoc manual : 사용자매뉴얼 examples : 으로작성된몇개의예제프로그램들 jars : 실행, build, test에사용하는 jars 파일들 lib :.jar 파일 META-INF : 인증및교환프로토콜파일들 src : 소스코드 test : 에대한 unit test 3
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (1/8) 은자바라이브러리이므로프로젝트를컴파일하기전에필요한 라이브러리를등록필요 eclipse 를실행한후, Project Build Path Library 를지정 자바프로젝트를생성 File New Java Project 4
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (2/8) 프로젝트이름입력 Next 본예제에서는 Project name 을 test page 로지정 ❶ ❷ 5
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (3/8) Libraries 탭선택 AddExternal JARs... 버튼클릭 ❶ ❷ 6
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (4/8) 압축해제한 httpunit 폴더에서 jars 폴더로이동 라이브러리선택 열기 (O) 클릭 OK 클릭 ❶ ❷ 7
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (5/8) 라이브러리가추가된것을확인 ❶ ❷ 8
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (6/8) 다시한번 Add External JARs 버튼을클릭 9
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (7/8) Lib 폴더로이동 httpunit.jar 선택 열기버튼클릭 ❶ ❷ 10
4. 도구설치방법 4.3 Eclipse 에 라이브러리등록하기 (8/8) 라이브러리가추가된것을확인 11
4. 도구설치방법 4.4 라이브러리의종류 에서제공하는라이브러리들의종류와기능 Jar 이름기능관련사이트 & 문서 Nekohtml.jar HTML 의파서 (xerces-j 2.2 이상요구 ) www.apache.org/~andyc/neko/doc/ht ml/index.html Jtidy.jar HTML 파서로 Jaxp Compliant 파서와함께사용 lempinen.net/sami/jtidy/ XmlParserAPIs.jar Xerces-j 에서일반적인파서의 API 들을제공받음 xml.apache.org xerceslmpl.jar Xerces-j 2.2 구현 xml.apache.org js.jar 자바스크립트를지원하는기능제공 www.mozila.org/rhino servlet.jar Servlet unit test 에대한기능제공 java.sun.org junit.jar unit test 에대한기능제공 www.junit.org mail.jar 파일업로드용량에관한테스팅기능제공 java.sun.com/products/javamail/ activation.jar 파일업로드용량에관한테스팅기능제공 java.sun.com/products/javabeans/glasg ow/jaf.html 12
5. 도구기능소개 세부목차 5.1 의주요기능 5.2 으로정적인웹페이지테스트 5.3 으로하이퍼링크테스트 5.4 으로웹페이지에있는테이블테스트 5.5 으로웹페이지에있는 Form 테스트 1
5. 도구기능소개 5.1 의주요기능 의기능은크게 4 가지로구별 정적인웹페이지가존재하는지테스트 웹페이지에있는하이퍼링크에대해서테스트 웹페이지에있는테이블에대해서테스트 웹페이지에있는여러종류의입력폼들을테스트 [ 정적인페이지인위키피디아메인화면 ] [ 많은하이퍼링크가존재하는웹페이지화면 ] 2
5. 도구기능소개 5.2 으로정적인웹페이지테스트 (1/6) 을이용하여정적인웹페이지의존재여부를테스트 에러가발생되지않는다면정적인웹페이지가존재하는것이며에러가발생된다면정적인웹페이지가존재하지않음 이기능을소개하기위해서위키피디아 (www.wikipedia.org) 의메인페이지가정적인웹페이지인지를검사 [ 위키피디아메인화면 ] 3
5. 도구기능소개 5.2 으로정적인웹페이지테스트 (2/6) test page 프로젝트에클래스파일을생성 test page 프로젝트선택후마우스우클릭 New Class 4
5. 도구기능소개 5.2 으로정적인웹페이지테스트 (3/6) Java Class 이름입력 ❶ ❷ 5
5. 도구기능소개 5.2 으로정적인웹페이지테스트 (4/6) Java Class 파일안에다음과같이입력하여 Test Case 를생성 테스트를원하는웹페이지의 URL 입력 6
5. 도구기능소개 5.2 으로정적인웹페이지테스트 (5/6) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 7
5. 도구기능소개 5.2 으로정적인웹페이지테스트 (6/6) 실행결과 테스트가성공되었다는의미로써녹색바를볼수있음. 이는정직인웹페이지가존재함을말함. 테스트가실패되었다는의미로써빨간색바를볼수있음. 이는정적인웹페이지가존재하지않음을말함. [ 정적인웹페이지가존재하는경우 ] [ 정적인웹페이지가존재하지않는경우 ] 8
5. 도구기능소개 5.3 으로하이퍼링크테스트 (1/5) 을이용하여웹페이지에있는하이퍼링크에대한테스트를수행 만약에러가발생되지않는다면웹페이지에있는하이퍼링크가정상적으로작동하는것이며에러가발생된다면정상적으로작동하지않는다는의미 이기능을소개하기위해서 홈페이지에있는 ServletUnit 링크의정상작동여부에대한테스트를수행 9
5. 도구기능소개 5.3 으로하이퍼링크테스트 (2/5) test page 프로젝트에클래스파일을생성 본예제에서는 Name 을 Test2 로설정 ❶ ❷ 10
5. 도구기능소개 5.3 으로하이퍼링크테스트 (3/5) 만들어진 Java Class 파일안에다음과같이입력하여 Test Case 를생성 테스트를원하는웹페이지의 URL 테스트를원하는웹페이지의링크이름 11
5. 도구기능소개 5.3 으로하이퍼링크테스트 (4/5) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 12
5. 도구기능소개 5.3 으로하이퍼링크테스트 (5/5) 실행결과 테스트가성공되었다는의미로써녹색바를볼수있음. 이는링크가존재한다는것을말함. 테스트가실패되었다는의미로써빨간색바를볼수있음. 이는링크가존재하지않는다는것을말함. [ 웹페이지에 ServletUnit 라는링크가존재하는경우 ] [ 웹페이지에 ServletUnit 라는링크가존재하지않는경우 ] 13
5. 도구기능소개 5.4 으로웹페이지에있는테이블테스트 (1/5) 을이용하여웹페이지에있는테이블에대한테스트를수행하는기능 만약에러가발생되지않는다면웹페이지에있는테이블이정상적으로작성되었다는것이며에러가발생된다면정상적으로작성되지않았다는의미 테스트할웹페이지화면이며이웹페이지에있는테이블의필드값에대해서테스트를수행 14
5. 도구기능소개 5.4 으로웹페이지에있는테이블테스트 (2/5) test page 프로젝트에클래스파일을생성 본예제에서는 Name 을 Test3 로설정 ❶ ❷ 15
5. 도구기능소개 5.4 으로웹페이지에있는테이블테스트 (3/5) 아래의화면은웹페이지에있는테이블을테스트하기위한 Test Case 작성화면이며다음과같은함수를이용하여테이블을테스트 assertequals([string Message], expected A, actual B) : expected A 와 actual B 가같은지검사 assertnull([string Message], java.lang.object object) : 인자로넘겨받은객체가 Null 여부검사 assertsame ([String Message], expected A, actual B) : expected A 와 actual B 가같은객체를참조하는지검사 assertture([string message], boolean condition) : boolean 조건이참인지검사 Fail([String message]) : 테스트를바로실패처리 테스트를원하는웹페이지의 URL 을입력 원하는테스트함수를작성 16
5. 도구기능소개 5.4 으로웹페이지에있는테이블테스트 (4/5) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 17
5. 도구기능소개 5.4 으로웹페이지에있는테이블테스트 (5/5) 실행결과 이부분이잘못작성되었기때문에테스트실패발생 [ 테이블에있는항목들이정확히작성되었을경우 ] [ 테이블에있는항목들이잘못작성되었을경우 ] 18
5. 도구기능소개 5.5 으로웹페이지에있는 From 테스트 (1/5) 을이용하여웹페이지에있는 Form 에대한테스트 만약에러가발생되지않는다면웹페이지에있는 Form 이정상적으로작성되었다는것이며에러가발생된다면정상적으로작성되지않았다는의미 아래화면은테스트할웹페이지화면과그화면의코드 [Form 의 HTML 코드 ] [ 웹페이지에있는 Form 화면 ] 19
5. 도구기능소개 5.5 으로웹페이지에있는 From 테스트 (2/5) test page 프로젝트에클래스파일을생성 본예제에서는 Name 을 Test4 로설정 ❶ ❷ 20
5. 도구기능소개 5.5 으로웹페이지에있는 From 테스트 (3/5) 아래의화면은웹페이지에있는 Form 을테스트하기위한 Test Case 작성화면 테스트를원하는웹페이지의 URL 을입력 원하는테스트함수를작성 21
5. 도구기능소개 5.5 으로웹페이지에있는 Form 테스트 (4/5) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 22
5. 도구기능소개 5.5 으로웹페이지에있는 Form 테스트 (5/5) 실행결과 이부분이잘못작성되었기때문에테스트실패발생 [Form 에값이정확하게입력된경우 ] [ 테이블에있는항목들이잘못작성되었을경우 ] 23
6. 도구활용예제 세부목차 6.1 예제설명 6.2 Test를위한프로젝트생성하기 6.3 Test를위한 Java Class 파일생성하기 6.4 Eclipse에 라이브러리등록하기 6.5 으로정적인웹페이지테스트 6.6 으로하이퍼링크테스트 6.7 으로웹페이지에있는테이블테스트 6.8 으로웹페이지에있는 Form 테스트 1
6. 도구활용예제 6.1 예제설명 (1/2) homepage 프로젝트개요 homepage 프로젝트설명 - 의홈페이지관리자는사용자들로부터다음과같은메일을수신 - 사용자 J 씨의메일내용 Cookbook 페이지에접속할때마다페이지내용이조금씩틀린것같아혼란스럽습니다. - 사용자 K 씨의메일내용 Cookbook 페이지에존재하는몇개의하이퍼링크중에서연 결되지않는링크가있습니다. - 사용자 P 씨의메일내용 테이블이깨져보이고 Form 에오류가있는것같습니다. - 관리자는메일내용을참조하여페이지테스트를수행 2
6. 도구활용예제 6.1 예제설명 (2/2) H 회사의몇가지이슈상황 Cookbook 페이지가정적인페이지인지동적인페이지인지점검 Cookbook 페이지에있는모든하이퍼링크를검사하는것은많은시간이소요 Cookbook 페이지에있는테이블과 Form 을눈으로확인할경우자칫실수에의해서오류를못찾을가능성도있음 홈페이지관리자는프로젝트상황과현재이슈에대한해결책을고민하던중, 웹페이지테스팅도구인 을이용하여테스트를해보기로결정 3
6. 도구활용예제 6.2 Test 를위한프로젝트생성하기 (1/2) 테스트를수행하기위해서우선 Eclipse 에서프로젝트를생성 File New Java Project 4
6. 도구활용예제 6.2 Test 를위한프로젝트생성하기 (2/2) 다음나오는 New Java Project 창에서프로젝트이름을입력한후 Finish 버튼을클릭 ❶ ❷ 5
6. 도구활용예제 6.3 Test 를위한 Java Class 파일생성하기 (1/2) test 프로젝트에클래스파일을생성 test 프로젝트선택후마우스우클릭 New Class 6
6. 도구활용예제 6.3 Test 를위한 Java Class 파일생성하기 (2/2) Java Class 이름입력 Finish 본예제에서는 Name 을 Test 으로설정 ❶ ❷ 7
6. 도구활용예제 6.4 Eclipse 에 라이브러리등록하기 (1/5) 테스트를위해서는 라이브러리를 Eclipse 에등록 프로젝트에아래와같은순서에따라서라이브러리를등록 프로젝트선택 마우스우클릭 Properties 클릭 8
6. 도구활용예제 6.4 Eclipse 에 라이브러리등록하기 (2/5) Java Build Path Libraries Add External JARs.. 클릭 ❶ ❷ 9
6. 도구활용예제 6.4 Eclipse 에 라이브러리등록하기 (3/5) Httpunit 폴더에서 jars 폴더로이동 라이브러리선택 열기 (O) 클릭 OK 클릭 ❶ ❷ 10
6. 도구활용예제 6.4 Eclipse 에 라이브러리등록하기 (4/5) 다시한번 Add External JARs 버튼을클릭 11
6. 도구활용예제 6.4 Eclipse 에 라이브러리등록하기 (5/5) Lib 폴더로이동 httpunit.jar 선택 열기버튼클릭 ❶ ❷ 12
6. 도구활용예제 6.5 으로정적인웹페이지테스트하기 (1/3) Cookbook 페이지가정적인페이지인지아닌지에대한테스트수행 13
6. 도구활용예제 6.5 으로정적인웹페이지테스트하기 (2/3) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 14
6. 도구활용예제 6.5 으로정적인웹페이지테스트하기 (3/3) 실행결과 화면에서빨간색으로표시된부분을보면녹색바가보이는데녹색바의의미는테스트에통과했다는의미. 따라서 Cookbook 페이지는정적인웹페이지임을확인. 15
6. 도구활용예제 6.6 으로하이퍼링크테스트 (1/4) 두번째로진행할테스트는 Cookbook 페이지에있는하이퍼링크에관한테스트 Cookbook 페이지에는여러개의하이퍼링크가존재하며그중에서 response 링크를테스트 16
6. 도구활용예제 6.6 으로하이퍼링크테스트 (2/4) 앞테스트에서사용한 Java Class 파일안에다음과같이입력하여 Test Case 를생성 17
6. 도구활용예제 6.6 으로하이퍼링크테스트 (3/4) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 18
6. 도구활용예제 6.6 으로하이퍼링크테스트 (4/4) Java Class 파일을실행하면다음과같은화면이출력. 이화면의의미는 Cookbook 페이지는정적인페이지이며그안에있는 response 링크는정상적으로작동. 19
6. 도구활용예제 6.7 으로웹페이지에있는테이블테스트 (1/4) 세번째로진행할테스트는 Cookbook 페이지에있는테이블에관한테스트 테스터는테이블안에입력된필드값의참여부에관한테스트 20
6. 도구활용예제 6.7 으로웹페이지에있는테이블테스트 (2/4) 테스터가원하는테이블의필드들의값은아래표와동일 테스터는 Cookbook 페이지에있는테이블의필드값을비교하기위해아래와같이 Java Class 코드를작성 Name gules sable Color red black 원하는테스트함수를작성 21
6. 도구활용예제 6.7 으로웹페이지에있는테이블테스트 (3/4) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 22
6. 도구활용예제 6.7 으로웹페이지에있는테이블테스트 (4/4) 앞에서작성한 Java Class 파일을실행하여아래와같은결과 아래의그림에서의녹색바는 Cookbook 페이지에있는테이블의테스터가기대한값들이정상적으로들어갔다는것을의미 23
6. 도구활용예제 6.8 으로웹페이지에있는 Form 테스트 (1/4) 마지막으로진행할테스트는 Cookbook 페이지에있는 Form 에관한테스트 테스터는 Form 안에입력된값이정확히입력되어있는지에대해서테스트를수행 <TABLE border="1" cellpadding="3"> <TR> <TD> <FORM> Restaurant Name: <INPUT name="name" type="text" value="la Cerentolla"></INPUT> <BR></BR> Restaurant Type: <INPUT checked="" name="food" type="radio" value="chinese"></input> Chinese <INPUT name="food" type="radio" value="texmex"></input> Tex/Mex <INPUT name="food" type="radio" value="italian"></input> Italian <BR></BR> Location: <SELECT name="location"> <OPTION value="centercity 0>Center City</OPTION> <OPTION value="northeast">northeast</option> <OPTION selected="" value="manayunk">manayunk</option> <OPTION value="pennslanding">penns Landing</OPTION> </SELECT> <BR></BR> <INPUT checked="" name="creditcard" type="checkbox"></input> Accepts Credit Cards <BR></BR> <BR></BR> <INPUT type="submit" value="update"></input> </FORM> </TD> </TR> </TABLE> [Cookbook 페이지에있는 Form 의형태 ] [Form 을구성하는 html 코드 ] 24
6. 도구활용예제 6.8 으로웹페이지에있는 Form 테스트 (2/4) 테스터가원하는값 레스토랑이름 : La Cerentolla 레스토랑의종류 : Chiness 위치 : Manayunk Credit Cards 의사용가능여부 : 사용가능 테스터가원하는값이 Form 에입력되는지확인하기위해다음그림과같이 Java Class 파일을작성 25
6. 도구활용예제 6.8 으로웹페이지에있는 Form 테스트 (3/4) Run 아이콘 / 메뉴바의 Run Run 을선택하여 을실행 26
6. 도구활용예제 6.8 으로웹페이지에있는 Form 테스트 (4/4) 앞에서작성한 Java Class 파일을실행하여아래와같은결과 녹색바의의미는테스터가원하는값이 Form 에입력되었으며, 테스트에통과되었다는것을의미 27
7. FAQ 질문 1) 이제공하는 API 가무엇인가요? 답변 1 : HTML 파싱, 폼젂송, 하이퍼링크, 쿠키설정그리고웹브라우저와연관된기능들을수행하는 API 를제공하며또한서블릿을다루기위한클래스라이브러리를제공합니다. 질문 2) 통합테스트가무엇입니까? 답변 2 : 통합테스트는소프트웨어컴포넌트간의상호작용을검증하는프로세스로서간단하게말하면단위테스트가논리적으로확장된것입니다. 가장단순한형태의통합테스트는, 이미테스트를마친두유닛을하나의구성요소로통합하고두유닛사이의인터페이스를테스트하는것입니다. 여기서구성요소는둘이상의유닛이통합된집합을말합니다. 통합테스트는크게하향식 (Top-down) 와상향식 (Bottom-up) 로나뉘어집니다. 1
8. 도구평가 활용성 단순한설치에비해여러가지형태의웹페이지테스트기능을제공 범용성 플러그인형태로제공되어 Eclipse 기반환경이라면어느환경에서든지사용가능 호환성 현재까지개발된 Eclipse 버전상의발견된문제점없음 성능 기본적인성능은빠르나, 네트워크상태에따라달라질수있음 기타 테스트자동화및강력한라이브러리를제공 도구평가의견 을통하여테스트를자동화하므로코드를편리하게유지, 관리 은자바라이브러리형태로제공되므로설치과정이필요가없음 은웹브라우저를통해웹사이트를방문하는사용자에의해수행되는시나리오의테스트케이스를자동화함으로써테스트케이스를쉽게작성 1
9. 용어정리 본매뉴얼에서사용하고있는용어의정리 정적인웹페이지 일반텍스트편집기로입력되며, *.html 또는 *.htm 으로구성된페이지. 정 적인웹페이지의모습은이것을보는사용자의장소, 시간및환경에상 관없이항상동일. 동적인웹페이지 사용자가페이지를요청하는시점에그페이지를새롭게구성하는행위. 따라서동적웹페이지는 Html 소스를만들어내는코딩작업필요. 1