有人可以告诉我如何在HTTP Sampler的附件中访问用户定义的变量吗?
我做了什么:
创建了一个HTTP Requset Sampler(方法POST);
创建了一个变量myvar
,这是一个JMeter'随机变量'。
问题:
当我引用${myvar}
来填充Http标头时,它可以工作,但是当我在作为POST主体发送的文件中使用它时,它不会被替换,而是作为${myvar}
发送。
提前致谢!
答案 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();