WireMock将路径设置为dynamic+



所以我创建了这个存根

stubFor(get(urlEqualTo("/skyhost/v1/rms/resourceid/8471jd1da7362f0eb28642s2"))
.willReturn(aResponse().withStatus(200)
.withBodyFile("getstub.json")
.withHeader("Content-Type", "application/json")));

}

我想做的是使这个动态,因为可能有不同的资源ID,而不仅仅是存根中提供的ID。我弄不明白该怎么办。我希望能够提供不同的资源ID,并且仍然能够得到的响应

在querkus归档中,rest客户端quickstart下有一个关于如何做到这一点的示例:

public class WireMockExtensions implements QuarkusTestResourceLifecycleManager {
private static final String COUNTRIES_JSON_FILE = "/extensions.json";
private static final String BASE_PATH = "/api";
private static final int WIREMOCK_PORT = 7777;
private WireMockServer wireMockServer;
@Override
public Map<String, String> start() {
wireMockServer = new WireMockServer(WIREMOCK_PORT);
wireMockServer.start();
stubExtensions();
return Collections.singletonMap("quarkus.rest-client."org.acme.rest.client.ExtensionsService".url",
wireMockServer.baseUrl() + BASE_PATH);
}
@Override
public void stop() {
if (Objects.nonNull(wireMockServer))
wireMockServer.stop();
}
private void stubExtensions() {
try (InputStream is = WireMockExtensions.class.getResourceAsStream(COUNTRIES_JSON_FILE)) {
String extensions = new String(is.readAllBytes());
// Stub for full list of extensions:
wireMockServer.stubFor(get(urlEqualTo(BASE_PATH))
.willReturn(okJson(extensions)));
// Stub for each country
try (StringReader sr = new StringReader(extensions);
JsonParser parser = Json.createParser(sr)) {
parser.next();
for (JsonValue extension : parser.getArray()) {
String id = extension.asJsonObject().getString("id");
wireMockServer.stubFor(get(urlEqualTo(BASE_PATH + "/extensions?id=" + URLEncoder.encode(id, StandardCharsets.UTF_8)))
.willReturn(okJson("[" + extension + "]")));
}
}
} catch (IOException e) {
fail("Could not configure Wiremock server. Caused by: " + e.getMessage());
}
}
}

extensions.json:

[
{
"id": "io.quarkus:quarkus-rest-client",
"keywords": [
"call",
"microprofile-rest-client",
"quarkus-rest-client",
"rest",
"rest-client",
"services",
"web-client"
],
"name": "REST Client",
"shortName": "REST Client"
},
{
"id": "io.quarkus:quarkus-resteasy",
"keywords": [
"endpoint",
"framework",
"jax",
"jaxrs",
"quarkus-resteasy",
"rest",
"resteasy",
"web"
],
"name": "RESTEasy JAX-RS",
"shortName": "jax-rs"
}
]

最新更新