everydayminder

learn something everyday

Posts Tagged ‘TEST

hudson – emma와 연동하기 (2/2)

leave a comment »

지난 글에 설정한 바대로 ant task를 정상적으로 진행했다면,
ant task로 emma.report 태스크를 수행했을 때, coverage.html과 coverage.xml이 생성되었을 것이다.

참고로, 생성된 coverage.html을 살펴보자.


해당 패키지의 구성중, 클래스/메소드/블럭/라인 기준으로 어느 정도가 test로 커버 되고 있는지를 보여준다.
패키지 이름을 클릭하면,

패키지에 포함된 클래스들이 나타나고, 이 클래스들이 어느 정도 test로 커버되고 있는지 보여준다.
이 중, 아무 클래스나 또 클릭하게 되면,


클래스내의 메소드들이 test로 어떻게 커버되고 있는지 현황을 자세하게 보여주게 된다.

이 결과물은, 별도의 ant task를 수동으로 실행시켜 얻은 결과물이므로,
이제 hudson의 task에 연동하여, 자동으로 build가 되면 emma test를 수행하자.

그러면, hudson이 매 빌드마다 결과물을 자동으로 생성하여 dashboard로부터 볼 수 있도록 설정할 것이다.

“Hudson 관리 > Manage Plugins”를 클릭한다.
Available 탭을 클릭하여 살펴보면,


과 같이, Emma plugin 설치에 대한 체크박스가 있다.
이를 체크하고, 우측 하단 구석에 숨어있는 “Install” 버튼을 클릭하자.

성공적으로 Emma plugin을 설치했다면,
다음 화면을 보게 될 것이다.


설명 문구에 뜬 내용처럼, hudson을 재시작시켜 emma plugin이 정상 동작하도록 하자.
hudson에 다시 접속해보면, 외형상 변화는 아무 것도 나타나지 않는다.
(이제부터 hudson에 emma 설정을 해야 하니까)

프로젝트명을 클릭하고, Configure를 선택한다.
Post-build Actions 부분에 “Record Emma coverage report”가 생성된 것을 확인할 수 있다.
이 체크박스를 클릭하면, 세부 설정 화면이 생긴다.


예전에 ant task로 테스트 했을 경우 coverage.xml이 생성된 경로를 기억하는가?

XML report 경로를 넣는 곳에,
프로젝트이름/report/emma/coverage.xml 등과 같은 형식으로 기록해 준다.
Health reporting은 그냥 디폴트 값으로 사용하기로 한다. 즉, 비워두면 디폴트값이다.

아직 emma report를 생성하는 ant task가 동작하도록 설정하지 않았기 때문에,
build 되더라도 emma report가 자동으로 생성되지는 않을 것이다.

따라서, Post-build Actions 위쪽에 있는 Build > Invoke Ant 옵션을 고치자.

Targets에

all.emma.report

라고 써주고, build.xml에 all.emma.report를 추가해 보자.

<!-- target : all with emma.report -->
	<target name="all.emma.report" depends="clean,emma.report" 
		description="builds the project, excutes tests, and writes emma report"/>

이제, 해당 프로젝트의 왼쪽 메뉴탭을 보면,


와 같이, Coverage Report가 생성됨을 확인할 수 있다.
이 Coverage Report를 클릭해보자.


coverage trend를 표시하는 그래프가 graphics로 나타나는 것을 확인할 수 있다.
이 화면에서도 패키지명을 클릭해 보자.


임의의 클래스도 클릭해보자.

사실, 내용은 앞서 살펴보았던 html과 다를 것이 없다.
다만, 별도의 ant task를 사용자가 실행하지 않아도, 소스를 수정후에 SVN 서버에 commit 하는 것만으로도 충분하다는 것이다.

지금까지 한 작업은 다음의 과정을 자동화한다.

* 소스를 개발/수정 후 commit하면,
* 자동으로 소스를 컴파일하고,
* 테스트 코드도 컴파일해서 테스트를 시행하고,
* 테스트 결과를 보여준다.
* 또한 이 테스트의 적용 범위(coverage)가 어느 정도인지 검사해준다.

이로써, hudson에 ant task를 활용하여 emma를 연동해 보았다.

Written by everydayminder

July 19, 2010 at 01:29

Posted in tools

Tagged with , , , , , ,

hudson – JUnit 테스트 추가하기

with 2 comments

소스의 품질을 높이기 위해, Junit을 사용하여 테스트를 자동화 하자.

