unable to update generated variable via script.

goofy78270goofy78270 Posts: 97
edited May 18 in SOAtest

I am trying to create a variable that is the abbreviated day of the week (MON, TUE, WED, ...) which I do either via the data generator tool or script. However, I am then trying to convert the variable to uppercase, but this conversion is not working, as expected.

import com.parasoft.api.*;
import groovy.util.*;
import groovy.json.JsonSlurper;
import java.text.SimpleDateFormat;

public String dayOfWeek (Object input, ExtensionToolContext context) {
    def date = new Date()
    def sdf = new SimpleDateFormat("EEE")
    dow = sdf.format(date)
    //dow = context.getValue("Generated Data Source", "db_dayOfWeek")

    dow = dow.toUpperCase()

    Application.showMessage ("Day of week for " + date + " is " + dow)
    context.setValue("db_dayOfWeek", dow)
    Application.showMessage ("Day of week for " + date + " is " + context.getValue("Generated Data Source", "db_dayOfWeek"))

This script results in the following:
Day of week for Mon May 18 14:00:16 MDT 2020 is MON
Day of week for Mon May 18 14:00:16 MDT 2020 is null

You can see in the first line, that the variable dow is set correctly, but it never gets assigned to the db_dayOfWeek variable for use in later steps.

different try with above script and data generator tool
Using the data generator tool to set the db_dayOfWeek, then running the above script by commenting out the def steps sdf and dow and uncommenting the second dow step, I get the following output, but you can see in the console output that the variable is indeed set:

---------- Test 2: determine Date and Time Variables ----------
Test 2: determine Date and Time Variables - success
set db_currentDT=2020-05-18 14:12:51
set db_startTime=15:00
set db_endTime=1600
set db_dayOfWeek=Mon
Test succeeded
---------- Test 3: set Day Of Week to UpperCase ----------
Test 3: set Day Of Week to UpperCase - failure

failure is:
Error during script execution. View Details for more information.
Cannot invoke method toUpperCase() on null object

running 2020.1 version and Use data source is checked in the script


  • benken_parasoftbenken_parasoft Posts: 911 ✭✭✭
    edited May 18

    Use a test suite variable. In other words, open the test suite editor, click the Variables tab, then click Add to define a variable of type String.
    If you use a Data Generator tool, configure it to write to that test suite variable and not a custom column name.
    If you use a script or Extension Tool, you can set a test suite variable using context.setValue("db_dayOfWeek", dow) or get the value using context.getValue("db_dayOfWeek").

  • goofy78270goofy78270 Posts: 97

    so only test suite variables can be set...not self generated variables like when you create one with a databank?

  • jakubiakjakubiak Posts: 684 admin

    Correct - values set by data banks cannot be manually changed via script.

  • benken_parasoftbenken_parasoft Posts: 911 ✭✭✭
    edited May 19

    Data Banks can write to Data Bank columns (or test suite variables). This means that if you want to store a value from an Extension Tool into a data bank column then you can chain a Data Bank to your Extension Tool. See my answers in this other thread which has examples for making a script return values within an XML or JSON document so you can chain an XML Data Bank or JSON Data Bank: How to store array to writable data source using Extension tool

    However, I believe test suite variables are really intended for what you are doing, and not custom data bank column names.

Sign In or Register to comment.