首页 > 解决方案 > 在预处理器中添加具有 int 值的 json 时的 Jmeter 包装器类

问题描述

我正在使用 JSR223preprocessor 添加预处理器。这将创建一个 JSON 对象并获取该 JSON 字符串的 base64,该字符串在正文的 post 请求中与其他 json 元素一起发送。当我使用 jmeter5.3 在 mac 中运行脚本时,使用命令模式和 GUI 没有任何错误,但是当将相同的脚本复制到具有相同版本 JMeter 5.3 的 ubuntu 机器时,我得到一个包装类错误。下面是我使用 setStrictJava (true) 的代码片段;

JsonArray Events = new JsonArray();
JsonArray phoneLocation = new JsonArray();
JsonArray anomalies = new JsonArray();
JsonObject MetaData= new JsonObject();
JsonObject ano= new JsonObject();
JsonObject pl = new JsonObject();
metaData.addProperty("activity","FOOT");
metaData.addProperty("id",UUID.randomUUID().toString()); 
metaData.addProperty("frequency",100);
metaData.add("phone_location",phoneLocation);
metaData.add("Events",Events);

我从 ubuntu 机器的日志中收到的错误是内部错误:包装器转换中的错误:在第 27 行:在文件中:内联评估:``import com.google.gson.JsonArray; 导入 com.google.gson.JsonObject;进口com。. . . '' : MetaData.addProperty ( "频率" , 100 )。当我将其更改为字符串时,它可以正常工作。

标签: jmeter

解决方案


查看您的setStringJava函数调用,您似乎仍在使用 Beanshell,但是从 JMeter 3.1 开始,您应该使用 JSR223 Test Elements 和 Groovy 语言进行脚本编写,所以如果您:

  1. 将“语言”切换为groovy
  2. 删除此setStrictJava函数调用

您的代码应该在另一台机器上按预期开始工作(假设您在JMeter Classpath中有这个“gson”库)

同样使用 Groovy,您不需要任何额外的库来处理 JSON,因为Groovy 支持开箱即用地解析和生成 JSON

更多信息:Apache Groovy - 为什么以及如何使用它


推荐阅读