quello che ho fatto
Sto usando soapUI (3.6.1 Free version) servizi finte per servire il backup di dati specifici a 2 applicazioni client Sono test . Con un semplice script Groovy ho impostato alcune operazioni di simulazione per recuperare le risposte da file specifici in base alle richieste fatte dalle applicazioni client.Come posso utilizzare i percorsi relativi ai file di risposta esterni per soapUI MockService
I contenuti statici della risposta finto è:
${responsefile}
Il groove nel riquadro spedizione scripting operazione è:
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
}
In questo esempio, quando l'applicazione client emette una richiesta al servizio di simulazione che contiene la stringa CategoryA, la risposta restituita da soapUI è il contenuto del file ID_List_CategoryA.xml
Quello che sto cercando di Achiev e
Questo funziona perfettamente con i percorsi assoluti nel groovy. Ora voglio estrarre l'intera raccolta di file di progetto soapUI e file esterni in un pacchetto per una facile re-implementazione. Dalla mia lettura su soapUI Speravo che questo sarebbe facile come impostare il valore Root Resource progetto per $ {} ProjectDir e cambiare i miei percorsi:
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
}
... tenendo presente che risiede il file xml del progetto soapUI in C:/soapProject/
quello che ho provato finora
Quindi, questo non funziona. Ho provato variazioni di percorsi relativi:
- ./Test_Files/ID_List_CategoryA.xml
- /Test_Files/ID_List_CategoryA.xml
- Test_files/ID_List_CategoryA.xml
Un posto indicato che soapUI potrebbe considerare la directory padre dei file di progetto come la radice per gli scopi del percorso relativo, quindi ho provato anche le seguenti variazioni:
- ./soapProject/Test_Files/ID_List_CategoryA.xml
- /soapProject/Test_Files/ID_List_CategoryA.xml
- soapProject/Test_files/ID_List_CategoryA.xml
Quando niente di tutto questo ha funzionato Ho provato a fare uso del $ {projectDir} proprietà nello script groovy, ma tutti questi tentativi non sono riusciti con un errore "No such property: mockService for class: Script [n]". Ammettiamolo, stavo davvero armeggiando quando provavo a farlo.
Ho provato ad utilizzare le informazioni da questo post e altri: How do I make soapUI attachment paths relative?
... senza alcuna fortuna. Sostituendo "test" con "mock" (tra le altre modifiche), nel codice della soluzione di quel post si sono verificati più errori di proprietà, ad es.
testFile = new File(mockRunner.project.getPath())
.. portato a ...
No such property: mockRunner for class: Script3
Quello che penso di aver bisogno
I posti che ho trovato relative a questo problema tutti si concentrano sul soapUI suite di test. Ho davvero bisogno di una soluzione che sia centrata su MockService o almeno chiarisca come possa essere gestita in modo diverso per MockServices rispetto a TestSuites.
Qualsiasi aiuto è molto apprezzato. Grazie. Marchio.
La soluzione - Fornito da GargantuChet
Di seguito include le modifiche suggerite da GargantuChet per risolvere il problema di cercare di accedere al $ {ProjectDir} proprietà e consentire l'utilizzo di percorsi relativi definendo un nuovo oggetto ProjectDir all'interno il campo di applicazione dello script Groovy:
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
}
Cercando il tuo esempio di calci codificati ha comportato il seguente errore: 'Impossibile inviare tramite script; groovy.lang.MissingMethodException: Nessuna firma del metodo: Script27.var() è applicabile per i tipi di argomento: (java.lang.String) valori: [C:/soapProject] Soluzioni possibili: wait(), run(), run(), every(), any(), wait (long) ' – Mark
_Sorry su Reposts. Non ho capito che la formattazione nelle risposte ai commenti sarebbe stata così problematica. Siccome soapUI non ha il visualizzatore di console, ho modificato il tuo primo suggerimento per registrare il DefaultPathBase: 'log.info" Dir corrente: "+ defaultPathBase" As sospettate, ha registrato la directory dell'applicazione soapUI. Poi ho provato a vedere se potevo registrare il valore della proprietà $ {projectDir}: 'log.info" Dir progetti: "+ projectDir' Ho ricevuto il seguente errore:' Impossibile inviare tramite script; groovy.lang.MissingPropertyException: Nessuna proprietà del genere: projectDir per la classe: Script26' – Mark
'projectDir' potrebbe non essere definito nello script/scope corrente. A quanto pare si può fare riferimento usando ['def groovyUtils = new com.eviware.soapui.support.GroovyUtils (context); def projectDir = groovyUtils.projectPath; log.info (projectDir) '] [1], che è probabilmente il metodo approvato da Groovy. Prenderò una copia di Groovy e capirò cosa c'è che non va nell'esempio hard-coded. [1] http://www.webservices-testing.com/2011/10/project-path-using-groovy-in-soapui.html – GargantuChet