Controller 영역인 브라우저에서의 단위테스트를 위한 HtmlUnit 사용하기 |
개발환경 : JDK 1.5, Junit 3, HtmlUnit 2.7, window XP |
HtmlUnit 은 WebApplication 개발시 브라우저에서 테스트하지 않고 Java
프로그램을 단위 테스트 해볼수 있는 framework 이다. javascript, Ajax 를 완벽하게
지원할 뿐만 아니라 Internet Explorer, Firefox 두개의 브라우저에서 테스트 해볼수
있다.
(1) 환경설정 |
이것의 주요 목적은 개발된 웹사이트의 단위테스트와 정보를 리턴받기 위함이다.
http://htmlunit.sourceforge.net/ 에 주요내용이 있으므로 참고하기 바란다.
일단 왼쪽에 downloads 를 클릭해 파일을 다운받는다. 파일안 lib 폴더에
의존적인 class 들이 있으므로 그대로 복사해서 쓰면 된다.
HtmlUnit 을 돌리기 위해서 어떤 jar 버전이 의존적인지 확인해 볼려면 다음
페이지로 가서 확인하면된다. http://htmlunit.sourceforge.net/dependencies.html
다운받은 jar 파일을 복사해넣고 간단히 테스트 프로그램을 만들어서 실행해보자.
HtmlUnit 을 테스트하기위해서는 Junit 프레임웍을 사용해야한다.
windows > Preferences > Java Build Path 로 들어간다. Libraries 탭을 클릭해서
설정화면으로 들어가자. 화면에서 오른쪽 버튼중 Add Library 를 클릭하게 되면
eclipse 에서 제공하는 라이브러리 패키지 리스트가 제공된다. 그중 Junit 을
선택하게 되면 Junit3, Junit4 중 하나를 선택하게 되는데 나는 이전부터 Junit3 가
익숙해져 있어서 3 를 선택했다.
(2) 테스트 클래스 제작 |
이제 Junit 클래스를 하나 만든다. junit.framework.TestCase 클래스를 상속받아
만드는데 함수실행을 위해서는 함수명 앞에 testXXX 형태로 이름을 만들어야
framework 이 인식하게 된다. 사이트에서 사용한 예제는 Junit4 를 기반으로
했기 때문에 @Test 어노테이션을 사용할수 있지만 Juit3 에서는 못하기 때문에
함수명을 textXXX 로 만들수 밖에 없다.
import junit.framework.TestCase; import com.gargoylesoftware.htmlunit.WebClient; import com.gargoylesoftware.htmlunit.html.HtmlPage; public class WebSubmit extends TestCase { public void testHomePage() throws Exception { final WebClient webClient = new WebClient(); final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net"); assertEquals("HtmlUnit - Welcome to HtmlUnit", page.getTitleText()); final String pageAsXml = page.asXml(); assertTrue(pageAsXml.contains("")); final String pageAsText = page.asText(); assertTrue(pageAsText.contains("Support for the HTTP and HTTPS protocols")); } }
위 소스를 테스트 한 결과이다. 왼쪽에 보면 문제 없이 진행된 것을 볼수 있다.
그리고 로그를 확인해 보면 사이트로 전송받은 HTML 내용이 DEBUG 모드로
출력되어있는 것을 볼수 있다. Junit 은 기본적으로 Log4j 를 사용하기 때문에
log4j 설정값이 들어있는 properties 를 패키지 제일 상단에 복사해 넣는다.
만약 log4j.properties 가 없다면 아래와 같은 에러가 날것이다. 그리고 HtmlUnit 에서
출력하는 상세로그를 확인할수 없어 디버그 하기 힘들다.
log4j:WARN No appenders could be found for logger (com.gargoylesoftware.htmlunit.WebClient).
log4j:WARN Please initialize the log4j system properly.
다음 테스트 내용은 브라우저에서 실행할 내용을 단위테스트 함수에서 실행하는
것이다. 보통 브라우저에서 회원가입이나 데이터를 입력해서 submit 을 해야되는
경우 할 때 마다 수많은 입력값을 넣어 테스트를 하고 실패했을 경우 다시
재입력해야되는 귀찮은 작업을 해야한다. 하지만 단위테스트 함수를 만들어 놓고
그 안에 입력값을 고정으로 해서 작업한다면 다시 재입력해야 되는 수고는 덜수
있을 뿐만 아니라 값을 넘기고 난 이후의 비즈니스 로직을 효과적이고 빠르게
테스트 해볼수 있을 것이다public void testSubmittingForm() throws Exception { final WebClient webClient = new WebClient(); // WAS 를 띄운다. 테스트 하고자 하는 페이지로 접근하여 데이타를 받아온다 final HtmlPage page1 = webClient.getPage("http://localhost:8080/test.html"); // HTML 에서 form 객체를 가져온다. final HtmlForm form = page1.getFormByName("myform"); // Button 객체를 가져온다. final HtmlSubmitInput button = form.getInputByName("button"); // Input text 객체를 가져온다. final HtmlTextInput textField = form.getInputByName("userid"); textField.setValueAttribute("값변경"); // Input text 값을 변경한다. // 버튼 클릭과 같은 기능을 한다. javascript 함수 호출이나 submit 기능을 // 구현해 놓았다면 그대로 실행될 것이다. final HtmlPage page2 = button.click(); }
'자바(JAVA)' 카테고리의 다른 글
JSP 페이지에서 JSTL 에러 : According to TLD or attribute directive in tag file, (0) | 2010.08.02 |
---|---|
JSP 페이지에서 contentType with different values 에러가 날 때 (0) | 2010.08.02 |
input 박스에 자동 submit 막기를 위한 여러가지 방법 (6) | 2010.08.02 |
SQL Statement Log 를 보기위한 log4jdbc 사용법 (1) | 2010.08.02 |
Ajax 을 사용하여 Form 데이터를 POST 전송하고자 할 때 (4) | 2010.08.02 |
swing 으로 제작되었으며 아파치의 HttpClient 를 이용한 웹서비스에 파일 업로드하기 (7) | 2010.07.30 |
아파치에서 배포하는 HttpClient 3.x 를 이용해 네트워크 데이터 전송 (5) | 2010.07.30 |
JAVA 에서 데이터 교환을 위해 JSON 사용하기 (0) | 2010.07.20 |