TestNG: Interviewfragen

TestNG: Interviewfragen
MIN
07 Juni 2024

TestNG ist eines der am weitesten verbreiteten Test-Frameworks sowohl für Unit- als auch für automatisierte Tests. In diesem Leitfaden haben wir einige der am häufigsten gestellten Fragen und Antworten auf Interviews zusammengestellt, sowohl für Neulinge in diesem Bereich als auch für erfahrene Mitarbeiter.

Frage 1. Was ist TestNG?

Antwort: TestNG (NG wie Next Generation) ist ein Test-Framework, das in Selenium oder jedes andere Automatisierungstool integriert werden kann, um zahlreiche Funktionen wie Assertions, Berichte, parallele Testausführung usw. zu bieten.

Frage 2. Was sind die Vorteile von TestNG?

A: Die Vorteile von TestNG sind:

  1. TestNG bietet verschiedene Assertions (Behauptungen), die bei der Überprüfung von erwarteten und tatsächlichen Ergebnissen helfen.
  2. Ermöglicht die parallele Ausführung von Testmethoden.
  3. In TestNG können wir die Abhängigkeit einer Testmethode von einer anderen definieren.
  4. Wir können den Testmethoden in Selenium Prioritäten zuweisen.
  5. Ermöglicht die Gruppierung von Testmethoden in Testgruppen.
  6. Ermöglicht datengesteuerte Tests mit der @DataProvider-Anmerkung.
  7. Es verfügt über eine integrierte Unterstützung für Berichte.
  8. Es bietet Unterstützung für die Parametrisierung von Testfällen mit der @Parameters-Annotation.

Frage 3. Wie unterscheidet sich TestNG von Selenium WebDriver?

A: Selenium ist ein Automatisierungstool, das wir zur Automatisierung von Webanwendungen verwenden können. Um die Testautomatisierungssuiten um Testfunktionen zu erweitern, ist Selenium mit TestNG verbunden. Mit TestNG können wir verschiedene Funktionen in unserer Automatisierungssuite nutzen, z. B. verschiedene Arten von Assertions, Berichte, parallele Ausführung, Parametrisierung usw.

Kurz gesagt, um Automatisierungstests durchzuführen, hilft Selenium bei der „Automatisierung“ und TestNG bei den „Test“-Funktionen.

Frage 4. Wofür wird die Datei testng.xml verwendet?

A: Die Datei testng.xml wird zur Konfiguration der gesamten Testsuite verwendet. In der Datei testng.xml können wir eine Testsuite erstellen, Testgruppen anlegen, Tests für die parallele Ausführung markieren, Listener hinzufügen und Parameter an Testskripts übergeben. Wir können diese Datei testng.xml auch verwenden, um die Testsuite über die Kommandozeile/Terminal oder Jenkins auszuführen.

Frage 5. Wie können wir Testfälle als separate Testfälle für die Sanity Suite, die Regression Suite usw. gruppieren?

A: Mit dem Attribut groups in TestNG können wir Testmethoden verschiedenen Gruppen zuordnen.

//Testovacia metóda patriaca len do sanity suite

@Test(groups = {"sanitySuite"})

public void testMethod1() {

  //Testovacia logika

}

//Testovacia metóda patriaca do sady sanity aj regresnej sady

@Test(groups = {"sanitySuite", "regressionSuite"})

public void testMethod2() {

  //Testovacia logika

}

Fragen 6. Wie können wir eine Testmethode über die Datei testng.xml von der Ausführung ausschließen?

A: Durch die Verwendung des exclude-Tags in der Datei testng.xml können wir eine bestimmte Testmethode von der Ausführung ausschließen.

<suite name="Test Suite" verbose="1">

   <test name="TestName">

      <classes>

         <class name="TestClassName">

            <methods>

               <exclude name="testMethodToBeExcluded"/>

            </methods>

         </class>      

      </classes>

   </test>

</suite>

Fragen 7. Was sind einige häufig verwendete TestNG-Annotationen?

