Forum Discussion

hazel_chua's avatar
hazel_chua
Contributor
5 years ago

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.

 

So, in my groovy script, I am processing through the information from the first Properties step which is something like : 

Row 1 : 1

Serial Number 1 : 12345

Time 1 : <timestamp 1>

Row 2 : 2

Serial Number 2 : 12346

Time 2 : <timestamp 2>

Row 3 : 3

Serial Number 3 : 12345

Time 3 : <timestamp 3>

whereas in Property Step 2 it looks like :

Row 1 : 1

Serial Number 1 : 12345

Count 1 : 0

Row 2 : 2 

Serial Number 2 : 12346

Count 2 : 0

Row 3 : 3

Serial Number 3 : 12347

Count 3 : 0

 

Now, I need to update the Count value of Properties step 2 whenever I encounter the serial number in Properties step 1.  Is there any way to do that without it getting messy..??  Also, the properties, when loaded, are sorted based on other fields, not based on the serial numbers.

  • hazel_chua's avatar
    hazel_chua
    4 years ago

    eventually this is what I ended up doing : 

     

     

    	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())
    			}
    		}
    	}
    

     

     

  • hazel_chua :

     

    Hope below code will help you out in resolving your issue:

     

    //For getting count from Properties step 1
    def propertiesStep = testRunner.testCase.getTestStepByName("Properties")
    HashMap<String,Integer> map = new HashMap<String,Integer>();
    for(testProperty in propertiesStep.getPropertyList()){
    	if(testProperty.name.contains("Serial")){
    		if(map.containsKey(testProperty.getValue()) )
    			map.put(testProperty.getValue(), map.get(testProperty.getValue())+1)
    		else{
    			map.put(testProperty.getValue(), 1)
    		}
    	}
    }
    //For setting count in Properties step 2
    def propertiesStep1 = testRunner.testCase.getTestStepByName("Properties1")
    for(testProperty in propertiesStep1.getPropertyList()){
    	
    	for(Map.Entry entry in map.entrySet()){
    		if(entry.getKey() in testProperty.value){
    			flag = testProperty.name.substring(testProperty.name.length()-1);
    			propertiesStep1.setPropertyValue("Count "+flag.toString(),entry.getValue().toString())
    		}
    	}
    }
    • hazel_chua's avatar
      hazel_chua
      Contributor

      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.

       

      Thanks

    • hazel_chua's avatar
      hazel_chua
      Contributor

      eventually this is what I ended up doing : 

       

       

      	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())
      			}
      		}
      	}