Forum Discussion

codehausss's avatar
codehausss
Contributor
9 years ago
Solved

Groovy for assertion not contain and json path

Hi folks

 

is it possible to assert not contains and json path using groovy script?

i know in the test step soapUI can add assertion via UI for contain, not contain, json path, etc.

 

how to do this assertion for not contain and json path in the test step assertion - script assertion?

 

many thank

  • Hi,

     

    Yes, consider the example:

     

     

     

    import static com.jayway.jsonpath.JsonPath.parse
    
    def json = '''{"quote": {
    	"id": "test_id",
    	"amount": 100,
    	"links":    [
    			 {
    		  "rel": "self",
    		  "href": "http://localhost:8080/quote/777"
    	   },
    			 {
    		  "rel": "customer",
    		  "href": "http://localhost:8080/customer/12345"
    	   }
    	]
     }}
    }'''
    
    def quoteId = parse(json).read('$.quote.id')
    log.info quoteId
    
    assert quoteId=="test_id"
    assert quoteId.contains('test_id')
    assert !quoteId.contains('testid') //not contains

    In the case  of a script Assertion, simply replace the json string with the script assertion's property 

    messageExchange.response.contentAsString

    Is this what you wanted?

     

    Cheers,

    Rupert

     

     

6 Replies

  • rupert_anderson's avatar
    rupert_anderson
    Valued Contributor

    Hi,

     

    Yes, consider the example:

     

     

     

    import static com.jayway.jsonpath.JsonPath.parse
    
    def json = '''{"quote": {
    	"id": "test_id",
    	"amount": 100,
    	"links":    [
    			 {
    		  "rel": "self",
    		  "href": "http://localhost:8080/quote/777"
    	   },
    			 {
    		  "rel": "customer",
    		  "href": "http://localhost:8080/customer/12345"
    	   }
    	]
     }}
    }'''
    
    def quoteId = parse(json).read('$.quote.id')
    log.info quoteId
    
    assert quoteId=="test_id"
    assert quoteId.contains('test_id')
    assert !quoteId.contains('testid') //not contains

    In the case  of a script Assertion, simply replace the json string with the script assertion's property 

    messageExchange.response.contentAsString

    Is this what you wanted?

     

    Cheers,

    Rupert

     

     

    • codehausss's avatar
      codehausss
      Contributor

      hello Rupert,

       

      many thanks for the sample script, it works.

       

      for the ! operator, is this groovy operator or soapUI operator?

       


      rupert_anderson wrote:

      Hi,

       

      Yes, consider the example:

       

       

       

      import static com.jayway.jsonpath.JsonPath.parse
      
      def json = '''{"quote": {
      	"id": "test_id",
      	"amount": 100,
      	"links":    [
      			 {
      		  "rel": "self",
      		  "href": "http://localhost:8080/quote/777"
      	   },
      			 {
      		  "rel": "customer",
      		  "href": "http://localhost:8080/customer/12345"
      	   }
      	]
       }}
      }'''
      
      def quoteId = parse(json).read('$.quote.id')
      log.info quoteId
      
      assert quoteId=="test_id"
      assert quoteId.contains('test_id')
      assert !quoteId.contains('testid') //not contains

      In the case  of a script Assertion, simply replace the json string with the script assertion's property 

      messageExchange.response.contentAsString

      Is this what you wanted?

       

      Cheers,

      Rupert

       

       


       

       

      • rupert_anderson's avatar
        rupert_anderson
        Valued Contributor

        Hi,

         

        Many thanks for accepting the solution, glad it worked for you :-)

         

        Yes, thats the Groovy ! (not) operator - isn't that what you wanted to use?

         

        Thanks,

        Rup

    • master_ace85's avatar
      master_ace85
      Occasional Contributor

      Hi ;

       

       

      The code below was used to resolvean issue that I had experienced before. Now the issue is the same groovy script is not working inReadyApi groovy script but  it does and still works in SOAPUI

       

      The same code is used to replicate

       

      import static com.jayway.jsonpath.JsonPath.parse
      
      def json = '''{"quote": {
      	"id": "test_id",
      	"amount": 100,
      	"links":    [
      			 {
      		  "rel": "self",
      		  "href": "http://localhost:8080/quote/777"
      	   },
      			 {
      		  "rel": "customer",
      		  "href": "http://localhost:8080/customer/12345"
      	   }
      	]
       }}
      }'''
      
      def quoteId = parse(json).read('$.quote.id')
      log.info quoteId

       I get the above working fine in SOAPUI 5.3.0 but when I use the same script in ReadyAPI I get the following message: 

       

      java.lang.NoClassDefFoundError: Could not initialize class net.minidev.json.JSONvalue error at ## (this would be the line that contains:

      parse(json).read('$.quote.id')

       ) 

      i read up another site that says it is missing the json-smart jar file but I confirmed that it is indeed in the lib installation dir of readyapi. I have even tried copying over SOAPUI's json-smart jar but it is an older version and it did not resolve my issue.

       

      How can I resolve this? Surely this should be compatible or do I need to do something else?

       

    • These replies have been moved.