Test Code 병렬 처리

최준호·2022년 10월 27일
1

업무

목록 보기
20/31
post-thumbnail

참고 junit api

😂 테스트 코드 병렬 처리에 대해

테스트 코드는 빠를 수록 좋다. 물론 정확한 실행과 결과를 가진다는 전제 하에 빠를 수록 좋다는 것이다. 테스트코드를 빠르게 만들기 위한 방법 중 하나로는 코드를 병렬로 실행하도록 하는 것인데. 이것이 class 단위의 병렬 처리를 진행할지 혹은 class 내의 method 단위의 병렬 처리로 진행할지 또는 class와 method 모두 병렬 처리로 진행할지에 대해 개발자가 고민할 수 있다.

물론 전체적으로 병렬 처리로 설정하고 각 테스트에 맞게 순차적으로 진행하도록 어노테이션을 추가해준다면 해당 테스트 클래스만 순차진행할 수 있도록 설정할 수 있다.

공식 문서에서 해당 부분을 참고하자면 Lifecycle.PER_CLASS 가 적용된 부분도 제외된다.

이 점을 알고 진행하며 만약 병렬 처리시 해당 클래스와 메서드에 대해 개발자는 쓰레드 세이프하다는 것을 확인하고 진행할 것을 권장한다.

👏 문제 해결

📄 junit 설정 이해하기

junit의 경우 yml 설정은 안먹고 properties 설정만 먹는다.

모든 테스트를 병렬로 실행하기

junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent

최상위 클래스를 병렬로 실행하지만 동일한 스레드에서 메서드를 실행하기

junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = same_thread
junit.jupiter.execution.parallel.mode.classes.default = concurrent

최상위 클래스를 순차적으로 실행하지만 해당 메서드는 병렬로 실행하기

junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
junit.jupiter.execution.parallel.mode.classes.default = same_thread

위 설정 중 골라서 해도 되고 mode만 class 마다 변경하고 싶을 경우에는 어노테이션을 통해 진행할 수 있다.

만약 어노테이션을 통해 병렬 설정을 주고 싶다면 위의 설정을 진행하지 않고

클래스 내 메서드 병렬 실행하기

@Execution(ExecutionMode.CONCURRENT)

클래스 내 메서드 동일한 스레드에서 실행하기

@Execution(ExecutionMode.SAME_THREAD)

설정을 통해 진행할 수 있다.

나는 이제 모든 테스트를 병렬로 실행하도록 설정을 진행하고 만약 필요하다면 class 별로 동일 스레드에서 작동하도록 어노테이션을 통해 작성하려고 한다. 우선 properties부터 작성해보자!

📄 junit 설정

test/resources/junit-platform.properties 파일을 생성해서 위의 설정을 넣어주면 된다.

junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent

나의 경우에는 이렇게 설정했다.

그 후 필요한 부분에는

@Execution(ExecutionMode.SAME_THREAD)

설정을 통해 진행했다. 나의 경우 위 어노테이션을 사용한 곳은 통합테스트와 인수테스트 쪽이였는데 그 이유는 해당 부분들이 병렬로 실행되었을 때 db가 뜨기도 전에 실행되는 경우가 있어서 하나의 쓰레드로 테스트할 수 밖에 없었다. 정확한 이유는 나중에 찾아보는게 좋을거 같다!

👍 결과

기존의 큰 테스트 없이도 평균 35초 정도 걸리던 빌드가

20초까지 줄어든 것을 확인할 수 있었다. bdd와 병렬을 잘 이해해서 테스트 시간을 줄여버려 다른 개발자들이 더 많은 테스트를 진행할 수 있도록 도와보자!

profile
코딩을 깔끔하게 하고 싶어하는 초보 개발자 (편하게 글을 쓰기위해 반말체를 사용하고 있습니다! 양해 부탁드려요!) 현재 KakaoVX 근무중입니다!

0개의 댓글