Whiteship's Note


웹 통합 테스트 프레임워크 개발 중

모하니?/Coding : 2009.05.14 23:10


웹 통합 테스트를 지시 받고, 몇일 전 삽질부터 시작해서 오늘까지 조금 열심히 달렸습니다. 오늘은 오후 6시쯤 되니까 머리가 아파서 더 못 앉아 있겠더군요. 아침에 오자마자 만들기 시작해서 조금 하다 보면 오후 1, 2시가 금방 되고, 그러면 밥 먹고 나서 또 조금 하다 보면 4, 5시가 되고, 또 조금 하다 보면 7, 8시가 되니까 하루가 정말 짧더군요. @_@

아직도 많이 손봐야 하지만, 이제 조금 윤곽이 잡혔습니다.
@RunWith(WebTestRunner.class)
@WarConfiguration(appName="springsprout")
@DataConfiguration(dataType=DataType.XML, location="integration/sample/testData.xml")
public class IndexPageWebTest {

    @WebTest
    public void sample(){
        WebDriver driver = new HtmlUnitDriver();
        driver.navigate().to("http://localhost:8080/springsprout/index.do");
        assertTrue(driver.getTitle().equals("SpringSprout"));
    }

}

WebDriver를 이용한 초간단 웹 테스트 코드입니다. 이렇게 설정한 다음 테스트를 실행하면..
1. 현재 프로젝트를 WAR 패키징을 합니다.
2. 생성한 WAR를 테스트용 톰캣 서버에 springsprout 컨텍스트 패스로 배포합니다.(maven/tomcat6x/webapp/springsprout)
3. 배포가 잘 됐으면, 테스트 데이터를 넣어줍니다.
4. 이제 테스트를 실행합니다.
5. 테스트 데이터를 삭제합니다.
6. 앞서 배포한 WAR 파일을 undeploy 합니다.

여기서 4번에 해당하는 코드만 작성하면 됩니다. 나머지는 애노테이션만 붙여주면 되죠. 테스트 케이스 마다 서버를 켰다 껐다 하는 건 좀 무리고, WAR만 그때 그때 배포하도록 했습니다.

@RunWith(WebTestRunner.class)
@WarConfiguration(appName="springsprout")
@DataConfiguration(dataType=DataType.XML, location="integration/sample/testData.xml")
public class IndexPageWebTest {

    @WebTest
    public void test1(){
   
    }
   
    @WebTest
    public void test2(){
       
    }

}

이렇게 테스트를 하나 더 추가하면? WAR 배포 이후에 두 개의 테스트를 모두 실행한 다음에 WAR를 unploy합니다.

약간의 변화를 줄 수 있습니다. 테스트 데이터 입력이 필요 없다면, @DataConfiguration을 생략해도 됩니다. 그리고 테스트 서버 포트를 기본으로 8080을 사용하는데, 그 값을 @WarConfiguration의 port 속성에 줄 수 있습니다. 그럼 해당 포트에 배포를 시도하죠. 물론 그럴 때 해당 포트에 서버가 실행되고 있지 않다면, debug 모드의 로깅과 적절한 이름의 RuntimeException이 발생합니다.

꾸준히 가꿔야겠지만, 이제 내일 부터는 이녀석을 이용해서 본격적으로 웹 통합 CRUD 테스트를 만들고, CI를 해보려고 합니다.

얘 때문에 조금이라도 뒤적여 본 것들은 다음과 같습니다.
- JUnit 4.6
- Spring Test
- Cargo
- DBUnit
- WebDriver
- Maven Surefire Plugin
- Appfuse
- Maven Embedder

