Lina
August 13, 2018, 12:48pm
1
Hello all,
my apologies if this topic was already discussed (could not find such).
The question is the following:
every time I get a response, I have a kind of data – the list of the franchises with the genres list “inside” every franchise:
franchises
0
![](http://jsonviewer.stack.hu/extjs/images/default/s.gif)![](http://jsonviewer.stack.hu/array.gif)[genres](http://jsonviewer.stack.hu/#)
1
2
n
I need to iterate each franchise and verify that genres list contains ‘comedy’ value because this genres list can be different for each franchise.
I started with:
def responseDataGenres = WS.sendRequest(findTestObject(‘Object Repository/APIs/_(api)_genres’))
if (WS.verifyResponseStatusCode(responseDataGenres, 200)) {
JsonSlurper parser = new JsonSlurper()
def parsedResp = parser.parseText(responseDataGenres)
WS.verifyElementPropertyValue(responseDataGenres, “franchises[i].genres”, “comedy”)
This is not a solution (as I can see) because ‘comedy’ is not a single value
Thanks in advance
Hello,
try following:
import groovy.json.JsonSlurperdef jsonText = '{"franchises":[{"genres":[{"0":"comedy"},{"1":"sitcom"},{"2":"family issues"}]}]}' def response = new JsonSlurper().parseText(jsonText)
assert response.franchises[0].genres*.find { 'comedy' in it.value }.key.size() == 1
assert response.franchises[0].genres*.find { 'tragedy' in it.value }.key.size() == 1
console:
08-13-2018 03:49:20 PM - [START] - Start Test Case : Test Cases/__Sandbox/New Test Case 7
08-13-2018 03:49:20 PM - [INFO] - Evaluating variables for test case
08-13-2018 03:49:20 PM - [START] - Start action : Statement - jsonText = "{"franchises":[{"genres":[{"0":"comedy"},{"1":"sitcom"},{"2":"family issues"}]}]}"
08-13-2018 03:49:20 PM - [END] - End action : Statement - jsonText = "{"franchises":[{"genres":[{"0":"comedy"},{"1":"sitcom"},{"2":"family issues"}]}]}"
08-13-2018 03:49:20 PM - [START] - Start action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-13-2018 03:49:20 PM - [END] - End action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-13-2018 03:49:20 PM - [START] - Start action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [END] - End action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [START] - Start action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [END] - End action : Statement - assert key.size() == 1
08-13-2018 03:49:20 PM - [FAILED] - Test Cases/__Sandbox/New Test Case 7 FAILED because (of) org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert response.franchises[0].genres*.find { 'tragedy' in it.value }.key.size() == 1 | | | | | | | | | | | | [null, null, null] [] 0 false | | | [[0:comedy], [1:sitcom], [2:family issues]] | | [genres:[[0:comedy], [1:sitcom], [2:family issues]]] | [[genres:[[0:comedy], [1:sitcom], [2:family issues]]]] [franchises:[[genres:[[0:comedy], [1:sitcom], [2:family issues]]]]]
08-13-2018 03:49:20 PM - [END] - End Test Case : Test Cases/__Sandbox/New Test Case 7
Lina
August 13, 2018, 3:21pm
3
Hello Andrej,
thank you for your quick response.
I added to the script your solution, but used not exact jsonText as you mentioned, because my Json is different during every GET call I do. So, I got the same failed case for ‘comedy’ which you got for ‘tragedy’ verification
import groovy.json.JsonSlurperdef responseDataGenres = WS.sendRequest(findTestObject('Object Repository/APIs/_(api)_genres'))responseText = responseDataGenres.getResponseText()def parsed = new JsonSlurper().parseText(responseText)assert parsed.franchises[0].genres*.find { 'comedy' in it.value }.key.size() == 1
Am I wrong with json parsing?
Thanks
Lina,
could you please post how your response Json looks like?
btw. is it possible that 1st object does not have ‘comedy’ value in it?
Lina
August 14, 2018, 6:36am
5
Andrej,
regarding this issue “is it possible that 1st object does not have ‘comedy’ value in it?” - No, ‘comedy’ value is always in it, because I applied this filter and verify that every franchise contains this value
Json is attached.
Thank you.
it was not working becouse there was difference in genres. in response it’s plain array so it should look like this:
import groovy.json.JsonSlurper
def jsonText = '{"franchises":[{"genres":["comedy","sitcom","family issues"]}]}'
def response = new JsonSlurper().parseText(jsonText)
println response.franchises[0].genres.find { genre -> genre == 'comedy'}
assert response.franchises[0].genres.find { genre -> genre == 'comedy'} != null
assert response.franchises[0].genres.find { genre -> genre == 'tragedy'} != null
console:
08-14-2018 09:05:11 AM - [START] - Start Test Case : Test Cases/__Sandbox/New Test Case 7
08-14-2018 09:05:11 AM - [INFO] - Evaluating variables for test case
08-14-2018 09:05:12 AM - [START] - Start action : Statement - jsonText = "{"franchises":[{"genres":["comedy","sitcom","family issues"]}]}"
08-14-2018 09:05:12 AM - [END] - End action : Statement - jsonText = "{"franchises":[{"genres":["comedy","sitcom","family issues"]}]}"
08-14-2018 09:05:12 AM - [START] - Start action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-14-2018 09:05:12 AM - [END] - End action : Statement - response = new groovy.json.JsonSlurper().parseText(jsonText)
08-14-2018 09:05:12 AM - [START] - Start action : Statement - println(genres.find({ java.lang.Object genre -> ... }))comedy
08-14-2018 09:05:12 AM - [END] - End action : Statement - println(genres.find({ java.lang.Object genre -> ... }))
08-14-2018 09:05:12 AM - [START] - Start action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [END] - End action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [START] - Start action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [END] - End action : Statement - assert genres.find({ java.lang.Object genre -> ... }) != null
08-14-2018 09:05:12 AM - [END] - End Test Case : Test Cases/__Sandbox/New Test Case 7
08-14-2018 09:05:12 AM - [FAILED] - Test Cases/__Sandbox/New Test Case 7 FAILED because (of) org.codehaus.groovy.runtime.powerassert.PowerAssertionError: assert response.franchises[0].genres.find { genre -> genre == 'tragedy'} != null | | | | | | | | | | null false | | | [comedy, sitcom, family issues] | | [genres:[comedy, sitcom, family issues]] | [[genres:[comedy, sitcom, family issues]]] [franchises:[[genres:[comedy, sitcom, family issues]]]]
Lina
August 14, 2018, 7:36am
7
Andrej, thank you very much. It works.
Hi,
Please follow below tutorial
Hi,
Please follow below tutorial