Antwort: Häufig verwendete TestNG-Anmerkungen sind:

  • @Test – die Annotation @Test kennzeichnet die Methode als Testmethode.
  • @BeforeSuite – Die Annotationsmethode wird nur einmal ausgeführt, bevor alle Tests in dieser Suite ausgeführt werden.
  • @AfterSuite – Die kommentierte Methode wird nur einmal ausgeführt, nachdem alle Tests in dieser Suite gelaufen sind.
  • @BeforeClass – Die annotierte Methode wird nur einmal vor dem Aufruf der ersten Testmethode in der aktuellen Klasse ausgeführt.
  • @AfterClass – Die kommentierte Methode wird nur einmal ausgeführt, nachdem alle Testmethoden in der aktuellen Klasse ausgeführt wurden.
  • @BeforeTest – Die kommentierte Methode wird ausgeführt, bevor eine Testmethode, die zu Klassen innerhalb des Tags gehört, ausgeführt wird.
  • @AfterTest – Die kommentierte Methode wird ausgeführt, nachdem alle Testmethoden, die zu Klassen innerhalb des Tags gehören, ausgeführt wurden.
  • @BeforeMethod – Die annotierte Methode wird vor jeder mit @Test annotierten Testmethode ausgeführt.
  • @AfterMethod – Die annotierte Methode wird nach jeder mit @Test annotierten Testmethode ausgeführt.
  • @DataProvider – Die Annotation @DataProvider wird verwendet, um Testdaten an die Testmethode zu übergeben. Die Testmethode wird durch die Anzahl der Datenzeilen ausgelöst, die durch die Methode des Datenanbieters übergeben werden.

Frage 8. Wie lautet die Reihenfolge der Ausführung der Testmethode auf der Grundlage der verschiedenen Anmerkungen?

Antwort: Testmethoden in TestNG werden in der Reihenfolge Suite->Test->Klasse->Methode in Kombination mit der Reihenfolge Vor den Anmerkungen->Test-Anmerkungen->Nach den Anmerkungen ausgeführt. Die Reihenfolge der Ausführung ist also wie folgt:

@BeforeSuite

@BeforeTest

@BeforeClass

@BeforeMethod

@Test

@NachMethode

@AfterClass

@AfterTest

@AfterSuite

Frage 9. Welche gängigen Assertions bietet TestNG?

Antwort Einige der gängigen Behauptungen von TestNG lauten:

  1. assertEquals(String actual, String expected, String message) und andere überladene Datentypen im Parameter
  2. assertNotEquals(double data1, double data2, String message) und andere überladene Datentypen im Parameter
  3. assertFalse(boolesche Bedingung, String message)
  4. assertTrue(boolesche Bedingung, String message)
  5. assertNotNull(Object object)
  6. fail(boolesche Bedingung, String message)
  7. true(String Nachricht)

Frage 10. Wie können wir die Ausführung eines Testfalls deaktivieren oder verhindern?

Antwort: Indem wir das Attribut „enabled“ auf false setzen, können wir die Ausführung der Testmethode deaktivieren.

//V prípade testovacej metódy

@Test(enabled = false)

public void testMethod1() {

  //Testovacia logika

}

//V prípade testovacej metódy patriacej do skupiny

@Test(groups = {"NegativeTests"}, enabled = false)

public void testMethod2() {

  //Testovacia logika

}

Frage 11. Wie können wir TestNG verwenden, um eine Testmethode von einer anderen abhängig zu machen?

A: Mit dem Parameter dependsOnMethods in der @Test-Annotation in TestNG können wir eine Testmethode erst dann ausführen lassen, wenn die abhängige Testmethode erfolgreich ausgeführt wurde.

@Test(dependsOnMethods = { „preTests“ })

Frage 12. Wie können wir die Priorität von Testfällen in TestNG festlegen?

A: Wir können die Priorität von Testfällen mit dem Parameter „priority“ in der @Test-Annotation festlegen. Tests mit niedrigeren Prioritätswerten werden zuerst durchgeführt. Beispiel:

@Test(Priorität=1)

Frage 13. Was ist die Standardpriorität für Testfälle in TestNG?

A: Die Standard-Testpriorität ist, wenn nicht angegeben, der ganzzahlige Wert 0. Wenn wir also einen Testfall mit Priorität 1 und einen ohne Priorität haben, dann wird der Test ohne Prioritätswert zuerst ausgeführt (da der Standardwert 0 ist und die Tests mit niedrigerer Priorität zuerst ausgeführt werden).

Frage 14. Wie können wir eine Testmethode mehrere Male in einem Zyklus ausführen (ohne einen Datenanbieter zu verwenden)?

A: Wenn Sie den Parameter invocationCount verwenden und seinen Wert auf einen ganzzahligen Wert setzen, wird die Testmethode n Mal in einem Zyklus ausgeführt.

@Test(invocationCount = 10)

public void invocationCountTest(){

   //Testovacia logika

}

Fragen 15. Was ist threadPoolSize? Wie können wir sie nutzen?

