Trying to retrieve a property based on the value of another property in the Properties test step
I have 2 Properties test steps set up in one of my test suites. And right now I need to retrieve values from the 2nd Properties test step based on a serial number from the first Properties test step...
if(incCount == true)
{
//Count the number of times an account number is used for financial transactions on the day and
//updated the "Count" in the Settlements property step
def propertySettlements = testRunner.testCase.getTestStepByName("Settlements")
paddingNum = propertySettlements.getPropertyValue("DataRowCount").length()
for(def testProperty in propertySettlements.getPropertyList())
{
if(accnum in testProperty.value)
{
def padFlag = testProperty.name.substring(testProperty.name.length()-paddingNum)
int newVal = propertySettlements.getPropertyValue("Count " + padFlag).toInteger()
newVal++
propertySettlements.setPropertyValue("Count " + padFlag, newVal.toString())
}
}
}
That isn't quite what I was after but it gives me something to try out. Will update this when I get the chance to think through that and perhaps adapt the code to better suit what I need.
Apologies HimanshuTayal, been busy with other parts of work to get back to this. What I am trying to do here is that while the script iterates through the properties of PropertyStep1, it updates the matching 'Count' property of the 'Serial Number' in PropertyStep2 with the new value based on the Serial Number that is encountered in PropertyStep1
Edit again : I just thought of another interesting quandary. What if the 'Count' property was added to PropertyStep2 after the property step was created, so that now PropertyStep2 looks like (as an example) :
1) It goes over every Serial Number in PropertyStep2 and checks if there is an appropriate Count entry, e.g. Serial Number 5 should have Count 5 etc.. If a Count entry is missing it will create one and set it to 0.
2) It will iterate over every Serial Number in PropertyStep1 and increase the Count variable in PropertyStep2. If a Serial Number cannot be found, in PropertyStep2, it will create the appropriate Serial Number entry and also create the Count entry.
Script:
def teststepa = context.testCase.getTestStepByName('Properties.A')
def teststepb = context.testCase.getTestStepByName('Properties.B')
def propertiesa = teststepa.getProperties()
def propertiesb = teststepb.getProperties()
// init, with value 0, or add properties named Count if necessary
propertiesb.findAll{it.getKey().contains("Serial")}.each {
def num = it.getKey().replace('Serial', '').replace('Number', '').trim()
if(propertiesb.keySet().contains('Count ' + num)) {
def val = (propertiesb['Count ' + num].getValue())
if(val == null || val.trim().isEmpty()) {
teststepb.setPropertyValue('Count ' + num, '0')
}
} else {
teststepb.setPropertyValue('Count ' + num, '0')
}
}
//only needed if we miss, somehow, the appropriate Serial Number entry in properties B
def cnt = 1
// iterate all serial number properties, in properties A, and increment count in properties B
propertiesa.findAll{it.getKey().contains("Serial")}.each { pa ->
def key = propertiesb.find { it.getValue().getValue() == pa.getValue().getValue() }?.getKey()
if(key == null) {
while(propertiesb.keySet().contains('Count ' + cnt) || propertiesb.keySet().contains('Serial Number ' + cnt)) {
cnt++
}
teststepb.setPropertyValue('Serial Number ' + cnt, pa.getValue().getValue())
teststepb.setPropertyValue('Count ' + cnt, '1')
} else {
def num = key.replace('Serial', '').replace('Number', '').trim()
def val = 0
//just so that we do NOT run into invalid entries
try {
val = Integer.valueOf(propertiesb.find { it.getKey() == 'Count ' + num }.getValue().getValue())
} catch(Exception e) {
val = 0
}
teststepb.setPropertyValue('Count ' + num, (++val).toString())
}
}
log.info('done')