的Groovy:比较与XML文件的SOAP响应
我想在Groovy代码我用xml文件忽略为了SOAP响应比较:的Groovy:比较与XML文件的SOAP响应
这里是我的代码:
import org.custommonkey.xmlunit.Stuff
import org.xmlunit.Stuff
//ExpectedString is my xml converted to text, same for ResponseString
Diff diff = DiffBuilder.compare(ExpectedString)
.withTest(ResponseString)
.ignoreComments()
.ignoreWhitespace()
.checkForSimilar()
.withNodeMatcher(new DefaultNodeMatcher(ElementSelectors.byName))
.build();
assertFalse("XML similar " + diff.toString(), diff.hasDifferences())
所以,你可以看到,我用DefaultNodeMatcher,我用XMLUnit2.0 ...没有结果(甚至不会忽略顺序或比较时有异常错误)
有没有解决方案?解决此问题
由于我不顾一切地找到一个直接的,我可以排序我的XML和我的肥皂响应,所以我可以有一个简单的差异?有没有办法按字母顺序排列它?如果是,如何?
谢谢你们!
更新:
这里是我的XML结构简化
<body>
<stuff>
<miniStuff></miniStuff>
<miniStuff></miniStuff>
</stuff>
<Services>
<Service>
<tag1>ValueA</tag1>
<tag2>ValueAA</tag2>
</Service>
<Service>
<tag1>ValueB</tag1>
<tag2>ValueBB</tag2>
</Service>
</services>
</body>
我的问题是我不能保证值a是第一位的,而不是第二
这里是一个你可能需要:使用ByNameAndTextRecSelector
withNodeMatcher(new DefaultNodeMatcher(new ByNameAndTextRecSelector(),ElementSelectors.byName))
单元测试:
@Test
public void testDiffOrder() {
final String control = """
<r>
<ser>
<t1>a</t1>
<t2>b</t2>
</ser>
<ser>
<t1>d</t1>
<t2>e</t2>
</ser>
</r>"""
final String test = """
<r>
<ser>
<t1>d</t1>
<t2>e</t2>
</ser>
<ser>
<t1>a</t1>
<t2>b</t2>
</ser>
</r>"""
Diff diff = DiffBuilder.compare(Input.fromString(control))
.withTest(Input.fromString(test))
.ignoreComments()
.ignoreWhitespace()
.checkForSimilar()
.withNodeMatcher(new DefaultNodeMatcher(new ByNameAndTextRecSelector(),ElementSelectors.byName))
.build()
assertFalse("XML differ " + diff.toString(), diff.hasDifferences())
}
贷@bodewig。从here
UPDATE 样本:更groovified版本与有机磷农药原XML片段。
import org.xmlunit.builder.DiffBuilder
import org.xmlunit.builder.Input
import org.xmlunit.diff.ByNameAndTextRecSelector
import org.xmlunit.diff.DefaultNodeMatcher
import org.xmlunit.diff.ElementSelectors
def control = """<body>
<stuff>
<miniStuff />
<miniStuff />
</stuff>
<Services>
<Service>
<tag1>ValueB</tag1>
<tag2>ValueBB</tag2>
</Service>
<Service>
<tag1>ValueA</tag1>
<tag2>ValueAA</tag2>
</Service>
</Services>
</body>"""
def test = """<body>
<stuff>
<miniStuff />
<miniStuff />
</stuff>
<Services>
<Service>
<tag1>ValueA</tag1>
<tag2>ValueAA</tag2>
</Service>
<Service>
<tag1>ValueB</tag1>
<tag2>ValueBB</tag2>
</Service>
</Services>
</body>"""
def myDiff = DiffBuilder.compare(Input.fromString(control))
.withTest(Input.fromString(test))
.checkForSimilar()
.withNodeMatcher(new DefaultNodeMatcher(new ByNameAndTextRecSelector(),ElementSelectors.byName))
.build()
println myDiff.toString()
println myDiff.hasDifferences()
assert !myDiff.hasDifferences()
工作好!谢谢bro –
@HamzaAmami,很高兴知道这是有帮助的。 – Rao
你有样品数据,你试图比较吗? – Rao
我会在几分钟内给我的帖子添加一个简单的数据,谢谢:) –
@Rao:准备好:) –