微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Wiremock 调用方法

如何解决Wiremock 调用方法

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

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

像这样,所以每次使用这个存根时 sever 都会调用 onIncomingRequest。

解决方法

(最)正确的方法是实现 PostServeAction。详情请参阅 this documentation pageWireMock's test cases

,

您可以通过编写自定义响应转换器来实现您想要的行为。响应转换器将查询 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 发出请求)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。