Я работаю с 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-запрос, разметка выглядит так:
<![CDATA[TestArg-Hyphen]]>
Я тщетно долго искал в сети решение этой проблемы; похоже, что символы '<' & '>' нельзя просто экранировать, как с другими специальными символами ('-', '/' и т. д.).
Я пытался заключить мою строку в одинарные, двойные, тройные, косые, долларовые кавычки: все дают одинаковый результат.
Я уверен, что есть способ сделать это (просто не заметно в документации 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-запрос все еще обновляется и показывает:
<![CDATA[TestArg-Hyphen]]>
Неужели нет простого, простого способа сделать это ??