Can I generate a random string, number, or UUID/GUID in my script?

Sometimes it’s necessary to generate a random string, number, or UUID/GUID in your load test script.

To do this, you can call any of these functions:

  • randomalpha(len) - Generates a random alphabetic string of the specified length (consisting of all ASCII letters).
  • randomnumeric(len) - Generates a random numeric string of the specified length (consisting of digits 0-9).
  • randomalphanumeric(len) - Generates a random alphanumeric string of the specified length (consisting of all ASCII letters and digits 0-9 at random).
  • uuid() - Generates a 128-bit UUID in the form of a hyphenated hexadecimal string (8-4-4-4-12), for a total of 36 characters.

These functions can only be called from within an ${} expression, similar to referencing a variable. For example:

POST https://api.slothereum.cc/orders/${randomnumeric(8)}

The ${randomnumeric(8)} section of this URL will be substituted at runtime with a random numeric string of 8 numbers.

More information is available in Variables & Expressions.

When would it make sense to use random data?

Dynamic POST or PUT bodies

Load testing a dynamic web application or API often requires that your script create resources on the server or submit a web form via an HTTP POST or PUT request.

It’s usually a good idea to submit different data with each such request. To do this, you can either use a dataset with predefined values, or generate the data randomly on the fly with an expression.

Cache busting

It’s common for busy sites to be situated behind a caching proxy or web application firewall that caches identical-looking requests to keep them from hitting your application servers. If you need to ensure that your load test traffic hits the actual servers, bypassing such a caching layer, you can add random query strings to the URLs to make them dynamic. For example:

GET https://swag.slothereum.cc/store/products?_=${randomalpha(16)}

In this URL we’ve employed an underscore query parameter with a random value, to make sure each request is different, thereby bypassing the caching layer.