我有一个输入CSV数据文件,并且有一个2 MB的文件,我需要将每个HTTP请求发送到服务器。该文件有2个变量。我需要从输入文件中更改这些变量值。我正在使用Bean shell预处理器。以下是代码段。我在“ temp ”变量中得到的结果无法在HTTP Request Body中复制它。我甚至试过$ {temp},但它甚至没有工作 Script 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 :(得分:0)
首先,我不知道这是你的问题,还是你发布了不完整的脚本,但我没有看到你在脚本的任何地方保存temp
变量。你需要像
vars.put("temp", temp);
稍后在脚本中将其用作${temp}
。保存String temp
不会自动创建变量。
第二:你的脚本有很多问题,所以你真的需要查看日志,并确保脚本正常运行。我看到的是:
我不确定Sample.json
的外观,但根据您的操作,您似乎想要替换数据中的\$\{cardId\}
和\$\{receiverid\}
使用变量cardId
和receiverid
的值从该文件中读取。但是您的代码不正确,因此只会替换\$\{receiverid\}
。纠正如下:
String cardId = vars.get("cardId");
String receiverid = vars.get("receiverid");
String temp = data.toString()
.replaceAll("\\$\\{cardId\\}",cardId)
.replaceAll("\\$\\{receiverid\\}", receiverid);
我没有看到out
的开放或声明,所以
out.close();
似乎不需要。
还有一件事:如果你有1-2个用户运行这样的请求1-2次,没问题,但如果你需要创建一个加载,这个代码将崩溃:想象100个或更多的线程都试图读取同时多次使用相同的2MB文件,并且每个文件都将它放在内存中(可能在replaceAll
期间有多个副本)? JMeter上的负载比服务器多。有更好的方法来存储2MB的静态数据,只有一些vars被重新存储。但我不打算详细说明,因为这不是这个问题的主题。
答案 1 :(得分:0)
你在写一篇文章,你甚至不需要Beanshell或其他什么,一切都可以用JMeter Functions完成,即:
因此,如果您将以下结构放入HTTP Request采样器"身体数据"标签:
${__eval(${__FileToString(Sample.json,,)})}
您将获得Sample.json
文件,其中所有JMeter变量都替换为其值。有关详细信息,请参阅Here’s What to Do to Combine Multiple JMeter Variables文章。