jmeter接口测试时遇到List<String> polNoList = new ArrayList<String>();该变量方法不能使用解决方案

ArrayList polNoList = new ArrayList(); 和List<String> polNoList = new ArrayList<String>();区别

这两个代码段都是用于创建一个 ArrayList 实例,存储 PolNo(保单号) 的字符串值。

第一个代码段中没有指定泛型,所以 polNoList 中可以存储任何类型的元素,包括 null。这种写法在 JDK 5 之前比较常见,但在 JDK 5 之后已经不再推荐使用。

第二个代码段中使用了泛型,指定了该 ArrayList 存储的元素类型是 String。这样就可以确保 polNoList 中只会存储 String 类型的元素,而其他类型的元素会在编译时被检测到并报错,从而提高了程序的类型安全性。

但是在 Java 代码中声明集合时,可以使用泛型语法来限定集合元素的类型。如 List<String> 表示一个字符串类型的集合。但在 JMeter 中,由于使用了 Beanshell 语言作为默认脚本语言,而 Beanshell 的语法规则与 Java 略有不同,不支持泛型语法。

因此,在 JMeter 中,如果需要声明集合变量,可以使用非泛型的方式,例如 ArrayList。这种方式虽然不能限制集合中元素的类型,但相对来说更加简单易用。

所以,ArrayList polNoList = new ArrayList(); 是可以在 JMeter 中正常使用的,而 List<String> polNoList = new ArrayList<String>(); 会报错。但实际上,后者在纯 Java 项目中是没有问题的。

当然,在 JMeter 中如果真的需要限制集合中元素的类型,可以手动进行数据类型判断和转换。例如可以通过遍历集合中的元素,将每个元素强制转换为字符串类型,再进行后续的操作。

import org.json.JSONArray;
import org.json.JSONObject;
//import org.json.*;   //导入org.json包

String response = prev.getResponseDataAsString();  //获取响应数据
JSONObject jsonResponse = new JSONObject(response);
JSONArray lspols = jsonResponse.getJSONArray("lspols");
ArrayList polNoList = new ArrayList();
//List<String> polNoList = new ArrayList<String>();

for (int i = 0; i < lspols.length(); i++) {
    JSONObject lspol = lspols.getJSONObject(i);
    JSONArray attachPols = lspol.getJSONArray("attachPols");

    for (int j = 0; j < attachPols.length(); j++) {
        JSONObject attachPol = attachPols.getJSONObject(j);
        String polNo = attachPol.getString("polNo");
        polNoList.add(polNo);
    }
}

//System.out.println("All polNo values: " + polNoList);
//vars.putObject("polNo", polNoList);
StringBuilder sb = new StringBuilder();
for (int i = 1; i < polNoList.size(); i++) {
    sb.append(polNoList.get(i));
    if (i < polNoList.size() - 1) {
        sb.append(",");
    }
}
String result = sb.toString();
vars.putObject("polNo", result);

猜你喜欢

转载自blog.csdn.net/yuanhou110/article/details/131085669