Wiremock 调用方法

Wiremock calling methods

有没有办法在每次服务器收到请求时调用 java 方法?

wireMockServer.stubFor(post(urlEqualTo("/testpost"))
                .willReturn(onIncomingRequest()));

像这样,每次使用这个存根时服务器都会调用onIncomingRequest。

您可以通过编写自定义响应转换器来实现您想要的行为。响应转换器将查询 WireMock 的请求管理端点以检索最近的请求,并解析该数据以形成响应。

伪代码:

public class LastRequestBody extends ResponseTransformer {
    public String getName() {
        return "LastRequestBody";
    }

    @Override
    public Response transform(Request request, Response response, FileSource files, Parameters parameters) {
        // Set up some client
        String wmRequests = "http://127.0.0.1:8080/__admin/requests" // update to whatever your WM base url is
        OkHttpClient client = new OkHttpClient();
        String url = HttpUrl.parse().newBuilder().build().toString();
        okhttp3.Response okhttpResponse = client.newCall(okHttpRequest).execute();

        // Parse WM response into JSON
        JSONParser parser = new JSONParser();
        JSONObject responseObj = (JSONObject) parser.parse(okhttpResponse.body().string());
        JSONArray requests = (JSONArray) responseObj.get("requests");
        JSONObject mostRecentRequest = (JSONObject) requests[0];
        String mostRecentRequestBody = mostRecentRequest.get("request").get("body").toString();

        // Return response that looks like the original request/response
        return Response.Builder.like(response).but().body(mostRecentRequestBody.toJSONString()).build();
 
    }
}

以上代码可能不是100%正确,但大纲应该够扎实了。

查看 WM 管理页面以获取有关查询 all requests. 的更多信息 (其他假设 - 我使用 JSONSimple 进行解析,并使用 OkHttp3 向 WM 发出请求)

(最)正确的方法是实现 PostServeAction。有关详细信息,请参阅 this documentation page and WireMock's test cases