我不熟悉在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请求中使用已排序的数组。谢谢你的帮助。
答案 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());