Forum Discussion

rvteja1990's avatar
rvteja1990
Occasional Contributor
8 years ago
Solved

Assertion for raw response

I have been trying to create an assertion for raw response. I got a requirement in which whenever i see a response with Invalid URI in headers, it should fail. This is how it is displayed in response "HTTP/1.1 500 Invalid URI - /xyz/abc/123". 

 

In the above header whenever i see "Invalid URI" assertion should fail.

 

When i checked forums i found a script assertion, with which i have modified it like this. However its failing since the URI part is not mentioned in expectedHTTPResponse. I would like to make it generic, such a way that whatever may be the URI, whenever i encounter Invalid URI it should fail the assertion.

 

Below is the piece of code:

 

def expectedHTTPResponse = ['HTTP/1.1 500 Invalid URI']
def headers = messageExchange.response.responseHeaders
def actualHTTPResponse = headers['#status#']
assert expectedHTTPResponse == actualHTTPResponse, "Invalid URI" 

 

Can anyone help me with this? Any other possible solutions to achieve this?

 

 

  • AntonE's avatar
    AntonE
    8 years ago

    You can use startsWith method to check that a string has a required beginning:

     

    def expectedHTTPResponse = 'HTTP/1.1 500 Invalid URI'
    def headers = messageExchange.response.responseHeaders
    def actualHTTPResponse = headers['#status#']
    assert actualHTTPResponse.size() == 1 && actualHTTPResponse[0].startsWith(expectedHTTPResponse), "Invalid URI" 

     

    Note that I removed square brackets in expectedHTTPResponse as we compare just one element now.

  • AntonE's avatar
    AntonE
    8 years ago

    For Groovy assertion to fail its asserted value should be false, so I guess you can just invert the condition:

     

    assert !(actualHTTPResponse.size() == 1 && actualHTTPResponse[0].startsWith(expectedHTTPResponse)), "Invalid URI"

     

    Also, you may want to look at Invalid HTTP Status Code assertion instead. It won't check the string, but if code 500 is a sure sign that the test failed, it will work. You should enter one or more wrong HTTP codes there.

  • nmrao's avatar
    nmrao
    8 years ago

    Not sure why it is closed though your issue is not solved.

     

    Here is the change needed:

     

    def unExpectedHTTPResponse = 'HTTP/1.1 500 Invalid URI'
    def headers = messageExchange.response.responseHeaders
    def actualHTTPResponse = headers['#status#']
    assert !(actualHTTPResponse[0].contains(unExpectedHTTPResponse)), "Found Invalid URI in the response"

8 Replies

  • nmrao's avatar
    nmrao
    Champion Level 3
    Please post raw response. Do you want to check if the status code is 500, then fail?
    • rvteja1990's avatar
      rvteja1990
      Occasional Contributor

      This is the raw response i'm getting:

       

      HTTP/1.1 500 Invalid URI - /xyz/abc/123"

      Content-Type: text/xml

      X-Backside-Transport: FAIL FAIL

      Connection: close

       

      I want to check whether the raw response has "Invalid URI". If it has Invalid URI in response assertion should fail.

       

      Thank you.

      • AntonE's avatar
        AntonE
        SmartBear Alumni (Retired)

        You can use startsWith method to check that a string has a required beginning:

         

        def expectedHTTPResponse = 'HTTP/1.1 500 Invalid URI'
        def headers = messageExchange.response.responseHeaders
        def actualHTTPResponse = headers['#status#']
        assert actualHTTPResponse.size() == 1 && actualHTTPResponse[0].startsWith(expectedHTTPResponse), "Invalid URI" 

         

        Note that I removed square brackets in expectedHTTPResponse as we compare just one element now.