2010-05-27 11 views
5

Jestem nowym użytkownikiem SoapUI i właśnie skonfigurowałem bardzo prostą usługę MockService. Czy możliwe jest manipulowanie odpowiedzią, aby dla konkretnego żądania elementy odpowiedzi były dynamicznie budowane?Jak zwrócić odpowiedź dynamiczną w SoapUI MockService

Scenariusz 1:

Zapytanie:

<record> 
    <identifier>ID1</identifier> 
</record> 

Response:

<response> 
    <child1>child 1</child1> 
</response> 

Scenariusz 2:

Zapytanie:

<record> 
    <identifier>ID2</identifier> 
</record> 

Response:

<response> 
    <child2>child 2</child2> 
</response> 

Jest prostego testu i nie muszę go zrobić więcej niż powyższe. Jestem obecnie robi co następuje który daje wyniki, które chcę, ale ponieważ jestem zupełnie nowy w tym jestem pewien, że są lepsze alternatywy:

Response:

<response> 
    ${dynElement} 
</response> 

Groovy skrypt:

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) 
} 
+0

Myślę, że nie chciałeś umieścić podwójnego cudzysłowu wokół child2Text w ostatnim wierszu przykładu. W przeciwnym razie zmienna child2Text nigdy nie zostanie odczytana. – 0x89

+0

przepraszam, pomyłka. Poprawię – Ross

Odpowiedz

2

Robię to z "odpowiedziami w puszkach" i zapytaniami xpath. Aby to zrobić, skonfigurujesz serię modułów do obsługi wysyłki w systemie mock, aby dopasować żądania do responentów. Załóżmy, że masz Request1, Request2, Response1, Response2. Użyj metody "Dopasowanie zapytania", aby dopasować wyrażenie XPATH. W tym meczu zwróć pożądaną odpowiedź. tj. jeśli odnajdziesz ID1 na ścieżce xpath, zwróć puszkę Response1.

Również wersja PRO wykonuje świetną robotę z XPATH, więc nie trzeba jej ręcznie kodować. tzn. może spojrzeć na odpowiedź, kliknij na rzecz, na którą chcesz uruchomić (w twoim przypadku ID1) i zbuduje dla ciebie wyrażenie XPATH. Poprosiłem o licencję PRO, właśnie na tym opartą. Obecnie oczekuję na budżetowanie ...

IMO, o wiele łatwiejsze do rozpoczęcia, niż myślenie o groovy.

Chris

+0

Dzięki Chris, tego właśnie szukałem. Podoba mi się podejście polegające na ustawianiu "odpowiedzi w puszkach", a rzeczy XPath wydają się działać dla mnie. Jestem pod dużym wrażeniem tego narzędzia do tej pory. – Ross

3

Zamiast XPath, można również użyć XmlSlurper.

def req = new XmlSlurper().parseText(mockRequest.requestContent) 
def reqRef = req.record.identifier 

Bezwstydnie zgrane od od this question's odpowiedzi, proszę, nie rób mi krzywdy.

Powiązane problemy