的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是第一位的,而不是第二

+0

你有样品数据,你试图比较吗? – Rao

+0

我会在几分钟内给我的帖子添加一个简单的数据,谢谢:) –

+0

@Rao:准备好:) –

这里是一个你可能需要:使用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() 
+0

工作好!谢谢bro –

+0

@HamzaAmami,很高兴知道这是有帮助的。 – Rao