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"
}
我在工作中处理一些负载测试场景,但在弄清楚如何使用 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"
}