2017-02-25 33 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',但它的价值并没有反映出来。 –