【问题标题】:copy entire response of soap request as an argument in another request将soap请求的整个响应复制为另一个请求中的参数
【发布时间】:2017-08-09 14:35:31
【问题描述】:

我想使用 groovy 脚本将“return”“\return”之间的标签/正文作为“arg1”“/arg1”之间的参数复制到后续的soap请求中。

我试图参数化每个标签,但这样做很难,我想知道是否有任何方法可以在“return”和“\return”之间复制整个正文。

不确定我的问题是否有意义,但我是 Stack-overflow 的新手,想学习 soapui 和 groovy。

我的请求的响应如下:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getxyz1Response xmlns:ns2="xyz.com">
         <return>
            <xyz1>70</xyz1>
            <balance>33.0000000000</balance>
            <carriedBalance>0E-10</carriedBalance>
            <createDatetime>2017-08-09T00:00:00Z</createDatetime>
            <createTimeStamp>2017-08-09T22:48:24.423Z</createTimeStamp>
            <currencyId>1</currencyId>
            <deleted>0</deleted>
            <dueDate>2017-08-09T00:00:00Z</dueDate>
            <id>43194</id>
            <xyz1>1</xyz1>
            <xyz1>
               <amount>10.0000343500</amount>
               <amountAsDecimal>10.0000343500</amountAsDecimal>
               <callCounter>0</callCounter>
               <deleted>0</deleted>
               <description>testCategory90795 Period from 30/03/2017 to 29/04/2017</description>
               <id>113492</id>
               <itemId>220</itemId>
               <percentage>0</percentage>
               <price>10.0000343500</price>
               <priceAsDecimal>10.0000343500</priceAsDecimal>
               <quantity>1.0000000000</quantity>
               <quantityAsDecimal>1.0000000000</quantityAsDecimal>
               <sourcexyz1Id>22143</sourcexyz1Id>
            </xyz1>
            <xyz1>
               <amount>10.0000343500</amount>
               <amountAsDecimal>10.0000343500</amountAsDecimal>
               <callCounter>0</callCounter>
               <deleted>0</deleted>
               <description>testCategory90795 Period from 30/04/2017 to 29/05/2017</description>
               <id>113493</id>
               <itemId>220</itemId>
               <percentage>0</percentage>
               <price>10.0000343500</price>
               <priceAsDecimal>10.0000343500</priceAsDecimal>
               <quantity>1.0000000000</quantity>
               <quantityAsDecimal>1.0000000000</quantityAsDecimal>
               <sourcexyz1Id>22143</sourcexyz1Id>
            </xyz1>
            <xyz1>
               <amount>10.0000343500</amount>
               <amountAsDecimal>10.0000343500</amountAsDecimal>
               <callCounter>0</callCounter>
               <deleted>0</deleted>
               <description>testCategory90795 Period from 30/05/2017 to 29/06/2017</description>
               <id>113494</id>
               <itemId>220</itemId>
               <percentage>0</percentage>
               <price>10.0000343500</price>
               <priceAsDecimal>10.0000343500</priceAsDecimal>
               <quantity>1.0000000000</quantity>
               <quantityAsDecimal>1.0000000000</quantityAsDecimal>
               <sourcexyz1Id>22143</sourcexyz1Id>
            </xyz1>
            <xyz1>
               <amount>3.0000103050</amount>
               <amountAsDecimal>3.0000103050</amountAsDecimal>
               <callCounter>0</callCounter>
               <deleted>0</deleted>
               <description>GST</description>
               <id>113495</id>
               <itemId>45</itemId>
               <percentage>0</percentage>
               <price>10.0000000000</price>
               <priceAsDecimal>10.0000000000</priceAsDecimal>
               <quantity>1.0000000000</quantity>
               <quantityAsDecimal>1.0000000000</quantityAsDecimal>
               <sourcexyz1Id>22143</sourcexyz1Id>
            </xyz1>
            <isReview>0</isReview>
            <number>40677</number>
            <orders>44652</orders>
            <xyz1Attempts>0</xyz1Attempts>
            <statusDescr>Unpaid</statusDescr>
            <statusId>2</statusId>
            <toProcess>1</toProcess>
            <total>33.0000000000</total>
            <xyz1Id>22143</xyz1Id>
         </return>
      </ns2:getxyz1Response>
   </soap:Body>
</soap:Envelope>

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: xml web-services soap groovy soapui


    【解决方案1】:

    1/ 您需要从源 testStep(在下面的示例中命名为“SOAP 请求”)检索 XML 并定位“返回”节点。

    def sourceTCresponse = context.expand('${SOAP Request#Response}')
    def sourceTCresponse_XML = new XmlParser().parseText(sourceTCresponse)
    def targetNode = sourceTCresponse_XML.'**'.find {it.name() == 'return'}
    

    2/ 您需要从目标 testStep 中检索 XML(在下面的示例中名为“SOAP Request2”)

    def targetTestStep = testRunner.testCase.testSteps["SOAP Request2"]
    def targetTestStep_Request = targetTestStep.getPropertyValue("Request")
    def targetTC_XML = new XmlParser().parseText(targetTestStep_Request)
    

    3/ 然后将 1/ 中的节点追加到 2/ 中的 arg1 节点上

    targetTC_XML.'**'.find {it.name() == 'arg1'}.append(targetNode)
    

    4/ 然后将最终的 XML 转换为字符串

    def xmlOutput = new StringWriter()
    def xmlNodePrinter = new XmlNodePrinter(new PrintWriter(xmlOutput))
    xmlNodePrinter.print(targetTC_XML)
    String finalXML_asString = xmlOutput.toString()
    

    5/ 然后将此字符串写入您的目标测试步骤

    targetTestStep.setPropertyValue("Request", finalXML_asString)`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      相关资源
      最近更新 更多