JMeter - 在Http POST主体中引用用户定义的变量

时间:2012-01-18 13:34:26

标签: jmeter

有人可以告诉我如何在HTTP Sampler的附件中访问用户定义的变量吗?

我做了什么:
创建了一个HTTP Requset Sampler(方法POST);
创建了一个变量myvar,这是一个JMeter'随机变量'。

问题:
当我引用${myvar}来填充Http标头时,它可以工作,但是当我在作为POST主体发送的文件中使用它时,它不会被替换,而是作为${myvar}发送。

提前致谢!

1 个答案:

答案 0 :(得分:2)

1。根据参考18.1.2 HTTP Request

  

参数处理:   
  对于POST和PUT方法,如果没有要发送的文件,并且省略了参数的名称,则然后   通过连接的所有值来创建正文   参数。这允许发送任意实体。价值观是   如果设置了编码标志,则编码(2.3之后的JMeter版本)。

因此,如果您只想使用标准 HTTP采样器功能来解决问题,则必须不使用POST请求的文件,并将$ {myvar}设置为不带名称的请求参数,如上所述。


由于这种方法在您的情况下似乎不太适用,您可以尝试以下方法。

2. 在HTTP请求中使用之前,重写您的文件以将$ {myvar}设置为实际值。

您可以使用BSF PreProcessor / BeanShell PreProcessor执行此操作 - 将直接附加到“目标”HTTP请求 - 或BSF Sampler / {{3} - 这些应该放在之前“目标”HTTP请求。

重写采样器的代码可能类似于以下(beanshell):

// parsing params passed to script
String [] params = Parameters.split(",");

// setting values from params
String postFile = params[0];
String myVarValue = params[1];

StringBuilder data = new StringBuilder();
BufferedReader in = new BufferedReader(new FileReader(project.getProperty("basedir") +          
    System.getProperty("file.separator") + postFile));

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

// re-writting ${myvar} with actual value
String temp = data.toString().replaceAll("\\$\\{myvar\\}", myVarValue);

Writer out = new BufferedWriter(new FileWriter(project.getProperty("basedir") + 
    System.getProperty("file.separator") + postFile));
out.write(temp);
out.close();