簡體   English   中英

如何在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請求中使用排序后的數組。 感謝幫助。

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

我想在bean shell中您可以使用與Java中相同的東西。 填充StringBuffer后,就沒有簡單的方法對內容進行排序。 因此,我將內容首先存儲到中間的ArrayList<String> (如果總是得到數字,甚至存儲在更好的ArrayList<Integer> ),然后使用Collections.sort對其進行排序,然后使用另一個for循環將列表的內容放入StringBuffer使用逗號分隔符。

您可以執行以下操作:

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

有關JMeter中 Beanshell腳本的更多信息,請參見如何使用BeanShell:JMeter最喜歡的內置組件指南。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM