gpt4 book ai didi

json - 使用 Bean Shell 后处理器提取 JSON 响应

转载 作者:行者123 更新时间:2023-12-01 23:12:42 24 4
gpt4 key购买 nike

我正在尝试使用 Beanshell 后处理器提取 JSON 数组的一个变量的值,但在日志中没有得到任何响应

我的 JSON 有点像:

"store":
: [
: : {
: : : "storeId":12345,
: : : "storeName":"ABC",
: : : "storeAddress":"DEFGHIJKL",
: : : "storeMinOrderAmount":100,
: : : "mobile":"+911234567890",
: : : "mobileSecondary":null,
: : : "city":"Somewhere",
: : : "pincode":123456,
: : : "country":"India",
: : : "email":"ptrm@company.com",
: : : "pickup":true,
: : : "delivery":false,
: : : "storeSplashPath":null,
: : : "storeSplashType":null,
: : : "distance":"0.10"
: : },


我的 Beanshell 后处理器是:
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import com.eclipsesource.json.*;

print("*******************");

//Get Store total count
int totalStoreNumber = StringUtils.countMatches(new String(data), "storeId");
print("Total Number of Stores are: " + totalStoreNumber);

if (totalStoreNumber > 0) {
//Check for Fulfilment type is "Pickup"
String jsonString = prev.getResponseDataAsString();
JsonObject store = JsonObject.readFrom(jsonString);
JsonArray store = store.get("store").asArray();
String pickup = store.get(1).asObject().get("pickup").asString();
vars.put("fulfilmentType_BSH", pickup);
print("Is Pickup allowed: " + pickup);
}
else {
print("No Stores Nearby");
}

我不知道我哪里出错了。我已阅读相关查询,但无法正确解决。
任何的想法?

最佳答案

首先,你为什么不使用JSON Path PostProcessor为了它?您可以使用单个简单的 JSON Path 获得完全相同的结果。表达如:

$.store[0].pickup

如果出于任何原因您仍然需要在 Beanshell 中执行此操作,我有一些想法:
  • 这绝对是错误。您不能在 Beanshell 脚本中声明 2 个具有相同名称的变量
    JsonObject store = JsonObject.readFrom(jsonString);
    JsonArray store = store.get("store").asArray();
    // ^^^^^ ka-boom!
  • 可能的问题。 IndexOutOfBoundsException如果响应中只有 1 个商店。在 Beanshell 中,集合是从零开始的,第一个元素的索引为 0。
    String pickup = store.get(1).asObject().get("pickup").asString();
    // ^ ka-boom!
  • 另一个可能的问题可能是关于您的进口,以防万一
    import org.json.JSONArray;
    import org.json.JSONObject;
    import com.eclipsesource.json.*;

    你有没有把相关的jar添加到JMeter Classpath在此之后您是否重新启动了 JMeter?你确定你使用的方法正确吗?

  • 这是您使用 json-smart 重新实现的代码随 JMeter 3.0 一起提供(您不需要任何其他 jar )
    import net.minidev.json.JSONArray;
    import net.minidev.json.JSONObject;
    import net.minidev.json.parser.JSONParser;
    import org.apache.commons.lang.StringUtils;

    //Get Store total count
    int totalStoreNumber = StringUtils.countMatches(new String(data), "storeId");
    log.info("Total Number of Stores are: " + totalStoreNumber);

    if (totalStoreNumber > 0) {
    //Check for Fulfilment type is "Pickup"
    String jsonString = new String(data);
    JSONParser parser = new JSONParser(JSONParser.MODE_JSON_SIMPLE);
    JSONObject store = (JSONObject) parser.parse(data);
    JSONArray storeArray = (JSONArray) store.get("store");
    String pickup = ((JSONObject) storeArray.get(0)).getAsString("pickup");
    vars.put("fulfilmentType_BSH", pickup);
    log.info("Is Pickup allowed: " + pickup);
    } else {
    log.info("No Stores Nearby");
    }

    以及它工作的证据

    Beanshell JSON demo

    How to Use BeanShell: JMeter's Favorite Built-in Component有关在 JMeter 测试中使用 Beanshell 脚本的更多信息的指南

    关于json - 使用 Bean Shell 后处理器提取 JSON 响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39251042/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com