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

时间:2015-02-20 14:39:29

标签: groovy soapui cdata

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

  1. 阅读回复并从中提取节点
  2. 将节点插入另一个请求
  3. 在Groovy脚本中生成一些xml并存储在TestCase属性中
  4. 将生成的xml作为子节点从属性插入到步骤2中插入的节点。
  5. 对于1和2:响应的结构类似于

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

    我使用 // A 通过Property Transfer步骤提取它,以识别节点的开头,并在下一个测试步骤中将带有子节点的节点传递给请求。在此之前,请求中的节点没有内容。 有效

    对于3我生成类似

    的东西
    <E>ee</E>
    

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

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

    使用

    的解决方案
    ${#TestCase#new_xml}
    

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

    我尝试通过另一个Property Transfer测试步骤插入E节点 - 该属性的值作为子节点插入到A节点中(同样,A节点从响应复制到步骤2中的下一个请求) )。结果如下:

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

    我想知道:

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

    2. 为什么在步骤2中没有CDATA的情况下传递xml,它也使用SOAPUI Property Transfer Step,但不使用步骤4。

    3. 任何提示赞赏!

1 个答案:

答案 0 :(得分:2)

1&amp; 2,您只需使用简单的property expansion

请说出您的回复如下:

<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)

如果你想获得更多的幻想,可以使用众多Java XML libraries中的一个,其中一些与SoapUI一起打包。 Here是一种可能性。

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