Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

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

xml
soapui
groovy
Теги: #<Tag:0x00007f7b64664978> #<Tag:0x00007f7b64664720> #<Tag:0x00007f7b64664540>

(Александр Шиповалов) #1

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

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

(rmerkushin) #2

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


(Александр Шиповалов) #3

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


(rmerkushin) #4

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


(Александр Шиповалов) #5

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


(Максим Таран) #6

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


(rmerkushin) #7

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

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

(Дмитрий Мирошник) #8

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


(Александр Шиповалов) #9

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