본 포스트에서는 hudson에 junit 테스트를 태스크로 선언하여 빌드시 테스트를 실시하고, 그 결과를 hudson으로 리포트 하도록 설정하고자 한다.

hudson에 등록한 프로젝트로부터 configure를 설정하면, 하단에


와 같이 Junit 테스트 결과를 리포트하겠다는 항목이 있다.

이 기능을 사용하기 위해, 기존에 선언한 build.xml (ant script)에 Junit 테스트 컴파일/ 수행을 하도록 추가할 것이다.
물론, 본인이 작성한 코드를 기반으로 Junit 코드들이 작성되어 있어야 한다.

JUnit 테스트를 수행하고 리포트를 생성하기 위해, 기존에 작성한 build.xml을 다음과 같이 task를 추가한다.

test-compile task는 다음과 같다.

	
	    
	    
		
			<!---->
			
			
				
			
		
	    

test task는 다음과 같다.

	
		
		
			<!---->
			
				
			
			
			<!--  -->
			

			
				
				
			
		

		
			
				
			
			
		
	

참고) 위의 task를 추가하면서 설정한 환경 변수 등은 posting에서 제외하였음

이와 같이 설정하면, hudson에 연동된 프로젝트 task로 기본 소스 컴파일 및 테스트 코드의 실행/ 리포트를 생성하게 된다.

Hudson/Configure에서 JUnit의 report를 입력하는 곳에 “프로젝트명/report/junit/TEST*.xml “의 형태로 입력하고, 저장한다.

다음 빌드 후에, Test Result라는 항목을 왼쪽 메뉴에서 발견할 수 있다.

Test Result를 클릭하면, 테스트 케이스 및 그 결과를 상세하게 볼 수 있을 것이다.
(아직은 초기 예제로 올렸으므로 거의 모두 실패 -_-)


이로써, Hudson에 JUnit 테스트를 연동하고, test report까지 생성하도록 하였다.

이제, 대쉬보드에는 다음과 같은 테스트 결과가 나타날 것이다.

그런데, 이 트렌드는

  • 몇 개의 테스트 케이스를 수행하는가?
  • 그 중 몇 개가 성공이고, 몇 개가 실패인가? (그 변화 추이는?)

를 나타낼 뿐이다.

그런데,  테스트를 자동으로 수행하지만 이 테스트들이 얼마나 의미 있는 테스트인지는 단순히 테스트의 개수만으로는 알 수 없을 것이다. 즉, 테스트 케이스의 개수가 아니라, 테스트 케이스가 실제 소스의 어느 정도를 테스트할 수 있는지 coverage를 확인해야 보다 의미있는 테스트가 될 것이다.

다음에는 Emma를 적용하여, 테스트의 coverage를 측정하도록 하는 설정을 할 것이다.

Written by everydayminder

July 7, 2010 at 09:34

Posted in tools

Tagged with , , ,

Twitter4J 설치/테스트

leave a comment »

Twitter API는 http://apiwiki.twitter.com/ 에서 세부
정보를 찾아볼 수 있다.

합병되기 전/후의 두 개의 회사가 연관되어 있어, 두 개 (혹은 세 개)의 API 그룹으로 구성되어 있다.

HTTP 기반의 프로토콜인데, 여러 언어로 라이브러리가 공개되어 있다.

그 중, java로 공개된 라이브러리로는 Twitter4J, java-twitter, jtwitter 등이 있으며,

사용자 층이 두텁고, 업데이트가 최근까지 가장 활발한 Twitter4J를 선택하여 일부 메소드를 테스트해 보았다.

1. Twitter4J의 공식 사이트 : http://twitter4j.org/