Antwort: Das Attribut threadPoolSize gibt die Anzahl der Threads an, die der Testmethode zugewiesen werden sollen. Es wird in Verbindung mit dem Attribut invocationCount verwendet. Die Anzahl der Threads wird durch die Anzahl der Iterationen der im Attribut invocationCount angegebenen Testmethode geteilt.

@Test(threadPoolSize = 5, invocationCount = 10)

public void threadPoolTest(){

   //Testovacia logika

}

Frage 16. Was ist der Unterschied zwischen Soft Assertion und Hard Assertion in TestNG?

Antwort: Dies ist eine der am häufigsten gestellten Fragen in einem TestNG-Interview. Soft Assertions (SoftAssert) ermöglichen es uns, mehrere Assertions innerhalb einer Testmethode zu haben. Selbst wenn eine Assertion fehlschlägt, führt die Testmethode den Rest des Tests weiter aus. Das Ergebnis aller Behauptungen können Sie am Ende mit der Methode softAssert.assertAll() zusammenfassen.

@Test

public void softAssertionTest(){

   SoftAssert softAssert= new SoftAssert();

   //Assertion failing

   softAssert.fail();

   System.out.println("Failing");

   //Assertion passing

   softAssert.assertEquals(1, 1);

   System.out.println("Passing");

   //Collates test results and marks them pass or fail

   softAssert.assertAll();

}

Selbst wenn die erste Behauptung fehlschlägt, wird der Test weiter ausgeführt und eine Meldung unter der zweiten Behauptung ausgegeben.

Harte Assertions hingegen sind die üblichen Assertions, die von TestNG bereitgestellt werden. Bei einer Hard Assertion wird im Falle eines Fehlers die Ausführung des Tests gestoppt, so dass keine weiteren Schritte der Testmethode durchgeführt werden können.

Frage 17. Wie kann ein Test in testNG fehlschlagen, wenn er nicht in der vorgegebenen Zeit durchgeführt wird?

Antwort: Wir können das Attribut timeOut der @Test-Anmerkung verwenden. Der diesem timeOut-Attribut zugewiesene Wert dient als Obergrenze. Wenn der Test nicht innerhalb dieses Zeitrahmens ausgeführt wird, schlägt er fehl, abgesehen von der Zeitüberschreitung.

@Test(timeOut = 1000)

public void timeOutTest() throws InterruptedException {

   //Sleep for 2sec so that test will fail

   Thread.sleep(2000);

   System.out.println("Will throw Timeout exception!");

}

Frage 18. Wie können wir einen Testfall bedingungslos auslassen?

A: Wir können einen Testfall mit der Funktion SkipException bedingt überspringen. Wenn eine skipException ausgelöst wird, wird die Testmethode im Testausführungsbericht als übersprungen markiert und keine Anweisung wird ausgeführt, nachdem die Ausnahme ausgelöst wurde.

@Test

public void testMethod(){

  if(conditionToCheckForSkippingTest)

 throw new SkipException("Skipping the test");

  //test logic

}

Frage 19. Wie können wir sicherstellen, dass eine Testmethode auch dann ausgeführt wird, wenn die Testmethoden oder Gruppen, von denen sie abhängt, fehlschlagen oder übersprungen werden?

A: Mit dem Attribut „alwaysRun“ der @Test-Annotation können wir sicherstellen, dass die Testmethode auch dann ausgeführt wird, wenn die von ihr abhängigen Testmethoden oder -gruppen fehlschlagen oder übersprungen werden.

@Test

public void parentTest() { 

  Assert.fail("Failed test");

}

@Test(dependsOnMethods={"parentTest"}, alwaysRun=true) 

public void dependentTest() { 

  System.out.println("Running even if parent test failed");

}

Selbst wenn parentTest fehlschlägt, wird dependentTest nicht übersprungen, sondern aufgrund von „alwaysRun=true“ ausgeführt. Wenn wir das Attribut „alwaysRun=true“ aus @Test entfernen, zeigt der Bericht einen Fehlschlag und einen übersprungenen Test an, ohne zu versuchen, die Methode dependentTest auszuführen.

Frage 20. Wie können wir mit TestNG einen Testparameter an ein Skript übergeben?

A: Mit der Annotation @Parameter und dem Tag „parameter“ in testng.xml können wir Parameter an die Testskripte übergeben.

Beispiel testng.xml:

<suite name="sampleTestSuite">

   <test name="sampleTest">   

      <parameter name="sampleParamName" value="sampleParamValue"/>

      <classes>

         <class name="TestFile" />

      </classes>      

   </test>

