如何使用 JMeter 从 JSON 响应中存在的 URL 中提取子字符串
How to extract the Substring from URL present in JSON response using JMeter
我从 HTTP 请求收到了以下 JSON 响应。我想从 JSON 响应中存在的节点“url”中提取参数。
{"Id":"7S9LyBqyv1e0trKrVuP1OOZGHeg","Url":"https://abcd.com:443/u/custom-response?prov=34545sdf-9013e2e61e66&realmeId=%2Fxxxx","realmeId":"/abcd"}
在上面的 JSON 响应中,我想使用 JMeter 检索“prov”的值,即 34545sdf-9013e2e61e66。
尝试过的解决方案:使用 Beanshell 读取响应。
String url = vars.get("successURL");
vars.put("responseURL",url.toString());
responseURL = responseURL.replaceAll(":"," ");
log.info("String URL "+responseURL.toString());
错误信息:
attempt to resolve method: toString() on undefined variable or class name: responseURL
您不需要使用复杂的 Beanshell 编码,您可以使用 - Regular Expression Extractor
.
轻松完成此操作
举个例子:-
您可以看到在正则表达式提取器中提取并存储在变量名中的所需值:
要了解试用正则表达式,您可以使用 https://regex101.com/
我认为你需要更新这一行:
responseURL = responseURL.replaceAll(":"," ");
类似于:
responseURL = vars.get("responseURL").replaceAll(":"," ");
但是我不保证它会起作用,因为我不知道你是如何得到这个successURL
变量的。
使用 JSR223 PostProcessor and Groovy language which has built-in JSON support 一次性完成所有工作会奏效,建议代码:
def url = new groovy.json.JsonSlurper().parse(prev.getResponseData()).Url
def params = org.apache.http.client.utils.URLEncodedUtils.parse(new URI(url), 'UTF-8')
params.each { param ->
log.info(param.getName() + '=' + param.getValue())
}
演示:
我从 HTTP 请求收到了以下 JSON 响应。我想从 JSON 响应中存在的节点“url”中提取参数。
{"Id":"7S9LyBqyv1e0trKrVuP1OOZGHeg","Url":"https://abcd.com:443/u/custom-response?prov=34545sdf-9013e2e61e66&realmeId=%2Fxxxx","realmeId":"/abcd"}
在上面的 JSON 响应中,我想使用 JMeter 检索“prov”的值,即 34545sdf-9013e2e61e66。 尝试过的解决方案:使用 Beanshell 读取响应。
String url = vars.get("successURL");
vars.put("responseURL",url.toString());
responseURL = responseURL.replaceAll(":"," ");
log.info("String URL "+responseURL.toString());
错误信息:
attempt to resolve method: toString() on undefined variable or class name: responseURL
您不需要使用复杂的 Beanshell 编码,您可以使用 - Regular Expression Extractor
.
举个例子:-
您可以看到在正则表达式提取器中提取并存储在变量名中的所需值:
要了解试用正则表达式,您可以使用 https://regex101.com/
我认为你需要更新这一行:
responseURL = responseURL.replaceAll(":"," ");
类似于:
responseURL = vars.get("responseURL").replaceAll(":"," ");
但是我不保证它会起作用,因为我不知道你是如何得到这个successURL
变量的。
使用 JSR223 PostProcessor and Groovy language which has built-in JSON support 一次性完成所有工作会奏效,建议代码:
def url = new groovy.json.JsonSlurper().parse(prev.getResponseData()).Url
def params = org.apache.http.client.utils.URLEncodedUtils.parse(new URI(url), 'UTF-8')
params.each { param ->
log.info(param.getName() + '=' + param.getValue())
}
演示: