co zrobiłem
Używam SoapUI (3.6.1 wersja darmowa) usługi makiety służyć do konkretnych danych do 2 aplikacji klienckich Jestem testowanie . Za pomocą prostego skryptu Groovy skonfigurowałem kilka próbnych operacji pobierania odpowiedzi z określonych plików na podstawie żądań aplikacji klienckich.Jak mogę użyć względnych ścieżek do zewnętrznych plików odpowiedzi dla SoapUI MockService
Statyczne zawartość udawanym odpowiedź brzmi:
${responsefile}
Groovy w okienku wysyłka skryptowego pracy jest:
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File("C:/soapProject/Test_Files/ID_List_CategoryB.xml").text
}
W tym przykładzie, gdy aplikacja kliencka wysyła żądanie do próbna usługa zawierająca ciąg KategoriaA, odpowiedź zwrócona przez soapUI to zawartość pliku ID_List_CategoryA.xml
Co próbuję osiągnąć e
To wszystko działa dobrze z absolutnymi ścieżkami w wesołym miasteczku. Teraz chcę pobrać całą kolekcję plików projektu soapUI i plików zewnętrznych w pakiet w celu łatwego ponownego wdrożenia. Z mojego czytania o SoapUI Mam nadzieję, że będzie tak łatwe, jak ustawienie wartości Korzeń zasobów projektu do $ {projectDir} i zmienia moje ścieżki do:
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File("Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File("Test_Files/ID_List_CategoryB.xml").text
}
... pamiętając, że mieszka pliku XML projektu SoapUI C:/soapProject/
Co ja próbowałem dotąd
Tak, że nie działa. Próbowałem odmiany ścieżek względnych:
- ./Test_Files/ID_List_CategoryA.xml
- /Test_Files/ID_List_CategoryA.xml
- Test_Files/ID_List_CategoryA.xml
Jeden wpis wskazuje, że SoapUI może uznać katalog plików projektu jako katalog główny dla celów ścieżki względnej, więc wypróbowano również następujące odmiany:
- ./soapProject/Test_Files/ID_List_CategoryA.xml
- /soapProject/Test_Files/ID_List_CategoryA.xml
- soapProject/Test_Files/ID_List_CategoryA.xml
Kiedy żaden, który pracował Próbowałem korzystające z $ Właściwość {projectDir} w skrypcie groovy, ale wszystkie takie próby zakończyły się niepowodzeniem z błędem "Brak takiej właściwości: mockService dla klasy: Script [n]". Admittefly, naprawdę próbowałem to zrobić.
Próbowałem przy użyciu informacji z tego postu i innych: How do I make soapUI attachment paths relative?
... bez powodzenia. Zastąpienie "testu" przez "próbę" (między innymi zmianami) w kodzie rozwiązania z tego wpisu spowodowało więcej błędów właściwości, np.
testFile = new File(mockRunner.project.getPath())
.. doprowadziły do ...
No such property: mockRunner for class: Script3
Co Chyba muszę
Słupki znalazłem podobne do tej kwestii wszystko ostrości na SoapUI TestSuites. Naprawdę potrzebuję rozwiązania, które jest MockService centric lub przynajmniej rzuca trochę światła na sposób, w jaki można go traktować inaczej w MockServices w przeciwieństwie do TestSuites.
Każda pomoc jest bardzo doceniana. Dzięki. Znak.
Rozwiązanie - Zapewnione przez GargantuChet
Następujące składniki zawiera zmian sugerowanych przez GargantuChet aby rozwiązać problem próbuje uzyskać dostęp do $ {projectDir} nieruchomości i umożliwić stosowanie ścieżek względnych poprzez zdefiniowanie nowego obiektu projectDir zasięgu zakres groovy skryptu:
def groovyUtils = new com.eviware.soapui.support.GroovyUtils(context)
def projectDir = groovyUtils.projectPath
def req = new XmlSlurper().parseText(mockRequest.requestContent)
if (req =~ "CategoryA")
{
context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryA.xml").text
}
else
{
context.responsefile = new File(projectDir, "Test_Files/ID_List_CategoryB.xml").text
}
Trying Twój zakodowany przykład dla kopnięć spowodował następujący błąd: 'Nie udało się wysłać za pomocą skryptu; groovy.lang.MissingMethodException: Brak sygnatury metody: Script27.var() ma zastosowanie do typów argumentów: (java.lang.String) wartości: [C:/soapProject] Możliwe rozwiązania: wait(), run(), uruchom(), every(), any(), wait (long) ' – Mark
_Pokaż o przebudowach. Nie zdawałem sobie sprawy, że formatowanie w komentarzach byłoby tak kłopotliwe. Ponieważ soapUI nie ma przeglądarki konsoli, zmieniłem twoją pierwszą sugestię, aby zalogować się do defaultPathBase: 'log.info" Aktualny katalog: "+ defaultPathBase." Jak podejrzewasz, że zarejestrował katalog aplikacji soapUI. Następnie próbowałem sprawdzić, czy mogę zarejestrować wartość właściwości $ {projectDir}: 'log.info" Katalog projektu: "+ projectDir" Pojawia się następujący błąd: 'Nie udało się wysłać za pomocą skryptu; groovy.lang.MissingPropertyException: Brak takiej właściwości: projectDir dla klasy: Script26' – Mark
'projectDir' może nie być zdefiniowany w bieżącym skrypcie/zakresie. Najwyraźniej możesz odwoływać się do niego za pomocą ['def groovyUtils = new com.eviware.soapui.support.GroovyUtils (context); def projectDir = groovyUtils.projectPath; log.info (projectDir) '] [1], co jest prawdopodobnie metodą zatwierdzoną przez Groovy. Złapię kopię Groovy i wymyślę, co jest nie tak z przykrym przykładem. [1] http://www.webservices-testing.com/2011/10/project-path-using-groovy-in-soapui.html – GargantuChet