Wiremock - 从 URL 中获取一个字符串,对其进行修改并将其 return 作为正文的一部分

Wiremock - Grab a string from the URL, modify it and return it as part of the body

我在工作中处理一些负载测试场景,但在弄清楚如何使用 Wiremock 执行此操作时遇到了一些问题。

基本上就是这样。我有一段代码使 GET 到一个看起来像 /api/1/external/client/1234%12LT 的端点,我想抓住最后一部分,去掉 %(包括)之后的所有内容,只有 return 前面的数字是非常简单的 JSON {"id": "1234"} 的一部分。

我一直在阅读有关 Response Templating 的信息,并通过在命令行上传递标志 --global-response-templating 在我的独立实例上启用了它。我 认为 它有效,因为如果我使用 {{randomValue length=10 type='NUMERIC'}} 之类的东西将它设置为 return 一个随机值,它实际上 return 是一个随机数。

我想我应该使用 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]}}"
    }
  }
}

谁能指出我哪里搞砸了?

还有一个问题,你平时是怎么调试的?我已经查看了文档,但不确定如何将信息打印到日志中,以查看我尝试执行的替换是否真的有效,或者到达终点的内容是否是我假设应该得到的内容。

谢谢。

假设您在启动 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"
}