</suite>

Ukážka testovacieho skriptu –

public class TestFile {

   @Test

   @Parameters("sampleParamName")

   public void parameterTest(String paramValue) {

      System.out.println("Value of sampleParamName is - " + sampleParamName);

   }

Frage 21. Wie können wir mit TestNG ein datengesteuertes Framework erstellen?

A: Mit @DataProvider können wir ein datengesteuertes Framework erstellen, in dem Daten an die entsprechende Testmethode übergeben werden und mehrere Iterationen des Tests für verschiedene Werte der von der @DataProvider-Methode übergebenen Testdaten ausgeführt werden. Die mit der @DataProvider-Annotation versehene Methode gibt ein 2D-Array des Objekts zurück.

//Data provider returning 2D array of 3*2 matrix

 @DataProvider(name = "dataProvider1")

   public Object[][] dataProviderMethod1() {

      return new Object[][] {{"kuldeep","rana"}, {"k1","r1"},{"k2","r2"}};

   }

   //This method is bound to the above data provider returning 2D array of 3*2 matrix

   //The test case will run 3 times with different set of values

   @Test(dataProvider = "dataProvider1")

   public void sampleTest(String s1, String s2) {

      System.out.println(s1 + " " + s2);

   }

Frage 22. Was ist die Verwendung der @Listener-Annotation in TestNG?

Antwort: TestNG bietet uns verschiedene Arten von Listenern, mit denen wir eine Aktion ausführen können, wenn ein Ereignis ausgelöst wird. Normalerweise werden TestNG-Listener verwendet, um Berichte und Protokollierung zu konfigurieren. Einer der am häufigsten verwendeten Listener in testNG ist die Schnittstelle ITestListener. Es hat Methoden wie onTestSuccess, onTestFailure, onTestSkipped usw. Wir müssen diese Schnittstelle implementieren, indem wir unsere eigene Listener-Klasse erstellen. Dann können wir mit der @Listener-Annotation die Spezifikation verwenden, dass unsere benutzerdefinierte Listener-Klasse für eine bestimmte Testklasse verwendet werden soll.

@Listeners(PackageName.CustomizedListenerClassName.class)

public class TestClass { 

    WebDriver driver= new FirefoxDriver();@Test 

    public void testMethod(){

    //testovacia logika

    }

}

Frage 23. Was ist die Verwendung der @Factory-Annotation in TestNG?

Antwort: Die Annotation @Factory hilft bei der dynamischen Ausführung von Testfällen. Mit der Annotation @Factory können wir der gesamten Testklasse zur Laufzeit Parameter übergeben. Die übergebenen Parameter können von einer oder mehreren Testmethoden dieser Klasse verwendet werden.

Ein Beispiel: Es gibt zwei Klassen – TestClass und TestFactory. Dank der @Factory-Annotation werden die Testmethoden in der Klasse TestClass zweimal mit den Einträgen „k1“ und „k2“ ausgeführt

public class TestClass{

    private String str;

    //Constructor

    public TestClass(String str) {

        this.str = str;

    }

    @Test

    public void TestMethod() {

        System.out.println(str);

    }

}

public class TestFactory{

    //The test methods in class TestClass will run twice with data "k1" and "k2"

    @Factory

    public Object[] factoryMethod() {

        return new Object[] { new TestClass("K1"), new TestClass("k2") };

    }

}

Frage 24. Was ist der Unterschied zwischen den Annotationen @Factory und @DataProvider?

Antwort: Die Methode @Factory erstellt eine Instanz einer Testklasse und führt alle Testmethoden in dieser Klasse mit einem anderen Datensatz aus.

Während @DataProvider sich an einzelne Testmethoden bindet und bestimmte Methoden mehrfach ausführt.

Frage 25. Wie können wir TestNG verwenden, um Testfälle parallel auszuführen?

Antwort: Um Tests parallel laufen zu lassen, fügen Sie einfach diese beiden Schlüssel-Wert-Paare zum Suite-Tag in der Datei testng.xml- hinzu

  • parallel=“{methods/tests/classes}“
  • thread-count=“{Anzahl der Threads, die gleichzeitig laufen sollen}“.

<suite name=“ITtester“ parallel=“Methoden“ thread-count=“5″>

Damit ist unsere umfassende Liste der TestNG-Interviewfragen abgeschlossen. Wenn Sie mehr über TestNG erfahren möchten, können Sie sich auch unser vollständiges – TestNG Tutorial ansehen.