2016-07-01 4 views
1

In unserer Organisation verwenden wir SOAP UI 5.2.1 (Open Source). Wir haben eine soapui-Projektdatei wie untenSo wählen Sie die Testsuiten dynamisch in Soap ui basierend auf dem Befehlszeilenargumentwert

Project1.xml:

Test Suite 1 (Smoke, Functional, Regression) 
    Test Suite 2 (Functional) 
    Test Suite 3 (Smoke, Functional) 
    Test Suite 4 (Regression) 

Die gleiche Project1.xml Datei wird für Rauch, Funktions- und Regressionstest verwendet werden. Gegenwärtig laufen alle Suites für alle Arten von Tests, was zeitaufwendig ist.

Gibt es eine Möglichkeit, einen Parameter von der Kommandozeile zu übergeben und auf der Grundlage dieser entsprechenden Testsuite sollte

ausgeführt werden, wenn mein Fahrbefehl wie „testrunner Project1.xml“ Nur Test-Suiten mit Functional-Tag laufen sollen

  1. wie jedes tets Suite zu markieren, wie oben
  2. zur Verfügung gestellt, was der Fahrbefehl, der den Wert des Run-Modus akzeptiert werden sollte.

Gibt es eine andere Möglichkeit, dies zu erreichen?

+0

Haben Sie nur Suite Ebene oder Testfallebene wollen Tagging (die detaillierteren und möglich sein wird) als auch? – Rao

Antwort

0

Erstellen Sie Kategorie-Tags an drei Stellen: Jeder Test wird mit einer Kategorie in einer Eigenschaft namens categories markiert. Dann möchten wir auf der Projektebene die Eigenschaften includeCategories und excludeCategories angeben, in denen Kategorien aufgelistet werden, die eingeschlossen werden sollen, und Kategorien, die ausgeschlossen werden sollen. Jeder von diesen wird nur eine durch Kommas getrennte Liste sein. Das folgende Skript muss als Startskript unter für jeden einzelnen Testfall kopiert werden. Wenn Sie die $ 500 für eine Lizenz bezahlen, dann brauchen Sie dieses Skript nur einmal als ein benutzerdefiniertes Ereignis - ich habe das here diskutiert.

def testCategories = [] 
def excludeCategories = [] 
def includeCategories = [] 

def tstCats = testRunner.testCase.getPropertyValue("categories") 
def exCats = testRunner.testCase.testSuite.project.getPropertyValue("excludeCategories") 
def inCats = testRunner.testCase.testSuite.project.getPropertyValue("includeCategories") 

if(tstCats != null) tstCats.split(',').each { testCategories << it.trim() } 
if(exCats != null) exCats.split(',').each { excludeCategories << it.trim() } 
if(inCats != null) inCats.split(',').each { includeCategories << it.trim() } 

Die ersten drei Zeilen definieren jeweils eine leere Liste. Die nächsten drei Zeilen lesen alle Eigenschaften in und die letzten drei Zeilen analysieren sie. Der obige Code erwartet, dass die categories-Eigenschaft nur so etwas wie: category1, category2 usw. angibt - keine Anführungszeichen, keine Klammern.

Zuerst beschäftigen wir uns mit Ausschlusskategorien. Die Bedeutung von diesen ist normalerweise, dass, wenn ein Test mit irgendwelchen von diesen markiert wird, es nicht laufen lässt.

// exclude categories 
excludeCategories.each { 
    if(testCategories.contains(it)) 
     testRunner.cancel("${context.testCase.name} TestCase cancelled; excludeCategory = ${it}!") 
} 

Und jetzt die Include-Kategorien. Die Bedeutung davon ist, dass wenn der Test nicht markiert ist, überspringe es. Nur wenn ein Test mit einem dieser Tags markiert ist, führen Sie ihn aus.

// include categories 
if(includeCategories.size() != 0) { 
    def cancelTest = true 
    includeCategories.each { 
     if(testCategories.contains(it)) 
      cancelTest = false 
    } 

    if(cancelTest) 
     testRunner.cancel("${context.testCase.name} TestCase cancelled; includeCategories = ${includeCategories}!") 
} 
0

Hier ist, wie ich darüber gehen würde.

Get Benutzereingabe durch Kommandozeile (für testrunner Dienstprogramm)
System Argumenten (-Darg="value"), und wir ermöglichen nur die Suiten gemäß der Eingabe, und deaktivieren Sie den Rest der Suiten.

Nachdem dies gesagt wurde, um nur Regression auszuführen, verwenden Sie -DEXECUTION_GROUP="Regression".

Erstellen Sie für jede Testsuite eine benutzerdefinierte Eigenschaft, sagen Sie EXECUTION_GROUP und definieren Sie die gewünschten Werte. Sprich:

Test Suite 1: Eigenschaftsname EXECUTION_GROUP und Wert als Smoke,Functional,Regression Test Suite 2: Eigenschaftsname EXECUTION_GROUP und Wert als Functional
Test Suite 3: Eigenschaftsname EXECUTION_GROUP und Wert als Smoke,Functional
Test Suite 4: Immobilien Name EXECUTION_GROUP und Wert als Regression

Nun Doppelklick auf das Projekt Sie Load Script Taste auf der rechten Seite unten finden würde. Fügen Sie das folgende Skript hinzu und speichern Sie das Projekt.

Was macht das Skript?

Dieses Skript liest Systemeigenschaft sagen EXECUTION_GROUP als Befehlszeilenoptionen
Und wechseln Suiten zu testen nach der Benutzereingabe automatisch.
Wenn in der Liste nur diese Suiten aktiviert sind, deaktivieren Sie andernfalls die übrigen Suiten.
Wenn die Systemeigenschaft in der Befehlszeile nicht festgelegt oder nicht übergeben wird, sind alle Suites aktiviert.

Projekt laden Script:

/** 
* this script reads System property say EXECUTION_GROUP as command line options 
* and toggle to test suites according to the user input 
* if list is found enable the suite, disable it otherwise. 
* if system property is set, then all the suites are enabled 
**/ 
//Below closure toggle the suite based on the list of names 
def toggleSuite = { suite, list -> 
    def groups = suite.getPropertyValue('EXECUTION_GROUP').split(',').collect{it.trim()} 
    def isGroupFound = false 
    list.each { group -> 
     if (groups.contains(group)) { 
      isGroupFound = true 
     } 
    } 
    if (!isGroupFound) { 
     suite.disabled = true 
    } else { 
     suite.disabled = false 
    }  
} 

//Reads the system property 
def userInput = System.getProperty('EXECUTION_GROUP') 
log.info "Command line input: $userInput" 
def cmdLineOptions = [] 

//Checks if the user provided value is null i.e., system property not set 
if (null != userInput) { 
    cmdLineOptions = userInput.split(',').collect{it.trim()} 
    if (null != cmdLineOptions) { 
     log.info "User has provided the execution group as input" 
     log.info cmdLineOptions 
     project.testSuiteList.each { suite -> toggleSuite(suite, cmdLineOptions) } 
    } else { 
     log.info "Receieved empty list of options, so disabling all the suites" 
     project.testSuiteList.each { suite -> suite.disabled = true } 
    } 
} else { 
    log.info "All suites are being enabled as no system property input found" 
    project.testSuiteList.each { suite -> suite.disabled = false } 
} 

Wie man es verwendet Kommandozeile?

Ich glaube, Sie wissen, wie Sie eine Projektbefehlszeile aufrufen (basierend auf der Frage), d. H. Mit testrunner.bas/.sh von SOAPUI_HOME/bin.

beim Aufruf über testrunner Dienstprogramm, fügen EXECUTION_GROUP als Systemargument am Ende. B. zum Ausführen Smoke und Funktionsgruppen
am Ende des Befehls -DEXECUTION_GROUP="Smoke,Functional" hinzufügen.

So kann Befehl wie folgt aussehen:
testrunner.bat <options> project.xml -DEXECUTION_GROUP="Smoke,Functional"

Sie im Protokoll sehen würden, die Gruppen genannt werden (siehe Anweisungen im obigen Skript log).

Nun, wie kann ich oben von SoapUI testen?

Das oben erwähnte Verhalten gilt nur für die Befehlszeilenausführung gemäß der Anfrage in der Frage des Autors. Dann können Sie denken, was passiert, wenn Sie es in SoapUI ausführen? Du hast recht, das wird sich nicht so verhalten, wenn du mit SoaUI davonläufst. Der Grund ist, dass es kein Systemargument EXECUTION_GROUP Wert erhält. Normalerweise brauchen Sie es vielleicht nicht, aber wie erkennen Sie, ob das funktioniert oder nicht, vielleicht möchten Sie es vor der Verwendung testen.

Aber es gibt einen Trick, wenn Sie dasselbe Verhalten von SoapUI haben möchten.Das heißt, fügen Sie unten Anweisung im oberen (das setzt das Systemargument, beachten Sie, dass diese Anweisung auf Test beschränkt werden sollte, andernfalls den eigentlichen Zweck zu besiegen und Kommentar nach den Tests) System.setProperty('EXECUTION_GROUP', 'Smoke') und führen Sie das Skript aus.

Und Sie würden die unerwünschten Testgruppen deaktiviert sehen.

enter image description here

Verwandte Themen