본문 바로가기
개발/SpringBoot

Jacoco 동적 분석 테스트 및 Jenkins 연동

by 궁즉변 변즉통 통즉구 2021. 12. 8.
반응형

jacoco(Java Code Coverage) 분석 방법

테스트 코드를 잘 작성했다면 maven, gradle의 jacoco plugin을 사용해서도 테스트 커버리지를 체크 가능하지만, 어플리케이션 구동 시켜놓은 상태에서 기능들에 대해 테스트 수행을 했는지 체크하기 위해 was agent 형식으로도 jacoco를 적용가능하다.

 

1. jacoco 다운로드 

https://www.eclemma.org/jacoco/ 에서 .zip 파일 다운로드/압축풀기

lib/ 디렉토리에는 jacocoagent.jar, jacococli.jar 파일들 사용할 예정이다.

 
 
 

2. was 실행(with agent)

어플리케이션 war를 실행 할 때 jacoco관련 -javaagent 옵션을 추가형 실행한다.

java -javaagent:"/testJacoco/lib/jacocoagent.jar=destfile=/testJacoco/dump/jacoco.exec,append=true,includes=*" -jar ./spring-boot-jsp-0.0.1-SNAPSHOT.war
  • javaagent.jar 위치: /testJacoco/lib/jacocoagent.jar
  • 결과생성파일 위치 지정: /testJacoco/dump/jacoco.exec 
  • append=true : was 재기동 시 결과물 초기화 방지

 

3. 어플리케이션 기능 테스트

어플리케이션이 실행 중인 상태에서 화면 및 API 호출 등 어플리케이션 자체 기능들을 실행하면서 테스트를 진행한다.

 

4. was 종료 후 jacoco.exec 파일 생성 위치에서 jacoco.exec 파일 생성 확인

기능들을 테스트를 완료한 후 was를 내리고 어플리케이션 실행 시 설정한 jacoco.exec 파일 생성 디렉토리에서 jacoco.exec 파일의 생성을 확인한다.

 

5. jacoco cli 실행 

jacococli.jar파일을 실행해서 테스트 커버리지 리포트를 생성한다.

java -jar ./lib/jacococli.jar report ./dump/jacoco.exec \
     --classfiles ./spring-boot/target/spring-boot-jsp-0.0.1-SNAPSHOT/WEB-INF/classes \
     --html ./report --xml cov.xml
  • report : 생성된 jacoco.exec 파일경로
  • --classfiles: war의 classes 경로 설정
  • --html: html형식 결과 생성 될 디렉토리
  • --xml: xml결과 생성될 파일명

실행 후 ./report/index.html 파일 열어보면 아래와 같이 결과 확인 가능

 

6. Jenkins 연동

Jenkins 플러그인 관리에서 jacoco plugin을 설치한다.

위의 jacoco 테스트를 local에서 테스트해서 Jenkins가 설치된 서버로 local의 jacoco결과와 war파일을 업로드 했다.

 

먼저 Jenkins가 설치된 서버에 jacoco 테스트용 디렉토리 생성(/home/ec2-user/jacoco)

local에서 생성한  jacoco.exec 파일과 spring-boot-jsp-0.0.1-SNAPSHOT.war 파일을 jenkins가 설치된 서버로 업로드한다.

- jacoco.exec 파일은 /home/ec2-user/jacoco/exec 디렉토리에 업로드

- spring-boot-jsp-0.0.1-SNAPSHOT.war 파일은 /home/ec2-user/jacoco/src 디렉토리에 업로드

 

.class파일이 필요함으로 spring-boot-jsp-0.0.1-SNAPSHOT.war 파일을 압축해제한다.

jar xvf ./spring-boot-jsp-0.0.1-SNAPSHOT.war

그러면 src/WEB-INF가 생기고 이 경로는 jenkins jacoco 설정 시 활용될 것이다.

 

Jenkins Job 생성 후 '사용자 빌드 경로 사용'에 jacoco 테스트 디렉토리 설정

'사용자 빌드 경로 사용'이 2개가 있던데 위에꺼는 내용 저장이 안되서 아래에 GitLab Connection의 고급 버튼 누르면 나오는 '사용자 빌드 경로 사용'으로 세팅했다.

'빌드 후 조치 추가' 에서 'Record Jacoco Coverage report' 선택한다.

간단하게 아래 정보로 세팅하고 실행해 본다

아래같이 명시적으로 디렉토리 설정해줘도 된다. source 경로나 .java 경로는 없어도 되는듯하다.

빌드 후 빌드정보 보면 아래와 같이 Coverage Report가 생성되었다.

좌측 메뉴에 Coverage Report 클릭하면 Local에서 jacoco cli로 Report 뽑을 때 처럼 jenkins에서도 동일한 결과를 확인 가능하다.

 

반응형

댓글