解析wireMock中的动态路径

问题描述 投票:0回答:1

您好,我对 Wiremock 框架还比较陌生。我已经有一个正在运行的测试环境,但我需要我们的集成测试需要解析动态路径,例如

/测试/动态/{动态路径}/帮助

其中动态路径将是我想要解析的变量,然后使用 json 文件的子集呈现不同的数据,例如

{ 动态路径A:“你好”, 动态路径B“世界” }

此刻我有:

    stubFor(get(urlPathMatching("/test/dynamic/{dynamicpath}/help"))
            .withHeader("accept", equalTo("application/json"))
            .willReturn(aResponse().withBody(readFile(RESOURCES + "test.json", Charset.defaultCharset()))));

这将返回一个完整的 json 文件,其中包含完整的数据子集,但不返回与动态 uri 相关的各个组件。我的问题是有没有办法解析动态 url 并从 json 返回动态数据?

我希望我足够具体,我会根据需要进行更新。

java spring wiremock
1个回答
0
投票

完全有可能。您想要的是一个响应转换器

您已经使用路径正则表达式匹配器做了正确的事情,它将识别出正匹配 - 这就是它的参与的结束,其余的取决于响应转换器。

您有几个选项可以使用响应转换器解析

dynamicPath
部分,您可以 a) 将其作为参数提供给转换器,或者 b) 让响应转换器评估路径的请求 URL。这是一个让响应转换器完成所有工作的示例。

public static class DynamicTransformer extends ResponseDefinitionTransformer {

    @Override
    public ResponseDefinition transform(Request request, ResponseDefinition responseDefinition, FileSource files, Parameters parameters) {
          String path = request.getUrl();
          String dynamicPath = ...;     // Pull out the dynamic part
          String transformedJson = ...; // Render the JSON string applicable 
          return new ResponseDefinitionBuilder()
                .withHeader("Content-Type", "application/json")
                .withStatus(200)
                .withBody(transformedJson)
                .build();
    } 

    @Override
    public String name() {
        return "dynamic-transformer";
    }      

那么你的测试看起来像这样

WireMockServer wireMock = new WireMockServer(wireMockConfig()
     .extensions(new DynamicTransformer()));

stubFor(get(urlPathMatching("/test/dynamic/[^/]+/help"))
    .withHeader("accept", equalTo("application/json"))
    .willReturn(aResponse()
    .withTransformers("dynamic-transformer")));
© www.soinside.com 2019 - 2024. All rights reserved.