Java 解析wireMock中的动态路径

Java 解析wireMock中的动态路径,java,spring,wiremock,Java,Spring,Wiremock,大家好,我是Wiremock框架的新成员。我已经有了一个测试环境,但是我需要为我们的集成测试解决一个动态路径,比如 /test/dynamic/{dynamicpath}/help 其中,动态路径将是一个变量,我希望解析它,然后使用json文件的子集(例如 { “你好”, 动态“世界” } 目前我有: stubFor(get(urlPathMatching("/test/dynamic/{dynamicpath}/help")) .withHeader("acce

大家好,我是Wiremock框架的新成员。我已经有了一个测试环境,但是我需要为我们的集成测试解决一个动态路径,比如

/test/dynamic/{dynamicpath}/help

其中,动态路径将是一个变量,我希望解析它,然后使用json文件的子集(例如

{ “你好”, 动态“世界” }

目前我有:

    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返回动态数据


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

完全可能。你想要的是一个

您使用path regex matcher做了正确的事情,它将识别一个正匹配-这就是它参与的结束,其余的取决于响应转换器

您有两个选项用于解析带有响应转换器的
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")));