Forum Discussion

Mis3's avatar
Mis3
Frequent Contributor
4 years ago

Groovy: Fails to Display Request Status

I am building a Groovy script to read an external file and execute a testStep one by one.

Somehow log.info can successfully display the data (basicMSISDN, NAM, etc) of the XML response but not the request status.  In log.info, resultCode=Null and message=Null.

Not sure what to do to get the resultCode so I have a log file for tracking.

Thanks.

 

------------------------------------------------------------------------------------------------------------------------------------

My Groovy script:

...

def xmlResponse = tStep.getPropertyValue("Response")
def holder = groovyUtils.getXmlHolder(xmlResponse)

def MESSAGE11 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/resultCode")
def MESSAGE12 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/message")

def MESSAGE1 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/basicMsisdn")
def MESSAGE2 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/serviceProfile/nam")
def MESSAGE3 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/serviceProfile/roamingProfileId")
def MESSAGE4 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/serviceProfile/odbProfileId")

log.info " Seq="+i+" "+data[0]+"| Result: "+MESSAGE1+", "+MESSAGE2+", "+MESSAGE3+", "+MESSAGE4+" "+MESSAGE11+" "+MESSAGE12

...

-----------------------------------------------------------------------------------------------------------------------------------------------

Response of the testStep:

<<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">

   <soap:Body>

      <ns2:getImsiDataResponse resultCode="0" message="success" xmlns:ns2="http://www.netnumber.com/titan/sdm/soap/types">

         <imsiData imsi="302330000006120">

            <basicMsisdn>14313140097</basicMsisdn>

            <serviceProfile>

               <nam>csps</nam>

               <transferOfSm>cs</transferOfSm>

               <roamingProfileId>320</roamingProfileId>  ...

 

---------------------------------------------------------------------------------------------------------------------------------------------------

  • Mis3 

    Oh, I got what you are point now.

     

    You are trying to access the attributes of a node. The xpath is incorrect, that is why data is not shown for you.

    Attributes are accessed using @Attribute

     

    Here is another simple way of accessing xml data using XmlSlurper. If you notice, the data is accessed dot(.) after node name, then dot (.) and node name like how we see.

    NOTE: you can replace printf with log.info

     

  • nmrao's avatar
    nmrao
    Champion Level 3
    what is the expected value for what you are asking?
    What does it show when the same is executed manually?
    Why do you need to run with groovy? what is the use case?
    • Mis3's avatar
      Mis3
      Frequent Contributor

      Below is part of the response of the testStep.  The request was successful.   Strange that I can extract the parameters like basicMSISDN, nam, roamingProfile to the log file, the resultCode and message show Null.

       

      Response:

      <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
      <soap:Body>
      <ns2:getImsiDataResponse resultCode="0" message="success" xmlns:ns2="http://www.abc.com/titan/sdm/soap/types">
      <imsiData imsi="302330000006120">
      <basicMsisdn>12313140097</basicMsisdn>
      <serviceProfile>
      <nam>csps</nam>
      <transferOfSm>cs</transferOfSm>
      <roamingProfileId>320</roamingProfileId>
      ...

      ...

       

      Success response:  <ns2:getImsiDataResponse resultCode="0" message="success" xmlns:ns2="http://www.abc.com/titan/sdm/soap/types">

      Failed response:   <ns2:getImsiDataResponse resultCode="40" message="objectDoesNotExist" xmlns:ns2="http://www.abc.com/titan/sdm/soap/types"/>

       

      The use case is I have to run this getImsiData API many time.  So , I created a Groovy script to read the data from a CSV in my laptop.  The Groovy script will execute the testStep one by one.

       

       

       

       

       

      • nmrao's avatar
        nmrao
        Champion Level 3
        Thanks, but i did not understand what you mean by result code and message? Would you please clarify.?
        Possible to show the raw tab of response?
  • nmrao's avatar
    nmrao
    Champion Level 3

    Mis3 

    Oh, I got what you are point now.

     

    You are trying to access the attributes of a node. The xpath is incorrect, that is why data is not shown for you.

    Attributes are accessed using @Attribute

     

    Here is another simple way of accessing xml data using XmlSlurper. If you notice, the data is accessed dot(.) after node name, then dot (.) and node name like how we see.

    NOTE: you can replace printf with log.info

     

    • Mis3's avatar
      Mis3
      Frequent Contributor

      Working now.  THANKS, Rao.

       

      This is what I did:

      def xmlResponse = tStep.getPropertyValue("Response")
      def holder = groovyUtils.getXmlHolder(xmlResponse)
      def xml = new XmlSlurper().parseText(xmlResponse)

      def MESSAGE1 = xml.Body.getImsiDataResponse.@resultCode.text()
      def MESSAGE2 = xml.Body.getImsiDataResponse.@message.text()
      def MESSAGE3 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/basicMsisdn")
      def MESSAGE4 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/serviceProfile/nam")
      def MESSAGE5 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/serviceProfile/roamingProfileId")
      def MESSAGE6 = holder.getNodeValue("/soap:Envelope/soap:Body/ns2:getImsiDataResponse/imsiData/serviceProfile/odbProfileId")
      //   def MESSAGE6 = xml.Body.getImsiDataResponse.imsiData.serviceProfile.odbProfileId.text()

       

      log.info " Seq="+i+" "+data[0]+" Result: "+MESSAGE1+", "+MESSAGE2+", "+MESSAGE3+", "+MESSAGE4+" "+MESSAGE5+" "+MESSAGE6
      report << "\n"+"Seq="+i+" "+sdf.format(log_date)+"|"+data[0]+"|Result: "+MESSAGE1+" "+MESSAGE2+" "+MESSAGE3+" "+MESSAGE4+ " "+MESSAGE5+" "+MESSAGE6

       

      I noticed that if a parameter does not exist in the response:

      if I use holder.getNodeValue, MESSAGE6 would display "null".  (I prefer this, more precise)

      if I use xml.Body..., MESSAGE6 would display nothing.

      Is this normal?

       

      • nmrao's avatar
        nmrao
        Champion Level 3
        xml.Body contain another node, but not node value.