我需要提取动态值“BSS1,DS1,HYS1,MS1,PTS1,QS1,USG1,YS1,RT10086,RT10081,RT10084,RT10082,OT10076,RT10083,UT10081,RT10085,
”
来自字符串响应“ACCOUNT_DETAIL_ACCOUNT_PRODUCT_SERVICES_EDIT_UPDATE_NameSpace.grid.setSelectedKeys(["BSS1","DS1","HYS1","MS1","PTS1","QS1","USG1","YS1","RT10086","RT10081","RT10084","RT10082","OT10076","RT10083","UT10081","RT10085"]);
”
我尝试过使用正则表达式提取器:
Regular Expression :Keys\(\[\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\",\"(.+?)\"]\)
template : $1$$2$$3$$4$$5$$6$$7$$8$$9$$10$$11$$12$$13$$14$$15$$16$
但只有在响应中有16个值时,上述正则表达式才有效。如果响应包含的值较少,例如“ACCOUNT_DETAIL_ACCOUNT_PRODUCT_SERVICES_EDIT_UPDATE_NameSpace.grid.setSelectedKeys(["BSS1","DS1"]);
”
那么上面的正则表达式不起作用。
如果总计数未知,如何在响应中提取值? 此外,响应中的双引号也需要省略。
是否有可以提取动态值的后处理器?
非常感谢任何帮助。
答案 0 :(得分:0)
我相信使用一些脚本会更容易。
将以下代码放入PostProcessor的“脚本”区域:
String response = new String(data);
String rawKeys = response.substring(response.indexOf("[") + 1, response.indexOf("]")); // get the data inside square brackets
String keysWithoutQuotes = rawKeys.replaceAll("\"", ""); // remove quotes
String[] keyData = keysWithoutQuotes.split("\\,"); // get array of keys
for (int i = 0; i < keyData.length; i++) { // store array of keys into JMeter variables like
vars.put("Keys_" + (i +1), keyData[i]); // Keys_1=BSS1, Keys_2=DS1, etc.
}
vars.put("Keys_matchNr", String.valueOf(keyData.length)); // set Keys_matchNr variable
其中:
data
是包含父采样器响应数据的字节数组vars
是JMeterVariables类的简写,提供对JMeter变量的读/写访问。 因此,您将拥有以下变量:
Keys_1=BSS1
Keys_2=DS1
..
Keys_matchNr=X
有关JMeter中Beanshell脚本编写的更多信息,请参阅How to Use BeanShell: JMeter's Favorite Built-in Component指南以及更多示例