Я плохо знаком с SoapUI и только что настроил очень простой MockService. Действительно ли возможно управлять ответом так, чтобы для конкретного запроса элементы ответа были динамично созданы?
Сценарий 1:
Запрос:
<record>
<identifier>ID1</identifier>
</record>
Ответ:
<response>
<child1>child 1</child1>
</response>
Сценарий 2:
Запрос:
<record>
<identifier>ID2</identifier>
</record>
Ответ:
<response>
<child2>child 2</child2>
</response>
Это для простого теста, и мне не нужен он для делания больше, чем вышеупомянутое. Я в настоящее время делаю следующий, который приводит к результатам, которые я хочу, но так как я абсолютно плохо знаком с этим, я уверен, что существуют лучшие альтернативы:
Ответ:
<response>
${dynElement}
</response>
Сценарий Groovy:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def holder = groovyUtils.getXmlHolder(mockRequest.requestContent)
def reqRef = String.valueOf(holder.getNodeValue("//identifier"))
def child1Text = "<child1>child 1</child1>"
def child2Text = "<child2>child 2</child2>"
if (reqRef == "ID1") {
context.setProperty("dynElement", child1Text)
} else if (reqRef == "ID2") {
context.setProperty("dynElement", child2Text)
}
Я делаю это с помощью «шаблонных ответов» и запросов xpath. Для этого вы настроите серию обработчиков диспетчеризации в mockservice для сопоставления запросов с респонами. Предположим, у вас есть Request1, Request2, Response1, Response2. Используйте метод отправки «Query Match», чтобы сопоставить выражение XPATH. В этом совпадении верните желаемый ответ. т.е. если вы найдете ID1 в xpath, верните стандартный Response1.
Кроме того, версия PRO отлично справляется с XPATH, поэтому вам не нужно вручную кодировать ее. то есть он может посмотреть на ответ, щелкнуть по тому, что вы хотите запустить (в вашем случае ID1), и построить для вас выражение XPATH. Я запросил лицензию PRO, только на основании этого. В настоящее время ожидает составления бюджета ...
ИМО, гораздо проще начать, чем разбираться в отличном.
Крис