Groovy 和 SOAPUI 中的 XmlSlurper - 将新元素添加到 xml 中的随机位置
XmlSlurper in Groovy and SOAPUI - Add new element to random location in xml
我正在使用 soapui 创建自动化测试,我需要检查在 xml 中的不同位置添加新的 groupingNodes 时会发生什么。
我有 xml 类似这样的结构:
<rootNode>
<groupingNode>
<id>1</id>
<name>Node 1</name>
<groupingNode>
<id>2</id>
<name>Node 2</name>
<groupingNode>
<id>3</id>
<name>Node 3</name>
</groupingNode>
</groupingNode>
</groupingNode>
<groupingNode>
<id>4</id>
<name>Node 4</name>
</groupingNode>
以及要添加的新元素:
<groupingNode>
<id>5</id>
<name>Node 5</name>
</groupingNode>
在数据源中,我定义了几种不同的组合,其中节点和位置添加,所以一个测试用例中的新节点需要添加到rootNode,在第二个测试用例中添加到id = 3的groupNode,在第三个测试用例中添加到新创建的节点添加到 rootNode 等。
所以我的问题是如何以编程方式将新的 groupingNode 元素添加到 xml 中的随机位置。
我首先尝试深度优先,通过他的名字找到父 groupingNode。
xml.'**'.find{groupingNode-> groupingNode.name.text() == parentNode}.appendNode( fragmentToAdd )
但这没有用,因为我找不到所有节点。后来我发现用这段代码我可以找到旧节点,但不能找到新节点。然后经过一些研究,我发现这是 XmlSlurper 的问题,如果我想让新节点可见,我需要再次评估 xml 4.1 Adding nodes 所以在创建新节点之后我需要做的就是:
def newXML = new StreamingMarkupBuilder().bind { mkp.yield xml}.toString()
xml= new XmlSlurper( false, true ).parseText( newXML )
在此之后我能够找到所有深度优先的分组节点。
我正在使用 soapui 创建自动化测试,我需要检查在 xml 中的不同位置添加新的 groupingNodes 时会发生什么。
我有 xml 类似这样的结构:
<rootNode>
<groupingNode>
<id>1</id>
<name>Node 1</name>
<groupingNode>
<id>2</id>
<name>Node 2</name>
<groupingNode>
<id>3</id>
<name>Node 3</name>
</groupingNode>
</groupingNode>
</groupingNode>
<groupingNode>
<id>4</id>
<name>Node 4</name>
</groupingNode>
以及要添加的新元素:
<groupingNode>
<id>5</id>
<name>Node 5</name>
</groupingNode>
在数据源中,我定义了几种不同的组合,其中节点和位置添加,所以一个测试用例中的新节点需要添加到rootNode,在第二个测试用例中添加到id = 3的groupNode,在第三个测试用例中添加到新创建的节点添加到 rootNode 等。
所以我的问题是如何以编程方式将新的 groupingNode 元素添加到 xml 中的随机位置。
我首先尝试深度优先,通过他的名字找到父 groupingNode。
xml.'**'.find{groupingNode-> groupingNode.name.text() == parentNode}.appendNode( fragmentToAdd )
但这没有用,因为我找不到所有节点。后来我发现用这段代码我可以找到旧节点,但不能找到新节点。然后经过一些研究,我发现这是 XmlSlurper 的问题,如果我想让新节点可见,我需要再次评估 xml 4.1 Adding nodes 所以在创建新节点之后我需要做的就是:
def newXML = new StreamingMarkupBuilder().bind { mkp.yield xml}.toString()
xml= new XmlSlurper( false, true ).parseText( newXML )
在此之后我能够找到所有深度优先的分组节点。