当前位置: 首页 > 知识库问答 >
问题:

WireMock请求不匹配

宇文温文
2023-03-14

我正在使用Spring云合同创建集成测试。从配置到将存根jar添加到项目,一切都正常工作。因此,我发现尽管所有参数和标头都相同,但请求不匹配。

{
  "url" : "/my-project/api/checkTransaction/id?id=ASDFGHJKL",
  "absoluteUrl" : "http://127.0.0.1:8085/my-project/api/checkTransaction/id?id=ASDFGHJKL",
  "method" : "GET",
  "clientIp" : "127.0.0.1",
  "headers" : {
    "Accept" : "application/json",
    "X-B3-ParentSpanId" : "6f922af45db72e2e",
    "User-Agent" : "Java/1.8.0_111",
    "Connection" : "keep-alive",
    "Host" : "127.0.0.1:8085",
    "X-Span-Name" : "http://my-project/api/checkTransaction/id",
    "X-B3-SpanId" : "886d8cfcdeec47ca",
    "X-B3-Sampled" : "0",
    "X-B3-TraceId" : "6f922af45db72e2e",
    "requestKey" : "RANDOM",
    "defaultId" : "12345",
    "baggage-requestKey" : "RANDOM",
    "baggage-defaultId" : "12345",
    "Content-Type" : "application/json",
    "username" : "589e329c-1cf1-4eb5-b7bb-eaffdd266560"
  },
  "cookies" : { },
  "browserProxyRequest" : false,
  "loggedDate" : 1526541502499,
  "bodyAsBase64" : "",
  "body" : "",
  "loggedDateString" : "2018-05-17T07:18:22Z",
  "queryParams" : {
    "id" : {
      "key" : "id",
      "values" : [ "ASDFGHJKL" ]
    }
  }
}
Closest match:
{
  "urlPath" : "/api/checkTransaction/id",
  "method" : "GET",
  "headers" : {
    "defaultId" : {
      "equalTo" : "12345"
    },
    "username" : {
      "matches" : "[\\p{L}]*"
    },
    "requestKey" : {
      "equalTo" : "RANDOM"
    },
    "Content-Type" : {
      "matches" : "application/json.*"
    },
    "Accept" : {
      "matches" : "application/json.*"
    }
  },
  "queryParameters" : {
    "id" : {
      "equalTo" : "ASDFGHJKL"
    }
  }
} 

这是API测试

@Test
public void checkId_Contract() throws Exception {
    // given:
        MockMvcRequestSpecification request = given()
                .header("requestKey", "RANDOM")
                .header("accept-language", "en")
                .header("accept-encoding", "gzip")
                .header("Content-Type", "application/json;charset=UTF-8");

    // when:
        ResponseOptions response = given().spec(request)
                .queryParam("id","ASDFGHJKL")
                .when().async()
                .timeout(10000)
                .get("/api/id/ASDFGHJKL/check");

    // then:
        assertThat(response.statusCode()).isEqualTo(200);
        assertThat(response.header("Content-Type")).matches("application/json;charset=UTF-8.*");
    // and:
        DocumentContext parsedJson = JsonPath.parse(response.getBody().asString());
        assertThatJson(parsedJson).field("['errors']").isNull();
        assertThatJson(parsedJson).field("['message']").isEqualTo("Id not found");
        assertThatJson(parsedJson).field("['value']").isNull();
        assertThatJson(parsedJson).field("['code']").isEqualTo("ID_NOT_FOUND");
}

这是API调用的合约

Contract.make {
        request {
            method 'GET'
            url('/api/checkTransaction/id') {
                headers {
                    header 'defaultId' : '12345'
                    header 'username' : $(anyAlphaUnicode())
                    header 'requestKey' : 'RANDOM'
                    contentType('application/json')
                    accept('application/json')
                }
                queryParameters {
                    parameter 'id' : 'ASDFGHJKL'
                }
            }
        }
        response {
            status 200
            async()
            fixedDelayMilliseconds(5000)
            headers{
                contentType('application/json')

            }
            body '''\
            {
              "code": "ID_NOT_FOUND",
              "message": "ID not found",
              "errors": null,
              "value": null,
              "success": false
            }
            '''
        }
  }

即使我从合同请求中删除用户名,仍然收到相同的错误。

我需要为X-B3-ParentSpanId等创建标题来使其匹配吗?

共有1个答案

包唯
2023-03-14

您在请求中的url是错误的,其中缺少my-Project

它应该看起来像这样:

Contract.make {
    request {
        method 'GET'
        url('/my-project/api/checkTransaction/id') {
        ...
 类似资料:
  • 我正在尝试使用独立的wiremck创建API模拟。响应正文取决于请求正文中的属性。 使用JSON,我能够做到。这是示例映射: 然而,我的主要需求是处理google protobuf,我正试图使用文本格式来代替它,模仿者将使用它来模仿API的响应。因此,请求文件是文本格式的,没有任何JSON验证,比如双引号,或者每行末尾的逗号等等。 我发现,使用JSON路径,wiremock由于格式不正确而无法匹配

  • 我正在使用wiremock设置一个虚拟PHP服务器,并希望根据传递的一个XML字段进行匹配。我基本上会有多个请求进入同一个url,但它们之间的主要区别是发票号。wiremock的JSON如下所示 当我使用Postman并只传递带有

  • 我正在尝试使用以下需求比较Soap UI和Wiremck的能力(这对于我的项目中的大多数情况来说是足够现实的)。 目标是为货币价格服务创建一个模拟。要求: > mytesthost/priceservice/getprice 期望一个称为'cur'的参数,它定义当前对,如:cur=EURHUF 当按如下方式调用时,应该使用保存在文件EURHUF中的XML响应进行响应。xml。 mytesthost

  • 我使用wiremock来模拟某些请求及其相应的响应,但我试图添加一个正则表达式。不幸的是,这只会引发一个异常,表明请求不匹配。 我也试过了 我发送的请求是

  • 我将WireMock作为独立进程启动: Java-jar wiremock-standalone-2 . 6 . 0 . jar-port 8080-v 还行。 当超文本传输协议请求内容后缀时 /api/profile/Favorite/WireMock必须返回存根响应。对所有其他请求必须通过WireMock忽略,并且必须转发到正式服。 我必须如何配置WireMock?

  • 我正试图做到这一点: 我得到一个错误: 我已经测试了正则表达式,它是有效的。我还进行了调试,发现regexpatern也匹配。但出于某种原因,我仍然会犯这个错误。我认为我用错了。 我尝试了一个更简单的版本,但也没有成功: 有什么想法吗?提前感谢。