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

前端 未结 3 465
青春惊慌失措
青春惊慌失措 2021-02-10 15:56

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

相关标签:
3条回答
  • 2021-02-10 16:36

    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.

    0 讨论(0)
  • 2021-02-10 16:38

    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.

    0 讨论(0)
  • 2021-02-10 16:39

    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.

    0 讨论(0)
提交回复
热议问题