SoapUI log.info在比较两个xml文件并记录差异时出于某种原因打开对话框

MKh*_*aja 2 groovy soapui xmlunit

出于某种原因,执行以下脚本时,不仅会在日志中打印输出,还会在信息弹出对话框中打印输出.有人可以向我解释为什么会发生这种情况以及如何防止它发生?

import groovy.io.FileType;
import org.custommonkey.xmlunit.*;

def file1 = "somepath/file1.xml"
def file2 = "somepath/file2.xml"

def xml1 = new FileReader(file1)
def xml2= new FileReader(file2)
XMLUnit.setIgnoreWhitespace(true)
XMLUnit.setIgnoreComments(true)
XMLUnit.setIgnoreDiffBetweenTextAndCDATA(true)
XMLUnit.setNormalizeWhitespace(true)

DetailedDiff myDiff = new DetailedDiff(new Diff(xml1, xml2));
List allDifferences = myDiff.getAllDifferences();

allDifferences.each { difference ->
    log.info (difference)
}
Run Code Online (Sandbox Code Playgroud)

编辑:通过实验,我发现以下行:

List allDifferences = myDiff.getAllDifferences();
Run Code Online (Sandbox Code Playgroud)

是对话弹出的原因.我猜测getAllDifferenes()方法导致弹出对话框.

我仍然想要一些帮助来确定一个可行的替代方案,因为我试图比较两个xml文件并打印文件中的差异.

alb*_*iff 5

这是不是与XMLUnit测试类(一个问题Diff,DetailedDIff等等),这是该行为groovy与在SOAPUI Groovy脚本测试步骤连词:在groovy语言,如果你没有指定return,那么最后计算的表达式是默认的返回值,因此,当Groovy脚本测试步骤单独执行时,SOAPUI会捕获return并且如果它不null打印字符串对象表示(如果您执行groovy测试步骤作为测试用例的一部分,则不会发生这种情况,因为SOAPUI脚本不会捕获并显示return).即如果您在SOAPUI上执行下一个groovy脚本:

def a = 3 + 1
Run Code Online (Sandbox Code Playgroud)

groovy正在添加return,所以你真的有:

def a = 3 + 1
return a
Run Code Online (Sandbox Code Playgroud)

并且SOAPUI捕获return并显示下一个对话框:

Groovy脚本对话框

所以你可以修复这个行为null,最后在一个变量中分配一个变量,return如下所示:

import groovy.io.FileType;
import org.custommonkey.xmlunit.*;

...

DetailedDiff myDiff = new DetailedDiff(new Diff(xml1, xml2));
List allDifferences = myDiff.getAllDifferences();

allDifferences.each { difference ->
    log.info (difference)
}

// ADD THIS LINE TO AVOID DIALOG BOX
def dontCare = null; // groovy add return dontCare :)
Run Code Online (Sandbox Code Playgroud)

要么:

import groovy.io.FileType;
import org.custommonkey.xmlunit.*;

...

DetailedDiff myDiff = new DetailedDiff(new Diff(xml1, xml2));
List allDifferences = myDiff.getAllDifferences();

allDifferences.each { difference ->
    log.info (difference)
}

// ADD THIS LINE TO AVOID DIALOG BOX
return;
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助,