관리 메뉴

JIE0025

[개선] 테스팅 빌드 속도 개선 본문

백엔드/테스트

[개선] 테스팅 빌드 속도 개선

Kangjieun11 2023. 1. 9. 03:11
728x90

 

✅ 문제 요약 

 

통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패

 

해결방안으로 @DirtiesContext를 사용했으나,

해당 어노테이션을 사용하면 전체 DB를 초기화하며 빌드 속도가 너무 느리다는 단점이 생겼음

 

 

 

개선 이전 :  총 테스트시간이 2sec, 242ms

 

https://jie0025.tistory.com/385

 

[Trouble shooting] 통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패

JIE0025 [Trouble shooting] 통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작하지만 전체 동작시 실패 본문 프로젝트 - FLAG/에러 [Trouble shooting] 통합테스트에서 데이터베이스 이슈 : 각각은 잘 동작

jie0025.tistory.com

 

 


 

 

✅ @DirtiesContext 사용으로 인한 빌드 속도 개선

 

통합테스트라는 특징을 살려서 데이터베이스 초기화 없이 그대로 사용하기로 했다.

 

알아보니까 테스트메서드의 실행 우선순위를 지정할 수 있는 어노테이션이 존재했다.

https://awse2050.tistory.com/63

 

 

depth0 추가 →  depth1 추가 → 수정 → 전체 읽기 → 삭제 순으로 하면 문제가 생길수가 없다!

 


⏺ 클래스 레벨에 @TestMethodOrder 어노테이션을 붙힌다. 

속성값으로 3개를 사용할 수 있는데, 어떤 순서로 우선순위를 만들지 결정한다. 

  1. MethodOrderer.MethodName.class  :: 메서드이름으로 테스트 우선순위 지정
  2. MethodOrderer.DisplayName.class  :: DisplayName으로 테스트 우선순위 지정
  3. MethodOrderer.OrderAnnotation.class  :: Order 어노테이션을 이용한 테스트 우선순위 지정
    • @Order(1) 어노테이션을 메서드레벨에 추가해 순서를 지정한다. 

 

@Order를 직관적이긴 했지만 한줄씩 더 추가하는건 좋은건가? 생각이 들었다.

 

어차피 테스트 개수도 많지 않았고,  이미 순서를 위에서부터 아래로 작성해놨어서 DisplayName으로 설정했다. 

@TestMethodOrder(value = MethodOrderer.DisplayName.class)

 

@DisplayName 순서로 테스트가 진행되어 문제가 해결되었다.!

 

 

개선 이전 총 테스트시간 2sec, 242ms
개선 이후 총 테스트시간 : 318ms

 

@DirtiesContext를 사용하면 하나하나 테스트가 오래걸렸었는데,

이를통해  훨씬 개선된것을 확인했다 😆