영호
[Junit] 병렬 실행을 통해 빌드 시간 단축해보기 본문
들어가면서
평소 길어진 빌드 시간을 개선하기 위해 방법을 찾아보다가 Junit 병렬 실행에 대해 알게됐고 이를 적용해봤습니다. 이 글에서는 Junit 병렬 실행 설정을 통해 테스트 실행 시간을 줄인 방법에 대해서 작성해보려고 합니다.
설정 방법
junit-platform.properties 파일을 생성해서 병렬 실행 설정을 해주면 됩니다.
junit.jupiter.execution.parallel.enabled=true
junit.jupiter.execution.parallel.mode.classes.default = concurrent
junit.jupiter.execution.parallel.config.strategy=fixed
junit.jupiter.execution.parallel.config.fixed.parallelism=6
매우 다양한 설정 옵션이 있지만, 저는 위 설정으로 진행했습니다.
우선 junit.jupiter.execution.parallel.enabled=true
이 설정을 통해 병렬 실행을 허용해줍니다.
junit.jupiter.execution.parallel.mode.classes.default = concurrent
이 설정을 통해 각 클래스 파일들을 기본적으로 병렬 실행으로 설정해줍니다.
junit.jupiter.execution.parallel.config.strategy=fixed junit.jupiter.execution.parallel.config.fixed.parallelism=6
이 2가지 옵션은 병렬로 수행할 스레드 개수를 설정한 것입니다. 저는 6개의 스레드로 병렬 수행하도록 설정했습니다.
그 이유는 싱글 스레드로 돌아가야 하는 부류의 클래스들이 3개 있었습니다. (인수 테스트, 컨트롤러 테스트, docs 테스트) 이 클래스들은 각각 싱글 스레드로 돌리고, 나머지 클래스들은 남은 3개의 스레드를 통해 병렬 수행하기 위해서였습니다.
주의점
다만 Junit 을 병렬로 실행할 때는 thread-safe 한 코드들만 병렬로 수행해야 합니다. 예를 들면 RestAssured를 이용하는 인수테스트의 경우 병렬로 실행하면 동시성 문제로 인해 테스트에 실패하게 됩니다.
이 경우 싱글 스레드로 돌려야 하는 클래스에 @Execution(ExecutionMode.*SAME_THREAD*) 어노테이션을 붙여 싱글 스레드로 동작하도록 설정할 수 있습니다.
@Execution(ExecutionMode.SAME_THREAD)
@SpringBootTest(webEnvironment = RANDOM_PORT)
public abstract class AcceptanceTest { ... }
결과
제 로컬(인텔 맥) 에서 빌드 시간이 1분 9초 에서 45초 줄어들었습니다.
병렬 실행 X
병령 실행 O
더 다양한 옵션은 공식문서에 있습니다~
'Test > JUnit' 카테고리의 다른 글
[JUnit5] isSameAs, isEqualTo 차이 (0) | 2022.06.13 |
---|---|
[JUnit] JUnit5 예외 테스트코드 작성(assertThrows) (0) | 2022.05.16 |
[JUnit] JUnit, Assertj 프로젝트 생성 with 인텔리제이 (0) | 2022.05.15 |
[JUnit] JUnit, Assertj 설정, 테스트코드 작성 (0) | 2022.05.15 |