JMeter - Run a python script before calling each HTTP request sampler

孤街浪徒 提交于 2021-02-06 12:55:49

问题


I am new to Jmeter. My HTTP request sampler call looks like this

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

Key value is generated by calling a python script which uses the image_id to generate a unique key.

Before each sampler I wanted to generate the key using python script which will be passed as a header to the next HTTP Request sampler.

I know I have to used some kind of preprocessor to do that. Can anyone help me do it using a preprocessor in jmeter.


回答1:


I believe that Beanshell PreProcessor is what you're looking for.

Example Beanshell code will look as follows:

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());

The code above will execute Python script and put it's response into ID variable.

You will be able to refer it in your HTTP Request as /image/${ID}/list/

See How to use BeanShell: JMeter's favorite built-in component guide for more information on Beanshell scripting in Apache JMeter and a kind of Beanshell cookbook.

You can also put your request under Transaction Controller to exclude PreProcessor execution time from load report.




回答2:


A possible solution posted by Eugene Kazakov here:

JSR223 sampler has good possibility to write and execute some code, just put jython.jar into /lib directory, choose in "Language" pop-up menu jython and write your code in this sampler.

Sadly there is a bug in Jython, but there are some suggestion on the page.

More here.




回答3:


You can use a BSF PreProcessor.

First download the Jython Library and save to your jmeter's lib directory.

On your HTTP sampler add a BSF PreProcessor, choose as language Jython and perform your needed magic to obtain the id, as an example I used this one:

import random
randImageString = ""
for i in range(16):
    randImageString = randImageString + chr(random.randint(ord('A'),ord('Z')))

vars.put("randimage", randImageString)

Note the vars.put("randimage",randImageString") which will insert the variable available later to jmeter.

Now on your test you can use ${randimage} when you need it:

Now every Request will be different changing with the value put to randimage on the Python Script.



来源:https://stackoverflow.com/questions/24512365/jmeter-run-a-python-script-before-calling-each-http-request-sampler

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!