Можно ли вставить символы «<» и «>» в ​​XML-запрос SoapUI буквально с помощью скрипта Groovy? - PullRequest
0 голосов
/ 07 июня 2019

Я работаю с SoapUI для функционального тестирования веб-сервисов. Я использую SpecFlow для облегчения параметризованного тестирования данных.

В рамках моего процесса у меня есть отличный сценарий, который выполняется до запроса контрольного примера. Этот сценарий читает аргументы, переданные в вызове командной строки, и вставляет их в параметры XML запроса.

Мой запрос выглядит примерно так:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" >
  <soap:Header/>
  <soap:Body>
    <soap:TestArg1>TestArgValue1</soap:TestArg1>
    <soap:TestArg2>TestArgValue2</soap:TestArg2>
    <soap:TestArg3>TestArgValue3</soap:TestArg3>
  </soap:Body>
</soap:Envelope>

Мой скрипт работает нормально, а строковые значения вводятся правильно, как и ожидалось.

Однако во время тестирования мы обнаружили, что многие входные аргументы теста будут содержать специальные символы (дефисы, косые черты и т. Д.). Чтобы обойти эту проблему, я протестировал сервисные тесты с каждым аргументом в XML-запросе, заключенным в директиву CDATA, например:

<![CDATA[TestArg-Hyphen]]>

Тестирование в графическом интерфейсе SoapUI прошло успешно; Я обновил свой Groovy-скрипт для объединения

<[CDATA[

до и

]]>

после переменной.

Однако, когда объединенное значение вводится в XML-запрос, разметка выглядит так:

&lt;![CDATA[TestArg-Hyphen]]&gt;

Я тщетно долго искал в сети решение этой проблемы; похоже, что символы '<' & '>' нельзя просто экранировать, как с другими специальными символами ('-', '/' и т. д.).

Я пытался заключить мою строку в одинарные, двойные, тройные, косые, долларовые кавычки: все дают одинаковый результат.

Я уверен, что есть способ сделать это (просто не заметно в документации Groovy), но пока я не смог его идентифицировать.

Я бы очень признателен за любую помощь или совет по этому вопросу. Спасибо за внимание ..

Обновление: Соответствующий раздел моего скрипта Groovy выглядит так:

// Get next test step info
def nextStep = testRunner.testCase.getTestStepAt(context.currentStepIndex + 1)

// Create the XmlHolder object for the request step
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(nextStep.name + "#Request")

// Inject arg values into request XML
for (i=0; i < argsNamesArray.length; i++) {
    argNode = "//" + argsNamesArray[i]
    def argValue = "<![CDATA[" + argsValuesArray[i] + "]]>"
    log.info argValue
    holder[argNode] = argValue
}
holder.updateProperty()

Обратите внимание, что

log.info argValue

возвращает значение аргумента, которое я хотел бы вставить в мой запрос:

<![CDATA[TestArg-Hyphen]]>

Однако, когда скрипт выполнен, XML-запрос все еще обновляется и показывает:

&lt;![CDATA[TestArg-Hyphen]]&gt;

Неужели нет простого, простого способа сделать это ??

1 Ответ

1 голос
/ 07 июня 2019

ИМХО, это не проблема Groovy , а проблема XML .

Единственный символ, который должен быть экранирован, это само "<". </p>

Вам просто нужно заменить "<" на lt;в XML. </p>

Пример:

def param1 = "<foo-bar>"
println param1.replace("<", "&lt;")
...