SOAP UI + Groovy. Сравнение двух xml файлов

Коллеги, добрый день.
Возникла необходимость решения такой задачи:

  1. Есть некий SOAP сервис, который довольно таки часто модифицируется
  2. Есть набор “эталонных” входящих xml-файлов и набор “эталонных” ответов
  3. Соответственно при каждом обновлении сервиса, необходимо отправить входящие файлы - получить ответы и сравнить их с эталонными. Разницу в ответах сохранить в отдельный файл - например xslx
    В чем возникла трудность - большинство библиотек которые я нахожу - позволяют поставить assertion или на значение отдельного тега или на все содержимое файла. А именно найти разницу в значение не выходит.
    Возникла мысль, сохранять распарсенную xml в какой нибудь map, где ключ будет имя тега - а значение - понятно. значение этого тега. И потом уже сравнивать две maps.
    Но такое решение мне кажется спорным. Может быть кто то решал похожую задачу с подобным toolbox (изменить его я не могу). Или есть какие то соображения?
    Вот такой совет я видел Comparing two XML strings/files in Groovy/Java - Stack Overflow
    Но похоже он актуален для версии XMLUnit 1.5 (в 2.3 не взлетело)

Так тебе нужен именно diff или проверить ответ?) В принципе какую то инфу по разнице выводит и XMLUnit

1 лайк

Мне нужен именно diff
А вот с XMLUnit у меня, что то не взлетает(

Гугли метод DetailedDiff в XMLUnit. Ещё можешь попробовать вот это Oracle XMLDiff или это DiffXML
На крайняк обычный diff)

1 лайк

По обычным diff ты, что имеешь в виду?

Думаю, что имеется в виду обычный diff по строкам. :slight_smile:

Ага, что-то вроде:

git diff --no-index file1.xml file2.xml

Не совсем понял.
“позволяют поставить assertion или на значение отдельного тега” и “найти разницу в значение не выходит” - это как? Ставь ассершен, сравнивай с эталонным ответом. В SoapUI ты получишь что-то типа “expected - Vasya, found - Petya” или что-то вроде.
У тебя значения настолько огромны, что надо видеть именно diff, а не эталонное и полученное значения?
Если да - то единственное, что могу предложить - это сделать скриптовый ассершен, который по фейлу скопирует значения в файлы, затем натравит на них какую-нить внешнюю тулзу, умеющую хавать командную строку для запуска и отдавать результат в файле, затем вычитать этот файл и результат подставить обратно в ассершен, если необходимо.

Я тоже раздумываю над чем то подобным.
Похоже на какой то soft assertion

А как лучше всего сделать assertion назначение элемента XML, имея его путь?

Ясно, что нужно использовать groovy, но не понятно, кто и как будет делать ассерт?