Groovy скрипт для чтения нескольких xml файлов по одному из 2 папок и применения методов сравнения xmlunit
У меня есть серия XML-файлов, помещенных в 2 отдельные папки, как показано ниже. Моя цель - читать каждый файл по одному из обеих папок и применять методы xmlunit comaprison.
Папка1: actual1.xml actual2.xml actual3.xml
Папка 2: Compare1.xml Compare2.xml Compare3.xml
Часть 1: Я читаю каждый файл за раз из обеих папок, используя скрипт ниже. Я приветствую предложения, если есть более простые способы сделать это
log.info "**********Read files from Folder1************"
def xml_file1 = []
new File("D:\\GroovyTest\\Folder1").eachFile{ f ->
f (f.isFile()&& f.name.contains('.xml'))
{
def filename = f.name[0..-1]
xml_file1.add(filename)
log.info filename
}
}
if (xml_file1.size() <1)
{
testRunner.fail("No request files found")
}
log.info "**********Read files from Folder2************"
def xml_file2 = []
new File("D:\\GroovyTest\\Folder2").eachFile{ f ->
if (f.isFile()&& f.name.contains('.xml'))
{
def filename = f.name[0..-1]
xml_file2.add(filename)
log.info filename
}
}
if (xml_file2.size() <1)
{
testRunner.fail("No request files found")
}
Часть 2. Скрипт для выполнения сравнения для каждой комбинации файлов xml, содержащихся в массивах xml_file1 и xml_file2.
На самом деле я застрял в этой части, так как приведенный ниже скрипт работает для отдельных файлов, если каждый XML-файл хранится в строке, но я должен передать массив в качестве аргументов, поскольку у меня есть серия XML-файлов для сравнения. Я получаю ошибку во время выполнения - groovy.lang.GroovyRuntimeException: не удалось найти соответствующий конструктор для: java.io.FileInputStream(java.util.ArrayList) ошибки в строке: 60
InputStream xml_stream1 = new FileInputStream(xml_file1)
String xml1 = getStringFromInputStream(xml_stream1)
InputStream xml_stream2 = new FileInputStream(xml_file2)
String xml2 = getStringFromInputStream(xml_stream2)
def factory = TransformerFactory.newInstance()
def transformer = factory.newTransformer(new StreamSource(new StringReader(xslt)))
StreamResult result_xml1 = new StreamResult(new StringWriter());
transformer.transform(new StreamSource(new StringReader(xml1)), result_xml1)
xml1 = result_xml1.getWriter().toString()
StreamResult result_xml2 = new StreamResult(newStringWriter());
transformer.transform(new StreamSource(new StringReader(xml2)), result_xml2)
xml2 = result_xml2.getWriter().toString()
XMLUnit.setIgnoreComments(true)
DifferenceListener differenceListener = newIgnoreTextAndAttributeValuesDifferenceListener();
DetailedDiff myDiff = new DetailedDiff(new Diff(xml1, xml2));
myDiff.overrideDifferenceListener(differenceListener);
myDiff.overrideElementQualifier(new RecursiveElementNameAndTextQualifier());
log.info "similar ? " + myDiff.similar()
log.info "identical ? " + myDiff.identical()
List allDifferences = myDiff.getAllDifferences();
for (Object object : allDifferences) {
Difference difference = (Difference)object;
log.info(difference);
}
Может ли кто-нибудь также помочь мне с методами игнорировать пустые теги во время сравнения? Спасибо