jmeterbeanshell

JMeter BeanShell PreProcessor


I would like to generate a random letter and assign it to a variable, then append it to the request. However, my current script is not functioning as expected. Could you assist me in identifying what might be incorrect?

import java.util.Random;

char getRandomLowercaseLetter() {
    Random rand = new Random();
    char randomLetter = (char) (rand.nextInt(26) + 'a'); // Generating a random lowercase letter
    return randomLetter;
}

// Get the current value of the randomInput variable
String currentRandomInput = vars.get("randomInput");

// Generate a random lowercase letter
char randomLetter = getRandomLowercaseLetter();

// Set the random letter as the new value for the randomInput variable
vars.put("randomInput", currentRandomInput + randomLetter);

// Logging the new value of randomInput
log.info("New randomInput value: " + vars.get("randomInput"));

Solution

    1. It's recommended to use built-in JMeter functionality and avoid scripting where possible. Your requirement can be implemented using __RandomString() function like:

      ${__RandomString(1,abcdefghijklmnopqrstuvwxyz,)}
      

      and this function can be used anywhere in your script

    2. If you prefer to do it in the code you can call RandomStringUtils.randomAlphabetic() function

      vars.put("randomInput", org.apache.commons.lang3.RandomStringUtils.randomAlphabetic(1).toLowerCase());
      
    3. And last but not the least, using Beanshell is some form of a performance anti-pattern, since JMeter 3.1 it's recommended to use JSR223 Test Elements and Groovy language for scripting so consider migrating. More information: Apache Groovy: What Is Groovy Used For?