如何在 JMeter Beanshell 中对数值数组进行排序

How to Sort Numeric Array in JMeter Beanshell

我不熟悉在我的 JMeter 脚本中使用 Beanshell/Java。我的 JMeter Beanshell 处理器中有以下代码。

int count = Integer.parseInt(vars.get("student_id_RegEx_matchNr"));
String delimiter = ",";
StringBuffer sb = new StringBuffer();
for(int i=1;i<=25;i++) { 
sb.append(vars.get("student_id_RegEx_" + i));
if (i == count){
break; //to eliminate comma after the array
}else {
sb.append(delimiter);
}
}
vars.putObject("myUnsortedVar",sb.toString());

我在 运行 脚本时得到以下输出:

myUnsortedVar=5,6,2,3,1,4

我希望它像这样按数字排序并存储在一个名为 "sortedVar" 的新变量中。

1,2,3,4,5,6

我可以使用什么代码对其进行排序并将其存储在新变量中,以便我可以在即将到来的 JMeter 请求中使用排序后的数组。感谢您的帮助。

我想在 bean shell 中,您可以使用与 Java 中相同的方法。一旦填充了 StringBuffer,就没有简单的方法来对内容进行排序。因此,我会先将内容存储到中间 ArrayList<String>(如果你总是得到数字,甚至更好 ArrayList<Integer>),然后使用 Collections.sort 对其进行排序,然后使用另一个 for使用逗号分隔符循环将列表的内容放入 StringBuffer。

参加sb.toString() = "5,6,2,3,1,4"

  • 使用 String::split()String 转换为 String[]
  • 使用Arrays::sort()对数组进行排序
  • 使用Arrays.toString()String[]转换为String

String[] sortedArray = Arrays.sort(sb.toString().split(","));
vars.putObject("mySortedVar", Arrays.toString(sortedArray));

你可以这样做:

char [] responseCharArray = vars.get("myUnsortedVar").toCharArray();
Arrays.sort(responseCharArray);
String mySortedString = Arrays.toString(responseCharArray);    
vars.put("mySortedVar", mySortedString.replaceAll("\,\,","").replaceAll(" ",""));

有关 JMeter 中 Beanshell 脚本的更多信息,请参阅 How to use BeanShell: JMeter's favorite built-in component 指南

正如 OndreJM 所建议的,您需要改变您的方法。不是将值存储在 StringBuffer 中,而是将它们存储在 ArrayList 中,然后使用 Collections.sort 对其进行排序。以下代码应该适合您。

// create an ArrayList
ArrayList strList = new ArrayList();
for (int i=0;i<25; i++){
strList.add(vars.get("student_id_RegEx_" + String.valueOf(i+1)));
}
// sort this ArrayList
Collections.sort(strList);
// use StringBuilder to build String from ArrayList
StringBuilder builder = new StringBuilder();
for (String id: strList){
builder.append(id);
builder.append(",");
}
builder.deleteCharAt(builder.length()-1);
// finally put in variable using JMeter built in 'vars.put'
// do not use vars.putObject, as you can not send object as request parameter
vars.put("sortedVar", builder.toString());