Controller 영역인 브라우저에서의 단위테스트를 위한 HtmlUnit 사용하기
2014. 5. 12. 11:02 from Working, Studying, 잡다구리보관소/IT, Science개발환경 : 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(); }
http://mainia.tistory.com/529
'Working, Studying, 잡다구리보관소 > IT, Science' 카테고리의 다른 글
HtmlUnit 사용하기 (0) | 2014.05.15 |
---|---|
Htmlunit 을 이용한 Facebook 로그인, 글 등록 구현 (0) | 2014.05.12 |
나눔 웹폰트 적용하기 (0) | 2014.05.02 |
[HTML] href 와 src 의 차이? (0) | 2014.04.11 |
JSON (0) | 2014.04.09 |