Запрос WireMock не совпал - PullRequest
0 голосов
/ 17 мая 2018

Я создаю интеграционное тестирование с использованием весеннего облачного контракта. Все работает нормально, от настройки до добавления заглушек в проект. Поэтому я обнаружил, что запрос не совпадает, несмотря на то, что все параметры и заголовки совпадают.

{
  "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 Ответ

0 голосов
/ 17 мая 2018

Ваш URL в request неверен, в нем отсутствует my-project.

Это должно выглядеть так:

Contract.make {
    request {
        method 'GET'
        url('/my-project/api/checkTransaction/id') {
        ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...