cancel
Showing results for 
Search instead for 
Did you mean: 

ReadyAPI script assertion 'is not equal' to for JSON response

SOLVED
Highlighted
Frequent Contributor

ReadyAPI script assertion 'is not equal' to for JSON response

Greetings,

 

I would like to assert that certain values are not present in the response of my REST request.

I'm using ReadyAPI V2.8.0.

when sending the endpoint I'm expecting only values for the language='nl'. If the language is 'fr','de' or 'en' the testcase should fail.

I receive a lot of answers for that request, so using the Smart Assertions is not an option.

I've tried regular expression, but I don't seem to understand this.

I've seen in the documentation of SmartBear that I could use Script Assertions but I don't find snippets to get to that.

  • * (Not) Contains is only looking for the node
  • * JsonPath expression is only looking for the node
  • * Equals is looking for a text (or property, but here it's not about properties) but those abreviations could be in a complete description and that is not what I need.
  •  

Does anyone have an idea please?

Response is Json and looks like this

 

Isnotpresent.png

 

You won't be able to test the endpoint as there is a strong security on it.

Thanks in advance

Kind Regards,

AboveAndBeyond

13 REPLIES 13
Highlighted
Community Manager

Hi @AboveAndBeyond ! Did the recent suggestions help you?🙂


Sonya Mihaljova
Community and Education Specialist

Learn SmartBear products in a fun and easy way and prove your knowledge!
>>Participate in the TechCorner Challenge today
Highlighted
Frequent Contributor

Hello @sonya_m 

I don't know yet. I'm currently working on another project. I will look at it next week.

 

Kind regards,

AboveAndBeyond

Highlighted
Frequent Contributor

Hello @HimanshuTayal 

Thanks for your response but I'm getting error 

 

"Error in assertion script of the [REST Request] test step: startup failed: Script4.groovy: 11: Unexpected input: 'not'; Expecting @ line 11, column 19. assert checkForEN not in language, "Not expecting value ${checkFor} for language, but found" ^ org.codehaus.groovy.syntax.SyntaxException: Unexpected input: 'not'; Expecting @ line 11, column 19. at org.apache.groovy.parser.antlr4.AstBuilder$1.syntaxError(AstBuilder.java:4542) at groovyjarjarantlr4.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:44) at groovyjarjarantlr4.v4.runtime.Parser.notifyErrorListeners(Parser.java:543) at groovyjarjarantlr4.v4.runtime.DefaultErrorStrategy.notifyErrorListeners(DefaultErrorStrategy.java:154) at org.apache.groovy.parser.antlr4.internal.DescriptiveErrorStrategy.reportInputMismatch(DescriptiveErrorStrategy.java:104) at org.apache.groovy.parser.antlr4.internal.DescriptiveErrorStrategy.recover(DescriptiveErrorStrategy.java:55) at............"

 

Code

import groovy.json.JsonSlurper

def rawjson = context.expand( '${REST Request#Response}' )
def json = new groovy.json.JsonSlurper().parseText(rawjson)
def language = json.pdcData.concepts.description.language
log.info language
def checkForFR = "fr"
def checkForEN = "en"
def checkForDE = "de" //here I've included the values in an array cos theres >1 value to assert against
//assert languageVals.every {it != checkFor}, "Not expecting value ${checkFor} for language, but found"
assert checkForEN not in language, "Not expecting value ${checkFor} for language, but found"
assert checkForEN not in language, "Not expecting value ${checkFor} for language, but found"
assert checkForEN not in language, "Not expecting value ${checkFor} for language, but found"

@sonya_m  no, I still didn't upgrade to newer version of ReadyAPI as the bugfixing doesn't help my case (went looking on the website which fixes). Also, I do understand that ReadyAPI is upgrading, but it seem that a few of our code isn't working anymore, thus we need to re-work all the time. This is time and resource consuming for the client. We can't afford this. Also when we aren't on the project anymore, this project needs to sustain itself without human interference. So if ReadyAPI updates each time and mingles itself with the codes of the users, there is no positive use to update. Sorry 😞 

 

Kr,

AboveAndBeyond

 

 

 

 

Highlighted
Frequent Contributor

Hello,

 

I've looked into this with a developper. For our response we see that we actually have an array in an array. Therefore the code needed to be adapted a bit.

The response looks like this:

Tue Sep 22 16:30:58 CEST 2020: INFO: [[nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], [nl], ......etc..]

Assertion second part:

 

.....

def checkForLanguage = "nl"

def onlyExpectedLanguage = true
language.each {
  element -> element.each {
  		languageUnderTest -> {
  				if (!languageUnderTest.equals(checkForLanguage)) {
  						onlyExpectedLanguage = false
  						log.info "Found unexpected language: ${languageUnderTest}"
  				}
  		}
  }
}

assert onlyExpectedLanguage, "Found a different language than ${checkForLanguage}"

 

In this case I was, with the previous code, asking to compare a string (def checkForLanguage = "nl")  with an array ( def language = json.pdcData.concepts.description.language ) and thus of course the code passed each time because it was comparing something (array) with nothing (string).

So in order to be able to compare, I needed to loop over each array in that array.

Mostly the code is written like this:

 

def expected = true
x.each{
     y -> y.each{
           variableName -> {
                             //your statement here
                           }
          }
     }
assert expected, "error message here"

 

 

Thanks for your help anyways 😄 

Kind regards,

AboveAndBeyond

View solution in original post

New Here?
Join us and watch the welcome video:
Announcements
TechCorner Leaderboard
Want a fun and easy way to learn ReadyAPI and show off your skills? Try solving weekly TechCorner challenges and get into the Leaderboard!


Challenge Status

Get a full Raw JMS request

Participate!

Compare an expected JSON value and actual response in Events

Participate!

Fetch value/data from JSON response using Groovy Script

See replies!

Get data from Petstore and add it to Excel sheets

Participate!
Top Kudoed Authors