2017-11-08 1 views
0

Ich habe ein Java-Gurken-Maven-Projekt erstellt. Jetzt möchte ich einen Listener hinzufügen oder einen beliebigen Weg, so dass meine Screenshot-Capture-Funktion aufgerufen wird, wenn einer von Gurkenschritt/Test fehlschlägt.So rufen Sie eine Funktion nach dem Ausfall von Selen, Junit, Gurke und Maven-Projekt

Ich verwende nicht @RunWith(Cucumber.class) in Junit TestRunner-Klasse. Ich habe @RunWith(ExtendedCucumberRunner.class) integriert

1. Versuch: Hier habe ich versucht, unten Funktion in ExtendedCucumberRunner Klasse außer Kraft zu setzen: -

import org.junit.runner.notification.Failure; 

public void testFailure(Failure failure){ 
} 

Aber wenn ich einen Fehler außer Kraft zu setzen versuche wird erscheinen, wie:

Die Methode testFailure (Failure) vom Typ ExtendedCucumberRunner muss überschreiben oder eine Supertype-Methode implementieren.

2. Versuch:

Ich habe auch versucht RunListener Klasse zu erweitern nach wie vor ist es nicht funktioniert.

Der Code I Lister hinzufügen Ich versuche wie unten:

import org.junit.runner.notification.Failure; 
import org.junit.runner.notification.RunListener; 

import automationframework.AutomationLog; 
import automationframework.ScreenshotAndTestNgReporterListener; 

public class JUnitExecutionListener extends RunListener{ 
    /** 
    * Called when an atomic test fails. 
    * https://howtodoinjava.com/junit/how-to-add-listner-in-junit-testcases/ 
    * */ 
    @Override 
    public void testFailure(Failure failure) throws java.lang.Exception{ 
     super.testFailure(failure); 
     if (!failure.getDescription().isSuite()) { 
      ScreenshotAndTestNgReporterListener.customScreenshot(); 
      AutomationLog.error("In Custom Failer Class of Junit"); 
      System.out.println("FAILED!!!!!"); //Here pass your screenshot capture event 
     } 
     ScreenshotAndTestNgReporterListener.customScreenshot(); 
     AutomationLog.error("In Custom Failer Class of Junit"); 
     System.out.println("FAILED!!!!!"); //Here pass your screenshot capture event 
    } 
} 

3. Versuch:

Ich habe auch

unten Regel in Testrunner Klasse hinzuzufügen versucht
@Rule 
public TestWatcher watchman= new TestWatcher() { 
    private String watchedLog; 
    @Override 
    protected void failed(Throwable e, Description description) { 
     ScreenshotAndTestNgReporterListener.customScreenshot(); 
     AutomationLog.error(e.getMessage()); 
     watchedLog+= description + "\n"; 
    } 

    @Override 
    protected void succeeded(Description description) { 
     watchedLog+= description + " " + "success!\n"; 
     } 
    }; 

ich tun nicht @After Methode hinzufügen möchten, wie es jedes Mal aufrufen wird, auch wenn Testcase Erfolg.

Ich möchte nur Screenshot erfassen, wenn Testfall

versagt mir jemand sagen kann um jede mögliche Weise, so kann ich gleiche ?. erreichen

+1

Sie können es nach Haken in das tun, indem Sie das Szenario-Objekt als Methode Parameter übergeben . Das aktuelle ausführende Szenario wird von Gurke injiziert. Die Methode isFailed() von Scenario gibt true zurück, wenn der Test fehlgeschlagen ist. Fügen Sie den Screenshot hinzu, nachdem Sie diese Bedingung überprüft haben. – Grasshopper

+0

können Sie bitte ein Beispiel teilen –

+0

https://stackoverflow.com/questions/44919810/hook-up-in-cucumber-check-for-scenario-failure-in-java/44921078#44921078. – Grasshopper

Antwort

0

Wie @Grasshopper zu Recht darauf hinweisen. Verwenden Sie die untere Funktion einmal in einer beliebigen Schrittdefinition. Cucumber identifiziert den Hook und wird nach jedem Testlauf unter der Funktion ausgeführt. Falls das Szenario fehlschlägt, wird die if-Bedingung ausgeführt und Sie können beliebigen Code schreiben, den Sie danach ausführen möchten.

von Ref:

Hook up in cucumber check for scenario failure in java

Code:

@After 
public void afterMethod(Scenario scenario) { 
    if(scenario.isFailed()) { 

    } 
} 

Import:

import cucumber.api.java.After; 
Verwandte Themen