1

How to extract array of values from response and set to next post request in JMETER

I tried using JSON extractor but when i set all fields populatring same value.

{"status":"success","mainCategories":[{"categoryName":"Comfort & Convenience","sortNo":"1","recommendedFeatures":[{"featureId":"MVS-2018-MIC-32","featureName":"Bluetooth® Hands-free Phone System","featureSortNumber":"0","videoURL":"","videoName":"","showVideo":"N","image":"","copy":"","intelligentMobility":"N","steps":[],"isCompleted":"N"},{"featureId":"MVS-2018-MIC-39","featureName":"Tilt steering column","featureSortNumber":"0","videoURL":"","videoName":"","showVideo":"N","image":"","copy":"","intelligentMobility":"N","steps":[],"isCompleted":"N"}],"optionalFeatures":[{"featureId":"MVS-2018-MIC-34","featureName":"Air conditioning","featureSortNumber":"0","videoURL":"","videoName":"","showVideo":"N","image":"","copy":"","intelligentMobility":"N","steps":[],"isCompleted":"N"},{"featureId":"MVS-2018-MIC-36","featureName":"Integrated Key with remote keyless entry","featureSortNumber":"0","videoURL":"","videoName":"","showVideo":"N","image":"","copy":"","intelligentMobility":"N","steps":[],"isCompleted":"N"}]},{"categoryName":"Instrumentation & Driver Controls","sortNo":"1","optionalFeatures":[{"featureId":"MVS-2018-MIC-33","featureName":"Trip computer (average fuel economy, current fuel economy, distance to empty)","featureSortNumber":"0","videoURL":"","videoName":"","showVideo":"N","image":"","copy":"","intelligentMobility":"N","steps":[],"isCompleted":"N"},{"featureId":"MVS-2018-MIC-40","featureName":"Cruise control with steering-wheel-mounted controls",

In here i have to extract the featureID and isCompleted values and set to next request. I am getting same value populating for all those 2 fields.

Armali
  • 18,255
  • 14
  • 57
  • 171
Hem
  • 41
  • 2
  • Please post full JSON and the required format of the next request – Dmitri T Jan 28 '19 at 10:59
  • Next request : "selectedFeatures": [ { "featureId": "${response}", "isCompleted": "${response}" }, { "featureId": "${response}", "isCompleted": "${response}" }, { "featureId": "${response}", "isCompleted": "${response}" }, – Hem Jan 28 '19 at 12:58
  • Does the number of selected features in your request matches the number of features you have in the response? Is that number fixed (i.e always 5 values)? – ararar Jan 28 '19 at 19:13

2 Answers2

1

You requirement is not clear, i.e. JSON is malformed, criteria of "features" selection are vague, etc. so I'll try to provide the answer basing on my very limited understanding of what you're trying to achieve.

  1. Add JSR223 PostProcessor as a child of the request which returns the above JSON
  2. Put the following code into "Script" area:

    def json = new groovy.json.JsonSlurper().parse(prev.getResponseData())
    def builder = new groovy.json.JsonBuilder()
    def selectedFeatures = new ArrayList()
    json.mainCategories.each {
        category -> category.recommendedFeatures.each {
            recommendedFeature ->
                def feature = new groovy.json.internal.LazyMap()
                feature.put('featureId', recommendedFeature.get('featureId'))
                feature.put('isCompleted',recommendedFeature.get('isCompleted'))
                selectedFeatures.add(feature)
        }
    }
    json.mainCategories.each {
        category -> category.optionalFeatures.each {
            optionalFeature ->
                def feature = new groovy.json.internal.LazyMap()
                feature.put('featureId', optionalFeature.get('featureId'))
                feature.put('isCompleted',optionalFeature.get('isCompleted'))
                selectedFeatures.add(feature)
        }
    }
    builder(selectedFeatures: selectedFeatures.collect())
    vars.put('selectedFeatures', builder.toString())
    log.info(vars.get('selectedFeatures'))
    
  3. Refer generated JSON payload as ${selectedFeatures} where required, i.e. in the "Body Data" tab of the next HTTP Request sampler.

Demo:

enter image description here

References:

Dmitri T
  • 159,985
  • 5
  • 83
  • 133
  • Hello Dmitri, Thank you very much for your help. really appreciate it. But one question if i want to set it up one value for per one field how can i do so ? – Hem Jan 29 '19 at 10:13
  • Dmitri T can you suggest how to grab individual feature id and isCompleted values and set it on next request. for exmaple i have all featureId's and isCompleted's has to populate in request in induividual fields. Please help me – Hem Jan 29 '19 at 13:39
  • Can anyone help me – Hem Jan 29 '19 at 20:20
  • No one "can help you" unless you specify what do you need in clear concise form. – Dmitri T Jan 30 '19 at 00:27
  • I have posted the full JSON request pls check all i need those featureId's and Iscompleted fields have to extract from response and set it up to those fileds sequentially. – Hem Jan 30 '19 at 09:07
0

{ "opportunityKey": "${opportunityKey}", "activityType": "${activityType}", "pdfLanguageCode": "${languageCode}", "countryCode": "${countryCode}", "division": "${division}", "salesUserID": "${userId}", "salesUserFullName": "${salesUserFullName}", "consultantImageString": "", "clientImageString": "", "selectedFeatures": [{ "featureId": "${regfeature_g1}", "isCompleted": "${regcompleted_g1}"},{ "featureId": "${regfeature_g2}", "isCompleted": "${regcompleted_g2}"}, {"featureId": "${regfeature_g3}", "isCompleted": "${regcompleted_g3}" },{ "featureId": "${regfeature_g4}", "isCompleted": "${regcompleted_g4}" },{ "featureId": "${regfeature_g5}", "isCompleted": "${regcompleted_g5}" },{ "featureId": "${regfeature_g6}", "isCompleted": "${regcompleted_g6}"},{ "featureId": "${regfeature_g7}", "isCompleted": "${regcompleted_g7}" },{ "featureId": "${regfeature_g8}", "isCompleted": "${regcompleted_g8}" }, { "featureId": "${regfeature_g9}", "isCompleted": "${regcompleted_g9}" }, { "featureId": "${regfeature_g10}", "isCompleted": "${regcompleted_g10}" }, { "featureId": "${regfeature_g11}", "isCompleted": "${regcompleted_g11}" }, { "featureId": "${regfeature_g12}", "isCompleted": "${regcompleted_g12}" }, { "featureId": "${regfeature_g13}", "isCompleted": "${regcompleted_g13}" }, { "featureId": "${regfeature_g14}", "isCompleted": "${regcompleted_g14}" } ], "miscellaneous": [] }

Hem
  • 41
  • 2