Java Jmeter:无法在HTTP请求正文中使用bean处理器变量值

Java Jmeter:无法在HTTP请求正文中使用bean处理器变量值,java,jmeter,beanshell,Java,Jmeter,Beanshell,我有一个输入CSV数据文件和一个2MB文件,我需要将每个HTTP请求发送到服务器。此文件有2个变量。我需要从输入文件中更改这些变量的值。我使用的是BeanShell预处理器。下面是代码片段。我在“temp”变量中得到的结果无法在HTTP请求正文中复制它。我甚至尝试了${temp},但都不起作用 : 首先,我不知道这是您的问题,还是您发布了不完整的脚本,但我没有看到您在脚本中的任何位置保存temp变量。你需要像这样的东西 vars.put("temp", temp); 将其用作脚本后面的${

我有一个输入CSV数据文件和一个2MB文件,我需要将每个HTTP请求发送到服务器。此文件有2个变量。我需要从输入文件中更改这些变量的值。我使用的是BeanShell预处理器。下面是代码片段。我在“temp”变量中得到的结果无法在HTTP请求正文中复制它。我甚至尝试了${temp},但都不起作用

:


首先,我不知道这是您的问题,还是您发布了不完整的脚本,但我没有看到您在脚本中的任何位置保存
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.close();
    
    似乎不需要


  • 还有一件事:如果有1-2个用户运行这样的请求1-2次,没有问题,但是如果需要创建负载,这段代码就会崩溃:想象一下,100个或更多线程都试图同时多次读取同一个2MB文件,并且每个线程都将其放入内存中(在
    replaceAll
    过程中可能会有多个副本)?您在JMeter上的负载将比服务器上的负载更多。有更好的方法存储2MB静态数据,只需重新计算一些变量。但我不会详细介绍,因为这不是这个问题的主题。

    您编写的太多了,甚至不需要Beanshell或其他什么,一切都可以用它来完成,即:

    因此,如果您将以下构造放入采样器“Body Data”选项卡中:


    您将获得
    Sample.json
    文件,其中所有JMeter变量都用其值替换。有关更多详细信息,请参阅文章。

    它工作得非常好。非常感谢。您节省了我的时间。感谢您使用ans。我也使用了“put”,但它的值没有反映出来。
    out.close();
    
    ${__eval(${__FileToString(Sample.json,,)})}