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

时间:2015-09-03 07:58:40

标签: java 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

我想让它按照这样的数字排序,并存储在名为&#34; sortedVar&#34;的新变量中。

1,2,3,4,5,6

我可以使用什么代码对它进行排序并存储在一个新变量中,这样我就可以在即将到来的JMeter请求中使用已排序的数组。谢谢你的帮助。

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

考虑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));

答案 2 :(得分:0)

您可以执行以下操作:

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指南

答案 3 :(得分:-1)

正如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());