2016-02-11 15 views
6

Sono nuovo in SoapUI e scripting GroovyCreazione di libreria di script in versione gratuita SoapUI

vorrei creare un repository di script Groovy che possono essere riutilizzate in vari test passi

Sto usando la versione SoapUI libero e in seguito è la struttura del mio progetto SoapUI

Project 
|-TestSuite 
| |-TestCase 
| |-TestSteps 
|  |-LocalScript (Groovy TestStep to reuse library scripts) 
|  |-OtherTestStep (Run TestCase TestStep) 
|-ScriptLibrary 
    |-TestCase 
    |-TestSteps 
     |-GroovyScriptStep1 (Contain a class for commonly used functions) 
     |-GroovyScriptStep2 (Contain another class for other functions) 

Ecco quello che ero in grado di fare:

sono stato in grado di creare una libreria utilizzando th e campione menzionato in this post. Simile all'esempio nel post, il mio codice nella fase di test (GroovyScriptStep1 come sopra struttura) della libreria stava leggendo solo un valore da file esterno e viene utilizzato nella fase di test di altri TestSuite (passo LocalScript nella struttura sopra).

Qui è il problema:

Ora voglio creare una nuova classe e aggiungere una funzione ad essa che avrà bisogno di informazioni dalla classe in esecuzione e semplicemente stamparlo. La differenza è che alcuni valori vengono generati nell'esecuzione del test e devono essere passati allo script della libreria in ordine per elaborare/stampare ecc.

per rendere la mia domanda più chiaro di seguito è il frammento di codice

userò un semplice scenario qui

Esempio obiettivo: vuole essere in grado di stampare tutte le affermazioni e lo stato (dal momento che questo sarà utilizzato in tutti i casi di test che voglio creare una libreria)

codice per lo stesso quando non si utilizza biblioteca sarà come sotto (questo può andare passo script come Groovy)

def obj = context.testCase.getTestStepByName("Request 1"); 
def assertions = obj.getAssertionList() 

