티스토리 뷰

Spring

[Spring Boot] WireMock API 테스트

snail voyager 2023. 10. 3. 13:29
728x90
반응형

WireMock

WireMock은 가짜 HTTP 서버를 만들어서 실제 서비스와 상호 작용하는 것을 시뮬레이션하고, 

테스트 중에 실제 서비스 대신 가짜 서비스를 사용하여 통합 테스트를 수행하는 데 사용

build.gradle

dependencies {
	testImplementation("org.springframework.cloud:spring-cloud-contract-wiremock")
}

@AutoConfigureWireMock

WireMock을 Spring Boot 애플리케이션의 통합 테스트에서 자동으로 구성하는 데 사용되는 어노테이션

이 어노테이션을 사용하면 WireMock 서버가 자동으로 시작되고 종료되며, 설정된 Mock API를 사용하여 테스트를 수행

@SpringBootTest(webEnvironment = WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 0) // WireMock 서버를 자동으로 설정하고 포트는 랜덤
@TestPropertySource(properties = {	//동적으로 프로퍼티 설정 변경
        "api.url=http://localhost:${wiremock.server.port}"	//wiremock stub서버에서 사용된 포트
})
public class MyWireMockTest {

    @Autowired
    private MyRestClient restClient;

    @Test
    public void testMyRestClient() {
        // WireMock 서버에 대한 Mock API 응답 설정
        WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/api/resource"))
            .willReturn(WireMock.aResponse()
                .withStatus(HttpStatus.OK.value())
                .withHeader("Content-Type", MediaType.APPLICATION_JSON_VALUE)
                .withBody("{\"message\": \"Hello, World!\"}")));

        // RestClient를 사용하여 WireMock 서버에 요청을 보냄
        String response = restClient.getResource();
        // 테스트 로직 작성
        // 예상 결과를 확인하는 코드 추가
    }
    
    @Test
    public void testMyRestClientTimeoutTest() {
        WireMock.stubFor(WireMock.get(WireMock.urlEqualTo("/api/resource"))
            .willReturn(WireMock.aResponse()
                .withStatus(HttpStatus.OK.value())
                .withFixedDelay(6000)));	//6초 지연 발생

        assertThatThrownBy(() -> restClient.searchTest(search)).isInstanceOf(RetryableException.class).hasMessageContaining("Read timed out");
    }
}

JSON stub 파일

요청, 응답 stub 설정을 JSON 파일로 설정 가능

기본 경로는 src/test/resources/mappings 경로의 json 파일

@AutoConfigureWireMock(stubs="classpath:/stubs") 으로 경로 변경 가능

 

WiremockConfiguration BeanCreationException 이슈

 

 

https://docs.spring.io/spring-cloud-contract/docs/current/reference/html/project-features.html#features-wiremock

https://github.com/wiremock/wiremock

 

 

728x90
반응형

'Spring' 카테고리의 다른 글

[Spring Boot] CircuitBreaker Resilience4j  (0) 2023.10.07
[Spring Boot] OpenFeign Fallback  (0) 2023.10.03
[Spring Boot] OpenFeign 로깅 설정  (0) 2023.10.01
[Spring Boot] OpenFeign  (0) 2023.09.28
[Spring] @SpringBootTest 통합테스트  (0) 2023.08.27
반응형
300x250