2017-01-25 1 views
0

Ich habe 2 TestNG-Listener, die Protokollierungsinformationen in einer Protokolldatei für das Debuggen von Informationen melden. Diese sind IConfigurationListener2 und ITestListener. Der Testlauf in mehreren Threads.TestNG: So verknüpfen Sie IConfigurationListener2.beforeConfiguration ITestResult mit ITestListener.onTestStart

Mein Problem ist, dass ich die ITestResult im IConfigurationListener2.onConfigurationFailure() Verfahren zum ITestListener.onTestStart()ITestResult verknüpfen müssen die @TestITestResult.getMethodName() abzurufen. Ist das möglich?

TestListener-Code ist:

public class TestListener implements ITestListener{ 
    @Override 
    public void onTestStart(ITestResult result) {  
     System.out.println("Starting test method:" + result.getMethod().getMethodName()); 
    } 
} 

IConfigurationListener2 ist:

public class ConfigurationListener implements IConfigurationListener2 { 
    @Override 
    public void onConfigurationFailure(ITestResult result) { 
     System.out.println("Failed to run " + result.getMethod().getMethodName() 
      + " for the test method:" + <code needed>); 
} 

Die TestNG Klasse:

public class Script1 { 

private int i =0; 
@BeforeMethod 
public void before(){ 
    System.out.println("Starting before"); 
    i++; 
    if (i==1){ 
     throw new RuntimeException("forcing an exception"); 
    } 
} 

@Test(testName="script1") 
public void script1_run(){ 
    System.out.println("Running script"); 
} 

@Test(testName="script2") 
public void script2_run(){ 
    System.out.println("Running script"); 
} 
} 

So wie ich die @beforeMethod fa die @Test Methode finde heraus angeklickt für. Ich würde das Protokoll so etwas wie dies mag:

Beginnend vor
Prüfverfahren Beginn: script1_run
Skript Lauf
Beginnend vor
fehlgeschlagen, bevor sie für die Testmethode auszuführen: script2_run

Danke,

+0

Was stattdessen zur Zeit angemeldet ist? –

+0

Ich teste eine neue Anwendung und baue das Framework auf. Momentan wird das Protokollieren protokolliert, ich sehe nur, dass Tests übersprungen werden, was durch das Fehlschlagen der Konfigurationsmethode verursacht wird, weshalb ich Logging-Informationen hinzufügen muss. –

Antwort

1

Sie müssen Ihre 2 Listener zusammenführen:

public class MyNewListener implements IConfigurationListener2, ITestListener { 

    private final ThreadLocal<ITestResult> currentTest = new ThreadLocal<>(); 

    @Override 
    public void onTestStart(ITestResult result) { 
    System.out.println("Starting test method:" + result.getMethod().getMethodName()); 
    currentTest.set(result); 
    } 

    @Override 
    public void onConfigurationFailure(ITestResult result) { 
    System.out.println("Failed to run " + result.getMethod().getMethodName() 
      + " for the test method:" + currentTest.get().getMethod().getMethodName()); 
    } 
} 

Die ThreadLocal wird verwendet, um den parallelen Lauf zu verfolgen.

Haftungsausschluss: Ich habe den Hörer im wirklichen Leben nicht getestet. Sag mir, ob es funktioniert oder nicht.

Edit: Tests sollen nach einem gescheiterten Konfigurationsverfahren übersprungen werden

public class MyNewListener implements IConfigurationListener2, ITestListener { 

    private final ThreadLocal<ITestResult> failedConfiguration = new ThreadLocal<>(); 

    @Override 
    public void onTestStart(ITestResult result) { 
    System.out.println("Starting test method:" + result.getMethod().getMethodName()); 
    } 

    @Override 
    public void onConfigurationFailure(ITestResult result) { 
    failedConfiguration.set(result); 
    } 

    @Override 
    public void onTestSkipped(ITestResult result) { 
    System.out.println("Failed to run " + failedConfiguration.get().getMethod().getMethodName() 
      + " for the test method:" + result.getMethod().getMethodName()); 
    } 
} 
+0

Leider hat das jetzt funktioniert. Dies liegt daran, dass onConfigurationFailure() 'vor der' onTestStart() 'Methode aufgerufen wird und null zurückgibt. Danke für die Hilfe tho. –

+0

@ T.Daves Ok! Ich habe gerade meine Antwort mit einem anderen Vorschlag aktualisiert. Lass mich sein Ergebnis wissen! :) – juherr

+0

Ich kann bestätigen, dass die bearbeitete Antwort funktioniert. Ich habe gestern etwas Ähnliches gemacht und arbeite nun an '@ AfterMethod' und protokolliere das auf ähnliche Weise. –

Verwandte Themen