Hudson 에서 Python project 사용하기
Hudson은 공개된 Coninunous Integration 시스템 중에 가장 잘 만들어진 시스템인것 같습니다. CruiseControl 은 설정하기가 조금 까다롭고, Reporting 이 좀더 뛰어난 상용 소프트웨어인 Bamboo같은 것도 있지만 Hudson 에게 부족함은 크게 없습니다.
이 Hudson 을 Python 프로젝트와 함께 사용하기 위해서는, 단순하게는 PyAntTask 를 사용하면 ANT task 에 Python compile/test/coverage 등을 포함시킬 수 있습니다. 하지만 아쉽게도 Python unittest 는 JUnit과 달리 여러 CI 시스템에서 Reporting에 사용되는 XML 파일을 생성해 내는 기능이 없습니다.
이 문제를 위해 Python unittest 에 xml output 을 생성하게 하는 벙법은 크게 두가지 젇도가 있습니다. 하나는 unittest 의 기본 test runner 인 TextTestRunner 대신에 다른 XmlRunner를 사용하는 방법입니다. 또 다른 방법은 NoseXUnit을 사용하는 것이죠.
사용하기는 XmlRunner가 쉽지만, NoseXUnit이 테스트가 실패한 경우 이메일 Notification에 포함되는 Console 메시지를 그대로 보전하기 때문에 CI 시스템과 결합하기에는 더 좋습니다.
아래는 NoseXUnit 을 사용해서 PyUnit 으로 xml output 을 생성해 내는 ANT build 파일 입니다.
<target name="test" depends="compile" >
<delete dir="${reports.test.dir}" />
<exec executable="nosetests" failonerror="true">
<env key="PYTHONPATH" value="${test.dir}" />
<arg value="--with-nosexunit" />
<arg value="--search-test" />
<arg value="--core-target=${reports.test.dir}" />
<arg value="${test.dir}" />
</exec>
</target>
test.dir 은 unittest 파일들이 있는 root path 입니다.
reports.test.out 은 xml 이 생성되는 path로 여기에 설정된 Path 와 Hudson 의 Notification JUnit result 의 path 를 만드시 일치 시켜줘야 합니다.

그러면 Hudson 의 dashoboard 에 아래와 같은 Test Trend 결과를 보여줍니다. 그래프가 썩 아름답지는 않습니다.;;

Hudson 버그인지 의도한 것인지 알 수 없지만, Test Trend Chart는 한번이라도 모든 테스트가 전부 패스하지 않으면 Graph 가 생성되지 않습니다. 그래서 실패하는 테스트가 있는 진행중인 프로젝트를 Hudson에 등록할 때는 모든 테스트를 성공하게 한 후 등록을 하거나, 실패하는 테스트는 일단 주석처리 해놓고 등록을 하는 것이 좋습니다.
Hudson 은 현재 여러개의 프로젝트를 비교해서 전체적인 Test Trend 를 보여주는 기능이 없어서 PyChart 를 이용해 따로 만들고 있는데, 덩달아 프로젝트의 line 수, test 개수, test 증가 정도 등을 고려하여, 주간/월간 Best 프로젝트도 선출할 수 있지 않을까 하는 생각을 해봅니다.
근데 막상하려니, 고려할 사항들이 너무 많아서 프로젝트 Award 기능은 다음 기회에 ㅎ.

1 개의 댓글:
우리도 Hudson 쓰는데 가장 직관적이고 편한 듯 - chan
댓글 쓰기 |