2. Twitter4J의 활용예 (* YouTube 동영상 참조 : http://www.youtube.com/watch?v=2-iz5CduZdw)

  * 위의 예는 NetBeans를 활용한 예임

3. 설치하기(on Eclipse)

  • 위의 사이트에서 해당 라이브러리를 다운로드한다.

  • 다운받은 파일을 적당한 곳에 압축해제한다.

  • Eclipse에서 새 프로젝트를 하나 생성한다. 예 : TwitterTest

  • Runtime Library로 twitter4j-core-2.1.3-SNAPSHOT.jar와
    twitter4j-httpclient-support-2.1.3-SNAPSHOT.jar를 설치한다.

4. 특이사항

  • 위의 동영상에는 나와 있지 않았고,  위의 설치과정 후 테스트 코드를 간략하게 작성하여 실행하였을 때 추가적으로 필요한
    라이브러리가 있는 것으로 확인함
  • apache 사이트로부터 다음 파일들을 별도로 구한 후, runtime library build path에 추가한다.
    • httpcomponents-client-4.0.1-bin.zip (이 속에 있는 모든 jar)
    • httpcomponents-core-4.0.1-bin.zip (이 속에 있는 모든 jar)
    • apache-mime4j-0.4.jar
    • commons-loggin-1.1.1.jar

5. 테스트

  • 나의 timeline 가져오기
twitter = new TwitterFactory().getInstance("yourid", "yourpassword");
List statusList = twitter.getFriendsTimeline();
System.out.println("");
for(Status status : statusList) {
    System.out.println(status.getUser().getName() + ":" + status.getText());
}

[결과]


오상영:twhirl (windows용)에서는 검색어 입력에 한글이 되지 않는 것 같네요. 방법이 따로 있나요?
유시민:오늘점심은피자시켜먹었어요. 떨어진사람이식당돌아다니면서 인사받기도민망하고 왠지좀그래서^^;;;;;;
Kyuhwan Yun:@HeyMrJee 요즘 모기들이 진화하고 있나봐요 ㅎㅎ
유시민:자꾸무효표논란이있고 누가찍었니안찍었니 얘기들이나오니 마음이무거워서 긴글하나올렸습니다.
너무길어서트윗에는못썼어요.www.usimin.net에올렸어요
Kyuhwan Yun:@kicu2000 오늘 아침 스포츠 뉴스에서 스페인 1.5군이 출전했다고 했음 ㅋ
오상영:김연아 금메달을 국제기록문화전시회에서 보고 왔습니다. http://yfrog.com/0diavvj
JK Jee:http://bit.ly/dx5eQK “방송사에서는 물고기를 방류하는 현장 화면을 찍지 못해 보도를 못한다고 말한다.
그럼 천안함 사건의 경우 어뢰가 터지는 순간을 방송사 기자들이 직접 봐서 관련 보도를 내보내고 있느냐.”
김주하:성적에 상관없이 우리모두 하나됨이 더욱좋죠^^ 바램은 우승! ㅎㅎ RT @talkeee: @kimjuha 이번 월드컵
한국대표팀 성적 예상 어떻게 하시나요 ^^
최용석:아…넵 허승준님 반갑습니다…즐거운 주말보내세요…^^ RT @SJHuh: @myclex 어제 인사드린 허승준입니다 ^^ 강연
잘 들었습니다. 지나치게 편안한(응?!!) 분위기 속에서의 강연이라 힘드셨을 … http://dw.am/L2zCi
김주하:계정을 선물받고 시작했어요. RT @MobiusHolic: @kimjuha 김주하아나운서님은 어떤계기로 트위터를
시작하신건가요?
JK Jee:@kyuhwany 예리한 모기인걸…
김주하:네. 예전 PC 통신시절에 바로만나자는 것을 번개라고 @kimseongjoo 님께서 시작하셨다고 알고 있습니다. RT
@Ruingarden: @kimjuha 혹시 번개라는 단어가 어떻게해서 나왔는지 아세요? 하늘에서 내리는 번개말구요ㅋㅋ갑자기
궁금해져
Autodesk Korea:[이벤트] 솔루션데이행사 http://durl.kr/mg9y 를 RT & 행사등록 회원ID를
보내주신 10분께 달콤쌉사름한 던킨교환권(6천원)을 드립니다! 마감6시/발표6시반! #autodesk_event
CNN Breaking News:BP positioning cap over ruptured well in Gulf of
Mexico. Watch live http://live.cnn.com/
Autodesk Korea:[이벤트 예고] 솔루션데이 3번째 트윗이벤트 공지합니다! 던킨도너츠 교환권 10분의 주인공은
누구일까요? 두둥~이벤트는 11시에 소개되고 당첨자는 6시반 발표!~많은 참여부탁드려요~#autodesk_event
YONG HO LEE:@HeyMrJee 축구 스페인이 1.5가 출전한 느낌이~~ ㅎㅎ
김주하:아닙니다!! 모꼬지 신청하시면 @twtbs에서 DM 으로 안무 영상 보내드려요. RT @ehdwnek: @kimjuha
주하님~똑같이하는거에요??도레미송으루?? ㅋ
김주하:제 춤이 그리 보고싶으세요? ㅠㅠ RT @ROSAinSeoul: @kimjuha 네! 받은지 이틀정도되었어요 밥먹고
소화시키면서 연습했는데요 한번만해도 헥헥 아나운서님도 그간 바쁘셨으니 오늘 맹연습 하셔야죠^^ 자봉만하지 말고 함께해요!^^

  • DirectMessage 보내기
Place p = twitter.getGeoDetails("thatseeyou");
System.out.println("name:" + p.getName() + ",country:" + p.getCountry() + ",fullname:" + p.getFullName() +
    ",placetype:" + p.getPlaceType() + ",street address:" + p.getStreetAddress() + ",URL:" + p.getURL());

[결과]

오과장님이 수신 확인해 줌

  • GeoQuery 하기
GeoQuery gq = new GeoQuery("74.125.71.104");     // 74.125.71.104 : google.com
ResponseList list = twitter.getNearbyPlaces(gq);
for(Place p : list) {
    System.out.println(p.getFullName());
}

[결과]

San Jose, CA
Fremont, CA
Palo Alto, CA
West Santa Clara, CA

  • Search 하기
Query query = new Query("김연아");
QueryResult result = twitter.search(query);
List tweetList = result.getTweets();
for(Tweet tweet : tweetList) {
    System.out.println("[" + tweet.getFromUser() + "] : " + tweet.getText());
}

[결과]

    [Last.fm] 이승기 – Smile Boy (Rock Ver.) (with 김연아): http://www.last.fm/music/%EC%9D%B4%EC%8A%B9%EA%B8%B0 http://bit.ly/9xoB1x
    [khmer365] : [MV HD]Lee Seung Gi (이승기) & Kim Yuna (김연아) – Smile Boy (스마일 보이): <!– // –><![CDATA[
    var oldLoad = window… http://tinyurl.com/2uo8byc
    [cathrinepark] : http://sori.la/567Sx ♥ 승리의 함성 (The Shouts Of Reds Part 2) (Featuring 김연아)-빅뱅 #soribada
    대~~ 한민국 승리의함성
    [anidia80] : @WizardJinny 김연아 식단..
    [meisiank] : #nowplaying The Shouts Of Reds Part 2 (Feat. 김연아) ♪ Bigbang ft Trans Fixion http://bit.ly/b9lPi1 via @twitbird
    [chacannara] : @refreshmyself 이쁘니 왔네?! 김연아… 비싸지…
    [zzambo] : fallowing 김연아
    [jedicat1] : ^^ 대박.뭐라 말할 수 없음 ..RT @daidai4141: RT @nubesradi: RT @gomdal: 아놔 ㅋㅋ RT @Jooru: ㅋㅋ RT @JunorArt: ㅋㅋ 김연아 코스프레 랰ㅋㅋ 촘 쩌네요 ㅋㅋ http://j.mp/dydJPu
    [nanibasuki] : Check this video out — [MV HD]Lee Seung Gi (이승기) & Kim Yuna (김연아) – Smile Boy (스마일 보이) http://youtu.be/_S1mvnOK2aY
    [RudyWorld] : @LovelyGumiii 야 김연아
    [kkakjangee] : [MV] 김연아 & 이승기 – Smile Boy http://goo.gl/yEKG
    [stickjin] : #nowplaying
    빅뱅 @BigBangOfficial ♪ 승리의 함성 (The Shouts Of Reds Part2) (Feat. 김연아)
    – YouTube http://tln.kr/5ltr
    [lunasaur] : ♥ 승리의 함성 (The Shouts Of Reds Part 2) (Feat. 김연아) by 빅뱅(Bigbang), 트랜스픽션(Trans Fixion) #lastfm: http://bit.ly/bo6nID
    [YuNarsha] : @anicheng @TrendReportFil 김연아 선수의 트위터는 @Yunaaaa 가 맞습니다. =)
    [Yellsvan] : RT @eunmars: @keybaksa @jaed74 @lec3660 @baekban @rosepeche @ad1gio  김연아 방송 결방이 결실을 맺기를 바랍니다. ;

6. 기타

  • 다음의 링크를 보면, Twitter API로 할 수 있는 일들을 예상할 수 있을 것임 (http://twitter4j.org/en/javadoc/index.html)

    예) Tweet 읽기/쓰기, 친구 목록 가져오기, Follower 가져오기, 위치정보 가져오기, Trend 조회, DM
    발송/조회, 스팸 처리, 타임라인 조회, Status 조회 등

Written by everydayminder

June 16, 2010 at 07:21

Posted in Mashup

Tagged with , , , , ,