2017-02-25 52 views
-1

我有一個輸入CSV數據文件,並具有我需要與每個HTTP請求到服務器發送一個2 MB文件。這個文件有2個變量。我需要從我的輸入文件中更改這些變量值。我正在使用Bean外殼預處理器。以下是代碼片段。我得到'temp'變量不能在HTTP請求正文中複製它的結果。我試過連$ {}溫度,但它甚至沒有工作 added variable in HTTP BodyScript structure的JMeter:不能夠使用豆處理器變量值在HTTP請求正文

HTTP Request and Bean shell structure

import java.io.*; 
//cardId,receiverid 
try 
{ 
    // reading file into buffer 
    StringBuilder data = new StringBuilder(); 
    BufferedReader in = new BufferedReader(new FileReader("Sample.json")); 

    char[] buf = new char[1024]; 
    int numRead = 0; 
    while ((numRead = in.read(buf)) != -1) { 
    data.append(buf, 0, numRead); 
    } 
    in.close(); 

    // replacing stub with actual value 
    System.out.println(vars.get("cardId") + " " +vars.get("receiverid")); 

    String cardId = vars.get("cardId"); 
    String receiverid = vars.get("receiverid"); 
    String temp = data.toString().replaceAll("\\$\\{cardId\\}", vars.get("cardId")); 
      temp = data.toString().replaceAll("\\$\\{receiverid\\}", receiverid); 


    out.close(); 
} 
catch (Exception ex) { 
    IsSuccess = false; 
    log.error(ex.getMessage()); 
    System.err.println(ex.getMessage()); 
} 
catch (Throwable thex) { 
    System.err.println(thex.getMessage()); 
} 

回答

0

你overscripting,你甚至不需要BeanShell的或什麼的,一切都可以用JMeter Functions來完成,即:

所以,如果你把HTTP Request採樣器「Body Data」選項卡中的以下構造:

${__eval(${__FileToString(Sample.json,,)})} 

您將得到Sample.json文件,其中所有JMeter變量都用它們的值替換。有關更多詳細信息,請參閱Here’s What to Do to Combine Multiple JMeter Variables文章。

+0

它的功能非常好,非常感謝。你節省了我的時間 –

0

首先,我不知道這是不是你的問題,或者你不完全貼腳本,但我沒有看到你在腳本的任何位置保存temp變量。你需要像

vars.put("temp", temp); 

稍後在腳本中使用它作爲${temp}。保存String temp不會自動創建變量。

二:你有很多的問題,你的腳本,讓你真正需要看日誌,第二確保腳本正常運行。我看到的是:

  1. 我不知道Sample.json長相如何,而是基於你在做什麼,它看起來像你的意思是,以取代從該文件與值讀取數據\$\{cardId\}\$\{receiverid\}變量cardIdreceiverid。但是你的代碼不正確,所以只有\$\{receiverid\}會被替換。更正如下:

    String cardId = vars.get("cardId"); 
    String receiverid = vars.get("receiverid"); 
    String temp = data.toString() 
         .replaceAll("\\$\\{cardId\\}",cardId) 
         .replaceAll("\\$\\{receiverid\\}", receiverid); 
    
  2. 而且我沒有看到out打開或聲明,所以

    out.close(); 
    

    似乎是沒有必要的。

還有一兩件事:如果你將有1-2個用戶運行這樣的請求1-2次,沒有問題,但如果你需要創建一個負載,該代碼將崩潰:想象100個或多個線程所有試圖同時讀取相同的2MB的文件很多次,他們每個人把它在內存(replaceAll期間它有可能多個副本)? JMeter比服務器上的負載更大。還有更好的方法來存儲靜態數據的2MB,只有一些瓦爾條代替。但我不會詳述,因爲這不是這個問題的主題。

+0

謝謝你的回答。我也使用了'put',但它的價值並沒有反映出來。 –