Dynamic Data Generation

Have you ever wanted to dynamically create data as you write a script? Wished you had more data to work with?

Often when writing a test, you have been given a set of prescribed data in advance. However, sometimes it can be helpful to create data as you go, so that you can conduct randomized tests or drive your testing from within the script instead of working with an external file.

The applications for dynamic content generation are widely varying. For instance, you can dynamically generate email addresses for testing against a form. Alternately, you can dynamically create a file on your Eggplant Functional machine to draw data from as you test. This post will cover both of these scenarios.

Using Dynamic Elements in Scripts; Data Generation and Dynamic Variable Creation

There are a few approaches to generating data content dynamically within your script. One of these approaches is to use Any. Another is the Random() function. These are going to be the most common approach to randomized testing in your scripts or conducting data-driven tests, and both will be covered in the following examples.

Using Any

Any is a chunk expression that allows you to select a random piece of data from a previously existing list or range. For example, if you store a range of numbers between 1 and 20 in a variable, and then use Any to select one of the numbers, your code might look like this.

Example:

put 1..20 into NumberRange

Log any item of NumberRange

The logged number will be any number between 1 and 20, randomly selected by the script at run time. The following is a more in-depth example using this approach.

Example:

#This creates an empty file with a random five-character name. This method can be adapted to name files of various types.#

Put "~/Temp/" into Path -- Specify a file path

 

put a..z as list into alphas -- Create a range of letters

put 1..5 as list into nums -- Create a range of numbers

 

put (any item of alphas for each item of nums) joined by empty into Name -- Dynamically create the name using any. Note that this initially creates a list, but then joins the items of the list with empty, creating a string from the list items, and storing that in the variable Name.

 

put path & Name into filePath -- Store the path and name into a fully assembled file path

put filePath & ".txt" into myFile -- Assemble the file with file extension

if there is not a file myFile then -- Check to make sure the file does not already exist before creating it

create file myFile -- Create the file

log "Created file " & myFile -- Log a message that the file was created, as well as its full path

end if

When you create your data using the Any Command, all of the content is randomly selected, so the data itself is random. As we just established, this randomization is created out of a base of pre-existing information. So, what if you have a variety of different elements, all of which are variable and need to be assembled into a larger data string?

One example of this is dynamic email generation. In this situation, there are four elements to the email address, three of which are varying. There is the first part of the email address, which we will call the ‘name’. Then, there is the “@” symbol, followed by a domain name, which is also dynamic. Finally, there is the ending, which can either be “.com”, ”.net”, or “.org”.

Example:

insert (".com",".net",".org") into ListOfEnds

set Part1 to (any item of a..z for each item of 1..6) joined by empty -- Make a random first half

set Part2 to (any item of 1..9 for each item of 1..6) joined by empty -- Make a random second half

set EmailEnd to any item of ListOfEnds -- Choose a random ending

put Part1 & "@" & Part2 & EmailEnd into DynamicAddress -- Compile the email address

Log DynamicAddress -- Log the dynamically created email address

As you can see in the example above, three different parts are chosen randomly using Any, and then concatenated using an ampersand, and stored in a final variable for use later. This could be typed directly into the Username field of a login screen if desired, using TypeText.

Using Random()

This technique can be incorporated into a larger script which dynamically generates an external file of randomized customer data. The script generating random email addresses from above can be turned into a handler, and other handlers can then be created to dynamically generate customer names and ID numbers. In turn, the script can call out to these other handlers to generate the data and then the information returned by these called portions of code can be organized and written out to a file on the local Eggplant Functional system.

//--The file is going to contain a column of customer ID numbers, a column of customer names, and a column of email addresses, all dynamically generated during the script run--\\

 

// Create random file contents

 

Put 20 into numberofRecords -- Define the number of records you want to create

 

Repeat numberofRecords times -- Repeat the number of times you want rows in your file

 

// Create customer ID by calling handler

put createID() & comma into Row

 

// Create customer name by calling handler

put createName() & comma after Row

 