지난주 금, 월, 화, 수, 목.. 거의 일주일이네요.
개발이 참 더디고 어설프네요. ㅎㅎ 갈 길이 멀었습니다. @_@
top

  1. Favicon of http://mckdh.net BlogIcon 산골 2009.05.15 10:36 PERM. MOD/DEL REPLY

    옷..기선님 평소 웹화면 테스트 방법이 난해하여 항상 웹은 삽질 하곤하는데요..
    저 프레임워크 혹시 공개가능한건가요? 회사 꺼라 안될라나~... ^ ^;

    Favicon of https://whiteship.tistory.com BlogIcon 기선 2009.05.15 11:42 신고 PERM MOD/DEL

    지금은 아직 공개할 만큼 다듬질 못했구요.
    쓸만해지는 즉시 공개할 생각입니다.

    아... 이미 공개되어 있는 상태나 다름없네요.
    기트허브에서 springsprout를 받아보세요.ㅋㅋ
    git://github.com/whiteship/springsprout.git

  2. Favicon of https://yangwansu.tistory.com BlogIcon 양완수 2009.05.28 12:17 신고 PERM. MOD/DEL REPLY

    사용자스토리가 없어서 인지 어지럽네요 ㅜㅜ

    Favicon of http://whiteship.me BlogIcon 기선 2009.05.28 13:52 PERM MOD/DEL

    넹 ㅎㅎ 사용자 스토리는
    http://whiteship.me/2237
    http://whiteship.me/2238
    http://whiteship.me/2239
    이 녀석들로 대체 할 수 있을지 모르겠습니다.

Write a comment.


AppFuse2 샘플 코드 실행하기

AppFuse : 2007.11.02 17:37


0. Java, MySQL, Maven 설치

Maven 설치는 압축파일을 다운 받고 압축을 풀고, bin 디렉토리를 Path 환경변수에 추가해주면 됩니다.

1. Spring Archetype 실행하기

mvn archetype:create -DarchetypeGroupId=org.appfuse.archetypes -DarchetypeArtifactId=appfuse-basic-spring -DremoteRepositories=http://static.appfuse.org/releases -DarchetypeVersion=2.0 -DgroupId=com.mycompany.app -DartifactId=myproject

위 명령을 콘솔창에서 실행합니다. 그럼 프로젝트 기반이 마련됩니다.

커맨드 창에서 Ctrl + V 가 먹지 않을 때,
텍스트 파일을 만들어서 위의 명령을 저장하고, 텍스트 파일의 확장자를 bat로 변경한 다음에 콘솔 상태에서 실행하면 됩니다.

2. DB 설정 변경하기

생성된 프로젝트 기반 폴더로 이동하면, pom.xml 파일을 볼 수 있습니다. 이 파일의 제일 하단에 DB 설정이 있습니다. 그곳에 자신의 MySQL root 계정 정보로 수정해 줍니다.

3. mvn 실행하기

pom.xml 파일이 위치한 곳에서 mvn 명력을 실행합니다.
대략 30분정도 jar 파일을 다운로드하기 시작합니다. 세월아 내월아 기다리시면 됩니다.

제 경우에는 정말로 딱 30분이 됐을 때, Tomcat 6.0 관련 jar파일을 받다가 에러가 나서 멈췄습니다.
다행인지.. 불행인지...;;

4. 프로젝트 실행하기

mvn jetty:run-war 를 실행합니다.

이런 또.. Jar 파일을 받기 시작합니다.
이번에는 한 5분정도 jar파일들을 받더니 server가 동작하는 메시지가 보였습니다.

사용자 삽입 이미지

5. 브라우저로 확인하기.

http://localhost:8080
접속해 봅니다.

사용자 삽입 이미지
오오... 귿!!!

엄청나게 오랫동안 수많은 Jar파일들을 받은 보람은..... 있었습니다.

사용자 삽입 이미지
관리자는 admin/admin
일반 사용자는 user/user

깔끔한 화면이 마음에 드네요.

참조 : http://appfuse.org/display/APF/AppFuse+QuickStart

'AppFuse' 카테고리의 다른 글

AppFuse2 샘플 코드 실행하기  (2) 2007.11.02
top

TAG AppFuse
  1. Favicon of http://openframework.or.kr/blog/ BlogIcon 이동국 2007.11.03 01:10 PERM. MOD/DEL REPLY

    오.. 한글이 나오는군요.. ㅋㅋ

    Favicon of http://whiteship.tistory.com BlogIcon 기선 2007.11.03 09:40 PERM MOD/DEL

    네. 국제화 지원 기능이 구현되어 있는 예제였습니다.
    상당히 많은 수의 프로퍼티파일을 볼 수 있었습니다.

Write a comment.