Wiremock - получить строку из URL, изменить ее и вернуть как часть тела - PullRequest
1 голос
/ 09 января 2020

Я работаю над некоторым сценарием нагрузочного тестирования ios на работе, и у меня возникают некоторые проблемы с выяснением, как это сделать с помощью Wiremock.

Это в основном это. У меня есть фрагмент кода, который делает GET для конечной точки, которая выглядит примерно как /api/1/external/client/1234%12LT, и я хочу взять последнюю часть, убрать все после % (в комплекте) и вернуть только числа перед ним как часть очень простой JSON {"id": "1234"}.

Я читал о Response Templating и включил его в своем автономном экземпляре, передав флаг --global-response-templating в командной строке. Я думаю , что это работает, потому что, если я установлю его, чтобы оно возвращало случайное значение, используя что-то вроде {{randomValue length=10 type='NUMERIC'}}, оно фактически возвращает случайное число.

Я думаю, что я должен использовать комбинацию request.requestLine.pathSegments.[4], чтобы получить последний сегмент URL, а затем использовать экстрактор регулярных выражений {{regexExtract request.body '[A-Z]+'}}" (не фактический код, пример взят из документации), чтобы получить Первая числовая часть, но пока не удалось заставить ее работать.

Мой издевательский код выглядит примерно так:

{
  "request": {
    "urlPattern": "/api/1/example/endpoint/.*",
    "method": "GET"
  },
  "response": {
    "status": "200",
    "headers": {
      "Content-Type": "application/json; charset=utf-8"
    },
    "jsonBody": {
      "id": "{{request.requestLine.pathSegments.[4]}}"
    }
  }
}

Может кто-нибудь указать мне, где я облажался?

И еще вопрос, как вы это обычно отлаживаете? Я просмотрел документы и не уверен, как распечатать информацию в журналах, чтобы увидеть, работает ли подстановка, которую я пытаюсь сделать, на самом деле, или, как я полагаю, должна получить то, что достигает конечной точки.

Спасибо.

1 Ответ

1 голос
/ 10 января 2020

Учитывая, что вы запускаете свой экземпляр WireMock с включенным глобальным шаблоном ответа, затем со следующим отображением:

{
  "request": {
    "urlPattern": "/api/1/external/client/.*",
    "method": "GET"
  },
  "response": {
    "status": "200",
    "headers": {
      "Content-Type": "application/json; charset=utf-8"
    },
    "jsonBody": {
      "id": "{{regexExtract request.requestLine.pathSegments.[4] '[0-9]*'}}"
    }
  }
}

Учитывая следующий URL:

http://localhost:8080/api/1/external/client/1234%12LT

Ответ будет быть:

{
    "id": "1234"
}
...