我是Jmeter的新手。我的HTTP请求采样器调用看起来像这个
Path= /image/**image_id**/list/
Header = "Key" : "Key_Value"
通过调用python脚本生成键值,该脚本使用image_id
生成唯一键。
在每个采样器之前,我想使用python脚本生成密钥,该脚本将作为标头传递给下一个HTTP请求采样器。
我知道我必须使用某种预处理器来做到这一点。任何人都可以帮我使用jmeter中的预处理器。
答案 0 :(得分:5)
我相信Beanshell PreProcessor是您正在寻找的。
示例Beanshell代码如下所示:
import java.io.BufferedReader;
import java.io.InputStreamReader;
Runtime r = Runtime.getRuntime();
Process p = r.exec("/usr/bin/python /path/to/your/script.py");
p.waitFor();
BufferedReader b = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = "";
StringBuilder response = new StringBuilder();
while ((line = b.readLine()) != null) {
response.append(line);
}
b.close();
vars.put("ID",response.toString());
上面的代码将执行Python脚本并将其响应放入ID
变量中。
您可以在HTTP请求中将其引用为 /图像/ $ {ID} /列表/
有关Apache JMeter中的Beanshell脚本和一种Beanshell食谱的更多信息,请参阅How to use BeanShell: JMeter's favorite built-in component指南。
您还可以将请求置于Transaction Controller下,以从加载报告中排除PreProcessor执行时间。
答案 1 :(得分:3)
Eugene Kazakov发布的可能解决方案 here:
JSR223采样器很有可能编写和执行一些代码, 只需将jython.jar放入/ lib目录,在“语言”弹出窗口中选择 menu jython并在此采样器中编写代码。
Sadly there is a bug in Jython, but there are some suggestion on the page.
答案 2 :(得分:2)
您可以使用BSF预处理器。
首先下载Jython Library并保存到您的jmeter的lib目录。
在你的HTTP采样器上添加一个BSF预处理器,选择语言Jython并执行你需要的魔法来获取id,作为我使用这个的例子:
import random
randImageString = ""
for i in range(16):
randImageString = randImageString + chr(random.randint(ord('A'),ord('Z')))
vars.put("randimage", randImageString)
请注意vars.put("randimage",randImageString")
,它会将稍后可用的变量插入jmeter。
现在测试时,您可以在需要时使用${randimage}
:
现在每个请求都会随着Python脚本上的randimage值的变化而变化。