将人工生成的XML插入SOAPUI请求中



我正在尝试在SOAPUI中执行以下操作:

  1. 读取响应并从中提取节点
  2. 将节点插入另一个请求
  3. 在Groovy脚本中生成一些xml并存储在TestCase属性中
  4. 将属性中生成的xml作为子节点插入到步骤2中插入的节点中

对于1和2:响应的结构有点像

<A><B>bb</B><C>cc</C><D>dd</D></A>

我通过属性转移步骤提取它,使用//a来识别节点的开始,并在下一个测试步骤中将节点及其子节点传递给请求。在此之前,请求中的节点没有任何内容。这有效

对于3,我生成类似的东西

<E>ee</E>

步骤4之后的目标是一个如下所示的请求结构:

 <A><E>ee</E><B>bb</B><C>cc</C><D>dd</D></A>

使用的解决方案

${#TestCase#new_xml}

插入节点不起作用,因为没有办法将属性放置在E节点应该所在的位置(据我所知)。

我尝试通过另一个属性转移测试步骤插入E节点-属性的值作为A节点的子节点插入到请求中(与步骤2中从对下一个请求的响应复制A节点的方式相同)。结果是:

<A><![CDATA[<E>ee</E>]]<<B>bb</B><C>cc</C><D>dd</D></A>

我想知道:

  1. 如何将E节点作为子节点插入a节点,同时避免CDATA(或随后删除CDATA)。

  2. 为什么在步骤2中传递xml时没有CDATA,该步骤也使用SOAPUI属性传递步骤,但在步骤4中没有。

任何提示都将不胜感激!

对于1&2,您可以只使用一个简单的属性扩展。

假设你的回复看起来像:

<AAA>
    <BBB/>
    <CCC/>
    <BBB/>
    <BBB/>
    <DDD>
        <BBB/>
    </DDD>
    <CCC/>
</AAA>

假设您想要传输整个节点DDD,包括子节点。在您的下一个请求中,您将使用${<TestStep_name>#Response//*:DDD}。注意,*:的意思是"任何名称空间",因为在真正的SOAP响应中,您可能会有某种名称空间。

对于3:

// Generate some xml in a Groovy script
def xml = '<AAA><BBB/><CCC/><BBB/><BBB/><DDD><BBB/></DDD><CCC/></AAA>'
// store in a TestCase property
testRunner.testCase.setPropertyValue('my_property', xml)

如果您想获得更多的兴趣,您可以使用许多JavaXML库中的一个,其中一些库与SoapUI打包在一起。这里有一种可能性。

对于4,您将再次使用属性扩展:${#TestCase#my_property}

最新更新