//Loop on assertions 
assertions.each{ 
    log.info(it.name + ' --> ' + it.status) 

Codice qualcosa di simile nel caso di prova fase della Biblioteca TestSuite

context.setProperty("Assertions", new Assertions()); 

class Assertions{ 

    def printAssertion(def someArgumentToGetAssertionlistforTestStepinAnotherTestSuite){ 


     def obj = ???? 

     def assertions = obj.getAssertionList() 

     //Loop on assertions 
     assertions.each{ 
      log.info(it.name + ' --> ' + it.status) 
     } 
    } 

} 

Codice da dove voglio chiamare questo metodo (LocalScript di cui al precedente struttura di progetto)

scripts = testRunner.testCase.testSuite.project.testSuites["ScriptLibrary"]; 
scripts.testCases["Scripts"].testSteps["Assertions"].run(testRunner, context); 

context.Assertions.printAssertion(ArgumentRequired); 

Questo è solo un esempio, voglio per creare librerie di alcuni script più comuni che utilizzano la variabile di contesto quando utilizzati localmente

Gentilmente aiutami con questo e per favore fatemi sapere se sono necessarie ulteriori informazioni/chiarimenti

+0

fa [questo] (http://stackoverflow.com/a/9154553/4742570) funziona? – jsheeran

+0

@jsheeran Essendo nuovo su groovy Non sono sicuro di come passare argomenti e chiamare funzioni specifiche nella classe che viene utilizzata come in questo [collegamento] (http://stackoverflow.com/questions/9136328/including-a-groovy- lo script-in-un-groove/9154553 # 9154553). Tuttavia, quale argomento devo passare in modo che l'elenco di asserzioni sia disponibile per funzionare in una classe esterna e possa stamparlo. – NewBee

risposta

5

Quello che ricevo dalle vostre domande è che volete creare una libreria di codici in SoapUI che possa essere riutilizzata. Credo che il modo migliore è con la creazione di file jar e la distribuzione nella cartella ext di SoapUI

  1. Creare un nuovo file di script Groovy con una classe (segue standard Java a denominazione dei file vale a direnome della classe e il nome del file dovrebbe essere lo stesso)
  2. compilare il file di codice Groovy
  3. Creare il file jar
  4. Distribuire il file jar alla cartella/bin/ext SoapUI_Home
  5. Riavviare il SoapUI se era già aperta
  6. Creare l'oggetto di classe e utilizzare i metodi in qualsiasi parte del SoapUI proietta

Nota: Se si sta migrando il progetto a qualche altra macchina, assicuratevi di migrare ° librerie ESE così se li si utilizza in progetti

dettagli con esempio:

Fase 1: creare un nuovo file di script Groovy con una struttura di classe

i. Considerando lo ScriptLibrary classe che contiene un metodo chiamato printTestDetails come nel codice seguente in esso:

class ScriptLibrary { 

    def context 
    def testRunner 
    def log 

    def printTestDetails(def PrintThisToo) { 
     log.info 'Name of the test case is :'+testRunner.testCase.name 
     log.info 'Name of the test suite is : '+testRunner.testCase.testSuite.name 
     log.info PrintThisToo 
    } 
} 

II. Salvare il file con il nome della classe, ScriptLibrary.groovy in questo caso

Fase 2: compilare il codice

i. prompt dei comandi Apri e il fuoco seguente comando (dalla cartella in cui in cui è conservato il file .groovy)

compilare il codice:

groovyc -d classes SimplePrint.groovy 

Fase 3: creare il file jar

i. Dopo aver compilato il codice possiamo creare il vaso Crea file jar:

jar cvf SimplePrint.jar -C classes . 

Fase 4: distribuire il file jar alla cartella SoapUI_Home/bin/ext

Fase 5: Riavviare il SoapUI se era già aperta

Passaggio 6: Creare l'oggetto di classe e utilizzare i metodi in qualsiasi punto dei progetti SoapUI

i. Creazione dell'oggetto

def scripts = new ScriptLibrary(context:context, log:log, testRunner:testRunner) 

ii.metodi di chiamata

scripts.printTestDetails(“This is my argument”) 

Spero che questo risolve il problema su tutto, questo approccio vi permetterà di utilizzare liberamente il codice ogni dove nel SoapUI e, soprattutto, si risolverà il problema per ottenere context, log e testrunner in codice esterno

È inoltre possibile utilizzare qualsiasi IDE di propria scelta per creare la libreria di codici e lavorare sullo stesso per compilare e creare anche jar.

fatemi sapere se avete dei dubbi o bisogno di ulteriori chiarimenti

+0

Penso che questo sia l'approccio che risolverà la maggior parte dei miei problemi e sarà molto più modulare. – NewBee

0

Questo dovrebbe farlo

context.setProperty("Assertions", new Assertions()); 


class Assertions{ 

    def printAssertion(tStep){ 

     def assertions = tStep.getAssertionList() 

     //Loop on assertions 
     assertions.each{ 
      log.info(it.name + ' --> ' + it.status) 
     } 
    } 

} 

e chiamare in questo modo

TestStep=testRunner.testCase.testSuite.getTestCaseByName("yourTestCase").getTestStepByName("stepName") 

    context.Assertions.printAssertion(TestStep) 
0

Per Assertion:

Mettete questo script nel Repository

context.setProperty("Assertions", new Assertions()); 
    class Assertions{  
    def printAssertion(tStep){  
     def assertions = tStep.getAssertionList()  
     //Loop on assertions   
    }  
} 

utilizzare questo script in SoapUI:

TestStep=testRunner.testCase.testSuite.getTestCaseByName("addTestCase").getTestStepByName("add") 

    //context.Assertions.printAssertion(TestStep) 

scripts = testRunner.testCase.testSuite.project.testSuites["ScriptLibrary"]; 
scripts.testCases["Demo"].testSteps["TestAssertion"].run(testRunner, context); 

context.Assertions.printAssertion(TestStep).each{ 
    log.info(it.name + ' --> ' + it.status) 
    } 

return null