// Create customer email by calling handler

put createEmail() after Row

 

// Add row to file

put row & return after FileContents

end repeat

 

// Create file and store the created content in it

 

Put "~/Temp/CustomerEmail.txt" into myFile -- Specify a location on the Eggplant system for the file to be created

 

put "ID,Name,Email" & return into HeaderRow -- Create a header row for the file

 

put HeaderRow before FileContents -- Insert the header row before the previously created content

 

put fileContents into file myFile -- Insert the contents into the file, located on the Eggplant system

 

//FUNCTIONS AND HANDLERS GO AT THE BOTTOM OF THE SCRIPT\\

 

// Create customer ID

 

to createID

put random(100000,999999) into customerID -- Use the random function to create the numbers for the ID

put "-" after character 2 of customerID -- Put the ID in the correct format by inserting a dash

returncustomerID -- Return the newly created customer ID to the calling handler

end createID

 

// Generate random names for file

 

to createName

put a..z into Letters -- Store the alphabet in a variable using a range

put random(5,10) into NewNameLength -- Use the random function to randomly select a name length

repeat new NameLength times -- Repeat for each character in the new customer name

put any item of letters after NewName -- Create a new name using random letters

end repeat

returnCapitalized(NewName) -- Capitalize the new customer name and return it to the calling handler

end createName

 

// Dynamically create random email addresses

 

to createEmail

insert(".com",".net",".org") into ListOfEnds

set Part1 to (any item of a..z for each item of 1..6) joined by empty -- Make a random first half

set Part2 to (any item of 1..9 for each item of 1..6) joined by empty -- Make a random second half

set EmailEnd to any item of ListOfEnds -- Choose a random ending

put Part1&"@"&Part2&EmailEnd into DynamicAddress -- Compile the email address

Return DynamicAddress -- Return the address to the calling handler

end createEmail

The main body of the script consists of a repeat loop which calls the handlers (these could also be made into separate scripts and called as sub-scripts). This loop will repeat any number of times, as defined by a variable that specifies the number of customer records desired.

Example:

// Specify a location on the Eggplant Functional system for the file to be created

Put "~/Temp/CustomerData.txt" into myFile

// Define the number of records to be created

Put 20 into numberofRecords

// Create random file contents

Repeat numberofRecords times -- Repeat the number of times you want rows in your file

// Create customer ID by calling handler

put createID() & comma into Row

// Create customer name by calling handler

put createName() & comma after Row

// Create customer email by calling handler

put createEmail() after Row

// Add row to file

put row & return after FileContents

end repeat

Both the handler for the Name creation and ID creation use the random() function. The random() function takes either one or two numbers as parameters, and it then generates a number either between 0 and the number specified, or between the two specified numbers.

Example:

//Create Customer ID

to createID

put random(100000,999999) into customerID -- Use the random function to create the numbers for the ID

put "-" after character 2 of customerID -- Put the ID in the correct format by inserting a dash

return customerID -- Return the newly created customer ID to the calling handler

end createID

 

// Generate random names for file

to createName

put a..z into Letters -- Store the alphabet in a variable using a range

put random(5,10) into NewNameLength -- Use the random function to randomly select a name length

repeat newNameLength times -- Repeat for each character in the new customer name

put any item of letters after NewName -- Create a new name using random letters

end repeat

return Capitalized(NewName) -- Capitalize the new customer name and return it to the calling handler

end createName

At the end, after everything has been generated, the created contents are written out to the file, creating the file if it did not previously exist, and overwriting any previously existing data if it did.

Example:

// Create file and store the created content in it

put "ID,Name,Email" & return into HeaderRow -- Create a header row for the file

put HeaderRow before FileContents -- Insert the header row before the previously created content

put fileContents into file myFile -- Insert the contents into the file, located on the Eggplant Functional system

 

This topic was last updated on August 19, 2021, at 03:30:51 PM.

Eggplant icon Eggplantsoftware.com | Documentation Home | User Forums | Support | Copyright © 2022 Eggplant