jacoco를 활용해 테스트 커버리지를 측정하고 해당 측정 값을 소나클라우드로 전송해 소나클라우드 상에서도 테스트 커버리지를 함께 다룰 수 있는 방법을 소개하려고 한다.
TO BE
1. 전체 흐름
먼저 작업을 들어가기 전에 전체 작업 맥락은 다음과 같다.
jacoco를 통해 테스트 커버리지를 측정하고 측정 값을 xml 파일로 저장한다.
프로젝트 test 실행시 jacoco 테스트 커버리지가 측정 되며 지정된 경로에 xml 파일로 결과가 저장된다.
저장한 xml 파일을 소나클라우드로 전송한다.
소나클라우드에서는 해당 값을 활용해 테스트 커버리지 값을 매핑하고 다른 정적 검사 지표들과 함께 노출시킨다.
필자는 ci 스크립트를 활용해 main, develop 브랜치로 풀리퀘를 보낼 때 소나클라우드 검사 결과가 comment와 같이 뜨도록 설정하고자한다.
또한, 예시 코드는 코틀린으로 사용 중인 언어에 맞게 아래 코드들을 수정해 사용하면 된다.
2. jacoco 연동
jacoco란?
자바 코드 커버리지 측정 오픈 소스 라이브러리
build.gradle에 관련 연동 정보 추가
plugins {
id("jacoco")
}
멀티 모듈 사용 중으로 subprojects 블록에 아래 jacoco 관련 설정 내용을 추가해준다.
subprojects {
apply(plugin = "jacoco")
tasks.test { //test 실행 시 jacocoTestReport 실행
finalizedBy(tasks.jacocoTestReport) // report is always generated after tests run
}
tasks.jacocoTestReport {
dependsOn(tasks.test) // tests are required to run before generating the report
reports {
xml.required.set(true) // xml 설정
xml.outputLocation.set(File("$buildDir/reports/jacoco.xml")) //xml로 output
}
classDirectories.setFrom(
files(
classDirectories.files.map {
fileTree(it) { // 테스트 커버리지 측정 제외 목록
exclude(
"**/*Application*",
"**/*Config*",
"**/*Dto*",
"**/*Request*",
"**/*Response*",
"**/*Interceptor*",
"**/*Exception*"
//필요한 제외 목록 더 추가하시면 됩니다.
)
}
}
)
)
}
}
test 실행 시 jacocoTestReport가 실행된다.
해당 결과 레포트를 xml로 받으며 파일의 저장 위치를 지정해줬다.
이때, 테스트 커버리지 측정에서 제외할 목록들 또한 설정해줬다.
테스트 실행시 지정된 경로에 측정 값 잘 저장되는 거 확인 가능
3. 소나클라우드 가입 및 설정
소나클라우드에 가입하여 자신이 작업 중인 조직과 레포지토리를 생성한다.
quality gate 생성을 통해 팀원들과 test coverage 통과 비율과 같은 수치들을 논의해 생성 후 프로젝트와 매핑하면 된다.
생성안할시 sonar way가 기본 디폴트 quality gate이며 해당 값들은 아래와 같다.
소나클라우드는 기본적으로 자동 검사를 지원한다. 필자는 ci 스크립트를 통해 분석할 것이기 때문에 자동 검사 옵션을 꺼줘야한다.