JMeter - 在调用每个HTTP请求采样器之前运行python脚本

时间:2014-07-01 14:08:25

标签: python jmeter javabeans beanshell

我是Jmeter的新手。我的HTTP请求采样器调用看起来像这个

Path= /image/**image_id**/list/
Header =  "Key" : "Key_Value"

通过调用python脚本生成键值,该脚本使用image_id生成唯一键。

在每个采样器之前,我想使用python脚本生成密钥,该脚本将作为标头传递给下一个HTTP请求采样器。

我知道我必须使用某种预处理器来做到这一点。任何人都可以帮我使用jmeter中的预处理器。

3 个答案:

答案 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.

More here.

答案 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}

HTTP Sampler with parameters

现在每个请求都会随着Python脚本上的randimage值的变化而变化。