Forum Discussion

richie's avatar
richie
Community Hero
8 months ago

GroovyScript - Extract specific number of attribute values from variable content response

Hey! I've checked my groovy script notes which contains essentially all the groovy script snippets people have ever helped me with over the years - mostly from nmrao if I'm being honest - but I hav...
  • nmrao's avatar
    8 months ago

    richie 

    You can quickly try this groovy to understand how this can be achieved in general.

    Follow inline comments:

    def range = 1..10
    
    println "Items in the range: $range"
    
    
    def startingIndex=0
    
    //Set this value, how many values to be stored 
    def endIndex=4
    
    //This is to ensure not to grab more than present in the list
    assert endIndex <= range.size(), 'Choose the endIndex less than list size'
    
    //Now get the sub list from original list
    def mySubList = range.subList(startingIndex,endIndex)
    println mySubList
    
    //In order to save data as custom property, coierce it to String
    def mySubListToString = mySubList.join(',')
    println mySubListToString //Save this at suite level
    
    //Convert string back to list when needed later
    def stringToList = mySubListToString.split()
    println stringToList

    If running the above from the ReadyAPI / SoapUI, use log.info instead of println

    Hope you knew how to store mySubListToString into Test Suite custom property.

    Note that all the properties in ReadyAPI are stored as string.

  • nmrao's avatar
    8 months ago

    richie 

    All it needs here is to replace

    def range = 1..10

    with

    def json = new groovy.json.JsonSlurper().parseText(context.response)

    def range = json.data.id.findAll()

    Change endIndex value depending on how many values that you need. 

    In order to store values at test suite level, add below statement at line number 20.

    context.testCase.testSuite.setPropertyValue('MY_SUBLIST', mySubListToString)

     

    And lines #22, 23, 24 are not needed here i.e., script assertion, as those to fetch and convert string to list. Instead use the when you need those values later.

    By the way, first it requires to fetch the MY_SUBLIST value stored at test suite level, so add below statement before using those lines.

    def mySubListToString = context.testCase.testSuite.getPropertyValue('MY_SUBLIST)

    Now it has all code it required with your data to achieve what is mentioned in the original question.

    NOTE: I am referring the line numbers here in this response from my original response's code.