如何在 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());
我不熟悉在我的 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());