0
votes

I tried the following code to insert values into the data store using groovy in SOAP UI.

The problem is it inserts only one row into the data store.

import groovy.json.JsonSlurper
def utils = new com.eviware.soapui.support.GroovyUtils( context );
def project = testRunner.testCase.testSuite.project ;
def tcase = project.testSuites["MyTestSuite"].testCases["MyTestCase"] ; 
def tstep = tcase.getTestStepByName("GetShops");
def JSONresponse = tstep.getPropertyValue("response");
def slurper = new JsonSlurper()
def jsonElements = slurper.parseText(JSONresponse)

for ( value in jsonElements.shopId ) {
    log.info value
     result["IDS"] = value
}

Even though the log shows multiple values only the last one is getting inserted into datastore IDS column.

What am I missing here ?

3

3 Answers

0
votes

I guess result is a Map or some map-like object, so each iteration through the loop

for ( value in jsonElements.shopId ) {
    log.info value
    result["IDS"] = value
}

replaces the value stored in this map under the "IDS" key.

0
votes

The parseText function returns a data structure of lists and maps. Do a log.info to see what the json actually looks like. When you use jsonElements.shopId what you get back will be map(s). You should access that as a Map.

Try the below code to loop through the json response.

import groovy.json.JsonSlurper

def jsonResp = context.expand('${CitiesJSON - Request 1#Response}') 

def jsonElements = new JsonSlurper().parseText(jsonResp)

for ( value in jsonElements.geonames ) {
    value.each{
            log.info "${it.key}:${it.value}"
    }
}

I made use of the geonames web service and CitiesJSON - Request 1 is the name of my rest test request.

/*This code returns the below data
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Mexico City
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:MX
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Mexico City
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Mexico_City
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:-99.12766456604
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:3530597
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:19.428472427036
Thu Apr 10 17:29:50 ADT 2014:INFO:population:12294193
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Manila
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:PH
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:City of Manila
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Manila
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:120.9822
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1701668
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:14.6042
Thu Apr 10 17:29:50 ADT 2014:INFO:population:10444527
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Dhaka
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:BD
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Dhaka
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Dhaka
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:90.40743827819824
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1185241
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:23.710395616597037
Thu Apr 10 17:29:50 ADT 2014:INFO:population:10356500
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Seoul
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:KR
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Seoul
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Seoul
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:126.9784
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1835848
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:37.566
Thu Apr 10 17:29:50 ADT 2014:INFO:population:10349312
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Jakarta
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:ID
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Jakarta
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Jakarta
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:106.84513092041016
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1642911
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:-6.214623197035775
Thu Apr 10 17:29:50 ADT 2014:INFO:population:8540121
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Tokyo
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:JP
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Tokyo
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Tokyo
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:139.69171
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1850147
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:35.6895
Thu Apr 10 17:29:50 ADT 2014:INFO:population:8336599
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Taipei
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:TW
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Taipei
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Taipei
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:121.531846
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1668341
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:25.047763
Thu Apr 10 17:29:50 ADT 2014:INFO:population:7871900
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Bogotá
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:CO
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Bogotá
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Bogot%C3%A1
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:-74.08175468444824
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:3688689
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:4.609705849789108
Thu Apr 10 17:29:50 ADT 2014:INFO:population:7674366
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Beijing
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:CN
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Beijing
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Beijing
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:116.397228240967
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1816670
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:39.9074977414405
Thu Apr 10 17:29:50 ADT 2014:INFO:population:7480601
Thu Apr 10 17:29:50 ADT 2014:INFO:fcodeName:capital of a political entity
Thu Apr 10 17:29:50 ADT 2014:INFO:toponymName:Hong Kong
Thu Apr 10 17:29:50 ADT 2014:INFO:countrycode:HK
Thu Apr 10 17:29:50 ADT 2014:INFO:fcl:P
Thu Apr 10 17:29:50 ADT 2014:INFO:fclName:city, village,...
Thu Apr 10 17:29:50 ADT 2014:INFO:name:Hong Kong
Thu Apr 10 17:29:50 ADT 2014:INFO:wikipedia:en.wikipedia.org/wiki/Hong_Kong
Thu Apr 10 17:29:50 ADT 2014:INFO:lng:114.157691001892
Thu Apr 10 17:29:50 ADT 2014:INFO:fcode:PPLC
Thu Apr 10 17:29:50 ADT 2014:INFO:geonameId:1819729
Thu Apr 10 17:29:50 ADT 2014:INFO:lat:22.2855225817732
Thu Apr 10 17:29:50 ADT 2014:INFO:population:7012738
*/

If you want to access individual datasets you could probably try something like this...

for ( value in jsonElements.geonames ) {
    log.info value["name"]
}

/*this returns
Thu Apr 10 17:33:41 ADT 2014:INFO:Mexico City
Thu Apr 10 17:33:41 ADT 2014:INFO:City of Manila
Thu Apr 10 17:33:41 ADT 2014:INFO:Dhaka
Thu Apr 10 17:33:41 ADT 2014:INFO:Seoul
Thu Apr 10 17:33:41 ADT 2014:INFO:Jakarta
Thu Apr 10 17:33:41 ADT 2014:INFO:Tokyo
Thu Apr 10 17:33:41 ADT 2014:INFO:Taipei
Thu Apr 10 17:33:41 ADT 2014:INFO:Bogotá
Thu Apr 10 17:33:41 ADT 2014:INFO:Beijing
Thu Apr 10 17:33:41 ADT 2014:INFO:Hong Kong
*/

What do you mean by data store? Also, you know you can shorten your code by making it more groovy.

0
votes

As i see it, you want to store in a properties step type and you can do the following

def idsObjectStored = context.expand( '${Properties#ids}' )
def slurper = new JsonSlurper()
idsObjectStored = slurper.parseText(idsObjectStored)


for ( value in jsonElements.shopId ) {
    log.info value
    idsObjectStored.add(value)
}

Create an entry in this property i.e. idsObjectStored with [] as initial content. jsonSlurper will convert that in an object

idsObjectStored = slurper.parseText(idsObjectStored)

Now you only have to iterate and add all this values