WireMock 포트를 보다 동적으로 만들어 테스트 서비스에 사용하려면 어떻게 해야 합니까?
저는 wiremock을 사용하여 github api를 모의하여 서비스 테스트를 하고 있습니다.서비스에서 github api를 호출합니다.테스트의 경우 엔드포인트 속성을 다음으로 설정합니다.
github.api.endpoint=http://localhost:8087
이 호스트 및 포트가 wiremock 서버와 동일합니다.@AutoConfigureWireMock(port = 8087)
따라서 잘못된 응답, 타임아웃 등과 같은 다양한 시나리오를 테스트할 수 있습니다.
시스템에서 이 포트를 이미 사용하고 있는데 이 포트를 동적으로 설정하려면 어떻게 해야 합니까?테스트에서 wiremock 포트를 가져와 endpoint 속성을 재할당할 수 있는 방법이 있습니까?
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 8087)
@TestPropertySource(properties ={"github.api.endpoint=http://localhost:8087"})
public class GithubRepositoryServiceTestWithWireMockServer {
@Value("${github.api.client.timeout.milis}")
private int githubClientTimeout;
@Autowired
private GithubRepositoryService service;
@Test
public void getRepositoryDetails() {
GithubRepositoryDetails expected = new GithubRepositoryDetails("niemar/xf-test", null,
"https://github.com/niemar/xf-test.git", 1, "2016-06-12T18:46:24Z");
stubFor(get(urlEqualTo("/repos/niemar/xf-test"))
.willReturn(aResponse().withHeader("Content-Type", "application/json").withBodyFile("/okResponse.json")));
GithubRepositoryDetails repositoryDetails = service.getRepositoryDetails("niemar", "xf-test");
Assert.assertEquals(expected, repositoryDetails);
}
@Test
public void testTimeout() {
GithubRepositoryDetails expected = new GithubRepositoryDetails("niemar/xf-test", null,
"https://github.com/niemar/xf-test.git", 1, "2016-06-12T18:46:24Z");
stubFor(get(urlEqualTo("/repos/niemar/xf-test"))
.willReturn(aResponse()
.withHeader("Content-Type", "application/json")
.withBodyFile("/okResponse.json")
.withFixedDelay(githubClientTimeout * 3)));
boolean wasExceptionThrown = false;
try {
GithubRepositoryDetails repositoryDetails = service.getRepositoryDetails("niemar", "xf-test");
} catch (GithubRepositoryNotFound e) {
wasExceptionThrown = true;
}
Assert.assertTrue(wasExceptionThrown);
}
WireMock 포트를 0으로 설정하여 임의 포트를 선택한 다음 이 포트에 대한 참조를 사용해야 합니다.wiremock.server.port
엔드포인트 속성의 일부입니다.
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureWireMock(port = 0)
@TestPropertySource(properties = {
"github.api.endpoint=http://localhost:${wiremock.server.port}"
})
public class GithubRepositoryServiceTestWithWireMockServer {
....
}
Spring Cloud Contract WireMock도 참조하십시오.
이것이 좀 오래된 게시물이라는 것을 알지만 여전히 이러한 포트를 동적으로 가질 수 있는 문서화된 방법이 있습니다.여기서 자세히 보기: 시작하기.'랜덤 포트 번호'로 스크롤을 조금만 내리면 됩니다.거기에 있는 설명서에서:
당신이 해야할 일은 규칙을 그렇게 정의하는 것입니다.
@Rule
public WireMockRule wireMockRule = new WireMockRule(wireMockConfig().dynamicPort().dynamicHttpsPort());
그리고 그들을 통해 접근합니다.
int port = wireMockRule.port();
int httpsPort = wireMockRule.httpsPort();
충돌 없이 동적 포트를 사용할 수 있는 한 가지 방법은
import org.springframework.util.SocketUtils;
int WIREMOCK_PORT = SocketUtils.findAvailableTcpPort();
public WireMockRule wireMockServer = new WireMockRule(WIREMOCK_PORT);
만약 당신이 속성 파일에서 접근하고 싶다면,wiremock.server.port
와이어모크 제공
"github.api.endpoint=http://localhost:${wiremock.server.port}"
나는 알지 못합니다.@AutoConfigureWireMock
그러나 수동으로 와이어모킹을 시작하고 모의실험을 설정하는 경우 스프링을 시작하는 동안 스프링 랜덤을 사용하여 랜덤 포트 번호를 설정할 수 있습니다.샘플은 이렇게 보일 것입니다.
너의 wiremock 수업에서
@Component
public class wiremock {
@Value("${randomportnumber}")
private int wiremockPort;
public void startWiremockServer() {
WireMock.configureFor("localhost", wiremockPort);
wireMockServer = new com.github.tomakehurst.wiremock.WireMockServer(wireMockConfig().port(wiremockPort).extensions
(MockedResponseHandler.class));
wireMockServer.start();
}
}
시험시간에
//however you want to configure spring
public class wiremock {
@Value("${github.api.endpoint}")
private String wiremockHostUrl;
//use the above url to get stubbed responses.
}
application.properties 파일에서
randomportnumber=${random.int[1,9999]}
github.api.endpoint=http://localhost:${randomportnumber}
사용하시는 경우.NET/C#, 다음과 같이 빈 인수로 WireMock 서버를 시작할 수 있습니다.
var myMockServer = WireMockServer.Start();
다음과 같이 필요한 경우 포트 번호를 가져옵니다.
int portNumber = myMockServer.Port();
언급URL : https://stackoverflow.com/questions/49374115/how-can-i-make-wiremock-port-more-dynamic-to-use-it-for-testing-service
'programing' 카테고리의 다른 글
mod deflat 루트의 하위 디렉토리를 압축하지 않음 (0) | 2023.09.28 |
---|---|
ARM에 대한 새로운 리브와 함께 GCC를 교차 컴파일: -march와 같은 GCC 옵션을 지정하는 방법? (0) | 2023.09.28 |
도커 컨테이너가 빠져나가는 이유를 어떻게 알 수 있습니까? (0) | 2023.09.23 |
오라클에서 테이블의 모든 열을 null에서 null로 설정하는 방법 (0) | 2023.09.23 |
jquery에서 모든 ajax 요청을 잡습니다. (0) | 2023.09.23 |