반응형
이번 포스팅에선 Kotest로 작성한 테스트를 병렬로 실행하는 방법에 대해 알아보겠다.
Kotest 병렬 테스트 설정 방법
AbstractProjectConfig를 상속받은 클래스를 만든 후 parallelism level을 설정해서 테스트를 몇 개씩 동시에 실행할 건지 설정할 수 있다.
class KotestProjectConfig : AbstractProjectConfig() {
override val parallelism = 3
}
병렬로 실행되는 단위는 Spec 단위다.
병렬로 실행한다고 해서 @SpringBootTest, @DataJpaTest 테스트를 돌릴 때 애플리케이션이 테스트마다 올라가지 않으니 걱정 안 해도 된다.
병렬 테스트 예제
먼저 parallelism 설정을 하지 말고, 아래와 같은 테스트를 똑같이 복사해서 이름 뒤에 2, 3을 붙여준 뒤 테스트를 돌려보자.
class ThreadSleepTest : DescribeSpec({
describe("Thread.sleep") {
context("2초간 sleep을 하면") {
val now = LocalDateTime.now()
Thread.sleep(2000)
it("2초 후에 테스트를 실행한다.") {
LocalDateTime.now() shouldBeGreaterThanOrEqualTo now
}
}
}
})
parallelism을 설정하지 않아 테스트마다 2초씩 걸리는 걸 볼 수 있다.
parallelism을 3으로 설정하고 돌려보자.
class KotestProjectConfig : AbstractProjectConfig() {
override val parallelism = 3
}
한 번에 테스트 3개가 병렬로 실행된 걸 볼 수 있다.
아마 위까지만 설정하고 parallelism을 아무리 크게 늘려도 속도가 개선되지 않는 문제가 있을 거다.
concurrentSpec를 추가하자. 값은 Int.MAX_VALUE로 주자. 신세계를 경험할 수 있다.
class KotestProjectConfig : AbstractProjectConfig() {
@ExperimentalKotest
override val concurrentSpecs = Int.MAX_VALUE
override val parallelism = 8
}
특정 테스트는 병렬로 돌리고 싶지 않다면?
모든 테스트를 병렬로 돌리로 싶지 않을 수도 있다. 그럴 땐 @DoNotParalleize를 붙여주면 된다.
typealias로 정의된 걸 사용하면 된다.
@DoNotParallelize
class ThreadSleepTest : DescribeSpec({
...
})
적절한 parallelism level은?
사실 이건 정확하게 모르겠다. cpu 코어 수에 따라 달라지기 때문에 조금씩 조정하면서 테스트를 해보는 게 좋겠다.
반응형
'Spring' 카테고리의 다른 글
[Spring] Spring Boot + Kotlin + MyBatis 프로젝트 설정 방법 (3) | 2024.03.26 |
---|---|
[Spring] 재시도할 때 사용하는 @Retryable, @Recover 사용법 (1) | 2024.02.26 |
[Spring] Gradle Test events were not received 해결 방법 (21) | 2023.12.28 |
[Spring] Kotest와 Mockk를 사용할 때 주의할 점 (26) | 2023.12.26 |
[Spring] Kotest DescribeSpec, BehaviorSpec에서 Isolation Mode에 따른 동작 방법 알아보기 (2) | 2023.12.25 |
댓글