如何在 jmeter 中使用 beanshell 预处理器删除空参数
How do i remove empty parameter using beanshell preprocessor in jmeter
我正在尝试读取一个包含 500 多行的 csv 文件,每一行都将作为对 API 的请求。现在我的问题是一些参数有空字符串,我想设置一个条件,以防参数 returns 为空字符串,然后在点击 API[= 之前先从请求正文中删除该参数13=]
下面是我的json
{
"body": {
"Id1": "${Id1}",
"addressId": "${addressId}",
"languageCode": "${languageCode}",
"tempId": "${tempId}"
}
现在,在读取 csv 后,我在请求正文中得到了以下值
{
"body": {
"Id1": "1",
"addressId": "1233",
"languageCode": "E",
"tempId": ""
}
如您所见,tempId 为空字符串。现在使用 bean-shell 预处理器我试图删除它但没有运气
Object requestBody = sampler.getArguments().getArgument(0).getValue();
if (requestBody.get("tempId").equals("")){
sampler.getArguments.removeArgument("tempId");
}
当我查看结果树时,我没有看到从请求中删除了 tempId。我将不胜感激
将正文 "tempId": "${tempId}"
替换为 ${tempIdEval}
并计算 JSR223 script
中的值
String tempIdEval = vars.get("tempId");
vars.put("tempIdEval", (port == null ? "" : "\"tempId\": \"" + tempIdEval + "\""));
Migration to JSR223 PreProcessor+Groovy is highly recommended for performance, support of new Java features and limited maintenance of the BeanShell library.
既然你使用的是beanshell预处理器,我们可以使用like
if (vars.get("tempId")!="")
vars.put("variablename","not null");
else
vars.put("variablename","is null");
并改用 "variablename"。您可以像下面一样操作字符串。
if (${tempId}=="")
{ vars.put("json","
{
"body": {
"Id1": "${Id1}",
"addressId": "${addressId}",
"languageCode": "${languageCode}""
}
}
else
{ vars.put("json","
{
"body": {
"Id1": "${Id1}",
"addressId": "${addressId}",
"languageCode": "${languageCode}",
"tempId": "${tempId}"
}
}
请注意 since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language
JSR223 PreProcessor 的相关 Groovy 代码删除了具有空值的 JSON 属性,类似于:
def request = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def newRequest = evaluate(request.inspect())
request.body.each { entry ->
if (entry.getValue().equals('')) {
newRequest.body.remove(entry.getKey())
}
}
sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(newRequest).toPrettyString(), '')
sampler.setPostBodyRaw(true)
更多信息:
避免使用 Beanshell 以防弃用和性能不佳。
使用 groovy 代替此代码:
import org.apache.jmeter.config.Arguments;
def request = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def newRequest = evaluate(request.inspect())
request.body.each { entry ->
if (entry.getValue().equals('')) {
newRequest.body.remove(entry.getKey())
}
}
def arguments = new Arguments();
sampler.setArguments(arguments);
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(newRequest), '')
sampler.setPostBodyRaw(true)
参见:
如果您想正确学习 jmeter,这篇 book 会对您有所帮助。
我正在尝试读取一个包含 500 多行的 csv 文件,每一行都将作为对 API 的请求。现在我的问题是一些参数有空字符串,我想设置一个条件,以防参数 returns 为空字符串,然后在点击 API[= 之前先从请求正文中删除该参数13=]
下面是我的json
{
"body": {
"Id1": "${Id1}",
"addressId": "${addressId}",
"languageCode": "${languageCode}",
"tempId": "${tempId}"
}
现在,在读取 csv 后,我在请求正文中得到了以下值
{
"body": {
"Id1": "1",
"addressId": "1233",
"languageCode": "E",
"tempId": ""
}
如您所见,tempId 为空字符串。现在使用 bean-shell 预处理器我试图删除它但没有运气
Object requestBody = sampler.getArguments().getArgument(0).getValue();
if (requestBody.get("tempId").equals("")){
sampler.getArguments.removeArgument("tempId");
}
当我查看结果树时,我没有看到从请求中删除了 tempId。我将不胜感激
将正文 "tempId": "${tempId}"
替换为 ${tempIdEval}
并计算 JSR223 script
String tempIdEval = vars.get("tempId");
vars.put("tempIdEval", (port == null ? "" : "\"tempId\": \"" + tempIdEval + "\""));
Migration to JSR223 PreProcessor+Groovy is highly recommended for performance, support of new Java features and limited maintenance of the BeanShell library.
既然你使用的是beanshell预处理器,我们可以使用like
if (vars.get("tempId")!="")
vars.put("variablename","not null");
else
vars.put("variablename","is null");
并改用 "variablename"。您可以像下面一样操作字符串。
if (${tempId}=="")
{ vars.put("json","
{
"body": {
"Id1": "${Id1}",
"addressId": "${addressId}",
"languageCode": "${languageCode}""
}
}
else
{ vars.put("json","
{
"body": {
"Id1": "${Id1}",
"addressId": "${addressId}",
"languageCode": "${languageCode}",
"tempId": "${tempId}"
}
}
请注意 since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language
JSR223 PreProcessor 的相关 Groovy 代码删除了具有空值的 JSON 属性,类似于:
def request = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def newRequest = evaluate(request.inspect())
request.body.each { entry ->
if (entry.getValue().equals('')) {
newRequest.body.remove(entry.getKey())
}
}
sampler.getArguments().removeAllArguments()
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(newRequest).toPrettyString(), '')
sampler.setPostBodyRaw(true)
更多信息:
避免使用 Beanshell 以防弃用和性能不佳。
使用 groovy 代替此代码:
import org.apache.jmeter.config.Arguments;
def request = new groovy.json.JsonSlurper().parseText(sampler.getArguments().getArgument(0).getValue())
def newRequest = evaluate(request.inspect())
request.body.each { entry ->
if (entry.getValue().equals('')) {
newRequest.body.remove(entry.getKey())
}
}
def arguments = new Arguments();
sampler.setArguments(arguments);
sampler.addNonEncodedArgument('', new groovy.json.JsonBuilder(newRequest), '')
sampler.setPostBodyRaw(true)
参见:
如果您想正确学习 jmeter,这篇 book 会对您有所帮助。