jmeter 如果Rest API测试中JSON对象中的参数在CSV文件中存在空值,如何删除JSON参数

tkclm6bt  于 2022-11-09  发布在  其他
关注(0)|答案(2)|浏览(210)

我有一个PUT API,它将根据用户ID更新联系人数据(用户ID是强制性的,我的JSON对象如下所示。

{ 
      "userId": "test",
      "firstName": "Test",
      "lastName": "TG",
      "countryCode": "1",
      "phone": "112-123-234"
   }

我已使用CSV数据配置来传递参数值,我的数据如下所示

因此,在本例中,如果CSV中的Firstname值为空,则JSON对象将作为

{ 
      "userId": "test2",
      "firstName": "",
      "lastName": "TG",
      "countryCode": "1",
      "phone": "112-123-234"
   }

相反,我希望它作为(它不应包含名字参数本身)传递

{ 
      "userId": "test2",
      "lastName": "TG",
      "countryCode": "1",
      "phone": "112-123-234"
    }

有没有办法做到这一点?使用JMeter

fwzugrvs

fwzugrvs1#

遗憾的是,没有内置的方法来实现这一点。
1.假设您的CSV数据集配置变量如下所示:

userId,firstName,lastName,countryCode,phone

1.将Beanshell预处理器添加为HTTP请求采样器的子级
1.将以下代码放入Beanshell预处理器的“脚本”区域:

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.http.util.HTTPArgument;

String[] parameters = new String[]{vars.get("userId"), vars.get("firstName"), vars.get("lastName"), vars.get("countryCode"), vars.get("phone")};
StringBuilder requestBody = new StringBuilder();
String newLine = System.getProperty("line.separator");
String tab = "\t";
requestBody.append("{");
requestBody.append(newLine);
for (String value : parameters) {
    String key = "";
    if (value.length() > 0) {
        for (Map.Entry entry : vars.entrySet()) {
            if (Objects.equals(value, entry.getValue())) {
                key = entry.getKey().toString();
            }
        }
        requestBody.append(tab).append("\"").append(key).append("\": \"").append(value).append("\"");
        requestBody.append(newLine);
    }
}

requestBody.append("}");
HTTPArgument arg = new HTTPArgument();
arg.setValue(requestBody.toString());
Arguments args = new Arguments();
args.addArgument(arg);
sampler.setArguments(args);

以上代码仅在value存在时才添加JSON参数。
有关从Beanshell测试元素使用JMeter和Java API的更多信息,请参见How to Use BeanShell: JMeter's Favorite Built-in Component指南。

相关问题