카테고리 없음
Spring Boot TestWatcher를 이용한 Test Fail Listener 만들기 with Slack URI
돌맹이00
2024. 2. 29. 16:48
서론
테스트 코드 작성은 안정성 있는 소프트웨어를 개발하는 데 매우 중요한 부분이다. 그러나 테스트가 실패할 경우 이를 적시에 파악하고 대응하는 것이 중요하다. 이를 위해 Spring Boot에서는 TestWatcher를 제공하고 있다. 이번 포스팅에서는 TestWatcher를 사용하여 테스트가 실패했을 때 Slack으로 알림을 보내는 방법을 소개 하겠다.
본론
TestWatcher를 상속하여, 테스트가 실패했을 때 Slack으로 알림을 보내는 클래스를 작성
class TestAlramListener : TestWatcher {
override fun testFailed(context: ExtensionContext?, cause: Throwable?) {
// 여기에 테스트 실패 시 실행할 동작을 작성합니다.
val message = "${context?.testMethod?.get()?.name} : Failed"
sendSlackNotification(message)
}
internal fun sendSlackNotification(message: String) {
val slackWebhookUrl = "https://hooks.slack.com/services/test123456789"
val restTemplate = RestTemplate()
val headers = HttpHeaders().apply {
contentType = MediaType.APPLICATION_JSON
}
val payload = mapOf(
"text" to message,
)
val requestEntity = RequestEntity.post(URI.create(slackWebhookUrl))
.headers(headers)
.body(payload)
try {
val responseEntity: ResponseEntity<String> = restTemplate.exchange(requestEntity, String::class.java)
if (responseEntity.statusCode.is2xxSuccessful) {
println("Message sent successfully.")
} else {
println("Failed to send message")
}
} catch (e: Exception) {
println("Error sending message: ${e.message}")
}
}
}
테스트 적용
@ExtendWith(TestAlramListener::class)
@SpringBootTest
class MyApplicationTests {
@Test
fun `testFailure`() {
// 테스트를 실패하도록 구현합니다.
assertEquals(1, 2)
}
@Test
fun `testSuccess`() {
// 성공하는 테스트를 작성합니다.
assertEquals(1, 1)
}
}
위와 같이 TestAlramListener를 @ExtendWith를 통해 테스트 클래스에 적용하면 해당 테스트 클래스에 있는 테스트 메서드가 실패할 때마다 Slack으로 알림을 받을 수 있다.
결론
이번 포스팅에서는 Spring Boot TestWatcher를 사용하여 테스트가 실패했을 때 Slack으로 알림을 보내는 방법을 소개하였다. 개발자는 테스트 코드의 실패를 신속하게 파악하여 적절한 대응을 할 수 있게 된다. 또한, 효과적인 테스트 알림은 소프트웨어의 안정성과 신뢰성을 향상시키는 데 중요한 역할을 한다. 물론 CI에서 test가 돌긴 하지만, 나의 경우에는 end to end test를 위해 사용하고 있다.