2015-11-25 10 views
1

字符串響應中提取動態值我需要提取動態值「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"]);需要從的JMeter

我已使用正則表達式提取的嘗試:

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

我相信用一些腳本編程會更容易。

  1. 添加Beanshell PostProcessor作爲返回上述響應
  2. 將下面的代碼到後處理的 「腳本」 區域的請求的小孩:

    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 

How to Use BeanShell: JMeter's Favorite Built-in Component指南上的JMeter BeanShell的腳本的其他信息和更多的例子