2017-10-17 4 views
1

Ich habe ein seltsames Problem mit der Ausführung von testCase.Korrekter Test Fallausführung führt zum Status 'Fehlgeschlagen'

Ich habe einen Testfall mit folgender Struktur:

Setup script: 

    set session_id = 0 

    set session_index = 0 

    store custom properties in an external file 

und Testfall Körper

Test Case: 

    data source 

    SOAP - authentication on components (gives session_id for each component) 

    groovy - recover useful data (store session_id in custom prop session_id_<session_index>) 

    source loop 

    SOAP - start asynchronous service on component 1 

    SOAP - check status on component 1 

    goto 'check status' while status = Pending 

    SOAP - check status on component 2 

    goto 'disconnect terminals' is session_id = 0 

    SOAP disconnect 

    groovy disconnect terminal : loop for each session_index: set session_id = session_id_<session_index> and use it in the SOAP disconnect step (I use run test step) 

TearDown Script: Wiederherstellen der benutzerdefinierten Eigenschaften

Alle diese Schritte ausführen mit Erfolg, ich habe keinen Fehler protokolliert, aber der Gesamttest hat einen FAILED-Status.

Ich erkannte, dass das Problem von den Goto-Schritten kommt: Ich bin auf die SOAP-Anfrage zurückschleifen, um den Status zu überprüfen, während der Status zurückgegeben wird auf "ausstehend". Jedes Mal, wenn die Anfrage "ausstehend" zurückgibt, schlägt sie fehl und ich sende die Prüfanfrage erneut. Wenn der Status schließlich 'Erfolg' ist, wird der Testschritt grün (OK) und der Testfall wird fortgesetzt.

Im Gesamtergebnis wird der mehrfach abgespielt Prüfschritt einmal für jede 'Iteration' gespeichert und das Ergebnis ist nur für das letzte Vorkommen OK, daher ist der Gesamtprüfungsstatus FAILED.

Antwort

1

Es gibt eine Abhilfe für dieses Problem:

ich die Testergebnisse geprüft und überprüft, dass einige meiner Prüfschritte, wo, wie in testRunner.results gescheitert betrachtet. Dazu habe ich das folgende Stück Code in meinem Teardown Skript Registerkarte

for (testStep in testRunner.getResults()){ 
    log.info "status " + testStep.getTestStep().getName() + " : " + testStep.getStatus() 
} 

Diese Schritte wurden diejenigen, auf die ich Looping, warten auf den anderen Status als ‚offen‘. Am Ende des Tests, als der Status schließlich "Erfolg" war, wurde der Schritt im Testfall (grün markiert) als OK markiert, auch wenn mehrere Vorkommen des Testschritts fehlgeschlagen waren (was verwirrend ist).

So fand ich ich kann diejenigen Status aktualisieren, um die folgenden für die betroffenen Schritte tun:

for (results in testRunner.results){ 
// implement a selection condition 
    results.status = "OK" 
} 

ich muss nur sicherstellen, dass ich dies gilt nur für die betroffenen Testschritte. noch immer nicht, immer noch in meinem Teardown Skript

Aber am Ende der Gesamtstatus ist:

log.info "TEST RUNNER STATUS after update" + testRunner.getStatus() 

Wenn ich bin sicher, dass meine Schritte und Ergebnis, ich kann es überschreiben, wie folgt:

testRunner.status = "FINISHED" 
log.info "TEST RUNNER STATUS after update" + testRunner.getStatus 

Und mein Gesamttest ist in Ordnung (grüne Balken)

ich weiß, dass es ein bisschen schwierig ist, aber solange ich die richtigen Bedingungen diese Parameter zu aktualisieren, ich bin sicher, dass keine echten Fehler zu verbergen.

Wenn jemand einen saubereren Weg hat, dies zu tun, wäre ich dankbar

Verwandte Themen