This a Groovy code example that shows how to use the GenRocket API to build a scenario from scratch to generate a 10,000 Users and output to an XML file.


Activity Diagram

The activity diagram defines the steps and API calls necessary to load, modify and run the Scenario.

Groovy Source Code Example

package com.genRocket.engine.examples

import com.genRocket.GenRocketException
import com.genRocket.engine.EngineAPI
import com.genRocket.engine.EngineManual
import com.genRocket.generator.*
import com.genRocket.receiver.DelimitedFileReceiver
import com.genRocket.receiver.JSONFileReceiver
import com.genRocket.receiver.SQLFileInsertReceiver
import com.genRocket.receiver.XMLFileReceiver

/**
 * Created by Hycel Taylor on 12/29/16.
 *
 * This a Groovy code example that shows how to use the GenRocket API to build
 * a scenario from scratch to generate a 10,000 Users and output to four different
 * file formats:
 * <ul>
 * <li>XML</li>
 * <li>Tab-Delimited</li>
 * <li>JSON</li>
 * <li>SQL</li>
 * </ul>
 *
 * The User Domain shall contain the following Attributes:
 * <ul>
 * <li>id</li>
 * <li>lastName</li>
 * <li>firstName</li>
 * <li>middleInitial</li>
 * <li>userName</li>
 * <li>emailAddress</li>
 * <li>password</li>
 * <li>ssn</li>
 * <li>creditCard</li>
 * <li>phoneNumber</li>
 * </ul>
 */
class Scenario10000Users {

  public static void main(String[] args) {
    String scenario = '/home/userName/anyScenario.grs'
    String domainName = 'User'
    String attributeName = null
    Map<String, String> parameters = [:]
    Boolean setLoop = false

    EngineAPI api = new EngineManual()

    try {
      // Initialize Scenario
      api.scenarioLoad(scenario)
      api.scenarioClear()

      // Add Domain and Attributes
      api.domainAdd(domainName)
      api.domainSetLoopCount(domainName, 10000.toString())

      // Add Attribute, lastName
      attributeName = "${domainName}.lastName"
      api.attributeAdd(attributeName)
      parameters = ['nameType': 'lastName', 'caseType': 'capitalize', 'sortOrder': 'random', 'waitAmount': '1']
      api.generatorAdd(attributeName, NameGen.canonicalName, setLoop, parameters)

      // Add Attribute, firstName
      attributeName = "${domainName}.firstName"
      api.attributeAdd(attributeName)
      parameters = ['nameType': 'firstName', 'caseType': 'capitalize', 'sortOrder': 'random', 'waitAmount': '1']
      api.generatorAdd(attributeName, NameGen.canonicalName, setLoop, parameters)

      // Add Attribute, middleInitial
      attributeName = "${domainName}.middleInitial"
      api.attributeAdd(attributeName)
      parameters = ['randomize': 'true']
      api.generatorAdd(attributeName, AlphabetGen.canonicalName, setLoop, parameters)

      // Add Attribute, username
      attributeName = "${domainName}.username"
      api.attributeAdd(attributeName)
      parameters = ['prefix': 'User', 'reference': '#{User.id}']
      api.generatorAdd(attributeName, UsernameGen.canonicalName, setLoop, parameters)

      // Add Attribute, emailAddress
      attributeName = "${domainName}.emailAddress"
      api.attributeAdd(attributeName)
      parameters = ['prefix': 'User', 'reference': '#{User.id}', 'suffix': 'email', 'extension': 'com']
      api.generatorAdd(attributeName, EmailGen.canonicalName, setLoop, parameters)

      // Add Attribute, password
      attributeName = "${domainName}.password"
      api.attributeAdd(attributeName)
      parameters = ['textToEncrypt': '#{User.id}', 'algorithm': 'SHA-256']
      api.generatorAdd(attributeName, EncryptGen.canonicalName, setLoop, parameters)

      // Add Attribute, ssn
      attributeName = "${domainName}.ssn"
      api.attributeAdd(attributeName)
      parameters = ['increment': '0', 'generationType': 'sequential', 'initArea': '001', 'initGroup': '01', 'initSerial': '0001']
      api.generatorAdd(attributeName, SSNGen.canonicalName, setLoop, parameters)

      // Add Attribute, creditCard
      attributeName = "${domainName}.creditCard"
      api.attributeAdd(attributeName)
      parameters = ['visa16': 'true', 'masterCard': 'true']
      api.generatorAdd(attributeName, CreditCardGen.canonicalName, setLoop, parameters)

      // Add Attribute, phoneNumber
      attributeName = "${domainName}.phoneNumber"
      api.attributeAdd(attributeName)
      parameters = ['useAreaCode': 'true', 'uniqueNumbers': 'true']
      api.generatorAdd(attributeName, RandomPhoneNumberGen.canonicalName, setLoop, parameters)

      // *** Receivers must be added after Domains ***

      // Add XMLFileReceiver
      String receiverName = 'XMLFileReceiver'
      parameters = [
        path: '#{resource.output.directory}',
        fileName:"${domainName}.xml"
      ]

      api.receiverAdd(domainName, XMLFileReceiver.canonicalName, receiverName, parameters)

      // Add DelimitedFileReceiver
      receiverName = 'DelimitedFileReceiver'
      parameters = [
        path: '#{resource.output.directory}',
        fileName:"${domainName}.txt"
      ]

      api.receiverAdd(domainName, DelimitedFileReceiver.canonicalName, receiverName, parameters)

      // Add JSONFileReceiver
      receiverName = 'JSONFileReceiver'
      parameters = [
        path: '#{resource.output.directory}',
        fileName:"${domainName}.json"
      ]

      api.receiverAdd(domainName, JSONFileReceiver.canonicalName, receiverName, parameters)

      // Add SQLFileInsertReceiver
      receiverName = 'SQLFileInsertReceiver'
      parameters = [
        path: '#{resource.output.directory}',
        fileName:"${domainName}.sql",
        tableName: 'user'
      ]

      api.receiverAdd(domainName, SQLFileInsertReceiver.canonicalName, receiverName, parameters)

      // Run Scenario
      api.scenarioRun()
    } catch (GenRocketException e) {
      println(e.getMessage())
    }
  }
}