In questo post, ci si mettono alcune delle domande reali intervista TestNG. Il nostro obiettivo non è solo aiutare a padroneggiare il soggetto, ma per vederti fare bene durante le interviste. Ecco perché i nostri esperti hanno scritto risposte con una semplicità assoluta per rendere l’apprendimento più efficace.

TestNG è principalmente un framework di test unitari per sviluppatori Java. Tuttavia, è abbastanza facile integrare TestNG con Selenio in modo che i tester possano usarlo anche per test funzionali e di regressione.

Se stai già utilizzando TestNG nei tuoi progetti, procedi direttamente alle domande dell’intervista TestNG. Per coloro che stanno appena iniziando a imparare TestNG, li consigliamo vivamente di seguire i seguenti due tutorial.

  • TestNG Tutorial per principianti
  • Selenium Webdriver Tutorial

Real TestNG Intervista Domande

Real TestNG Intervista Domande Risposte

Q-1: Dimmi brevemente cosa è TestNG e perché dovresti usarlo?

TestNG è un framework di test innovativo basato sul framework JUnit. I suoi consumatori principali sono gli sviluppatori Java che lo utilizzano per lo scopo di test unitari.

Viene fornito con molte funzioni utili come annotazioni TestNG e asserzioni TestNG che danno molta flessibilità ai tester. Inoltre, ci sono un paio di motivi solidi per utilizzare TestNG per i test di automazione.

  • La segnalazione nel framework TestNG è una delle sue caratteristiche fondamentali. Può generare report sia in formato HTML che XML. Il rapporto fornisce molti indicatori per prevedere lo stato di salute del progetto. Include il conteggio dei casi passati / falliti, l’età di un difetto e molto altro.
  • Poiché Selenium non dispone di un generatore di report integrato, il report TestNG è un candidato ideale da utilizzare per la generazione di report Selenium.
  • TestNG fornisce un eccellente meccanismo di gestione delle eccezioni per garantire un’esecuzione senza interruzioni del progetto di automazione dei test.

Q-2: Quali sono le caratteristiche principali di TestNG framework?

Alcune delle caratteristiche notevoli di TestNG sono le seguenti.

  • Concurrency – TestNG può eseguire più test in parallelo. Crea un thread per ogni test e li esegue in modo thread-safe.
  • Dipendenza – In TestNG, possiamo aggiungere un metodo di test che dipende da un singolo o un gruppo di metodi di test. Questa funzione garantisce l’esecuzione dei metodi di dipendenza prima del test effettivo.
  • Priorità – Possiamo specificare l’ordine dei test utilizzando il parametro “priorità” all’interno dell’annotazione @Test.
  • Raggruppamento-È una caratteristica unica di TestNG che non esisteva nel framework JUnit. Possiamo usarlo per una distribuzione intelligente/efficiente dei test. Ci consente di creare gruppi con metodi di test propri e gruppi con altri gruppi. Si prega di notare che possiamo specificare solo i gruppi nel ” TestNG.File XML”. Inoltre, i tag include/exclude possono aiutarci a personalizzare l’esecuzione del test in gruppi.
  • Parametrizzazione – TestNG ha un’annotazione dei parametri che consente ai valori di passare come argomenti ai metodi di test.
  • Data Sourcing-TestNG introduce l’annotazione del provider di dati per prendere input da fonti esterne come Excel.

Q-3: Quali sono le annotazioni standard disponibili in TestNG?

Le annotazioni TestNG controllano il modo in cui il metodo di prova sottostante verrà eseguito. Iniziano con il simbolo”@”.

//TestNG annotation [email protected]<annotation-name>(<attribute-name>=<value>)public void SampleTest() {...}

TestNG supporta quindici diverse annotazioni.

  1. Test
  2. BeforeMethod
  3. AfterMethod
  4. BeforeClass
  5. AfterClass
  6. BeforeTest
  7. AfterTest
  8. BeforeSuite
  9. AfterSuite
  10. BeforeGroups
  11. AfterGroups
  12. DataProvider
  13. Fabbrica
  14. Gli ascoltatori
  15. Parametri

Q-4: Quali sono gli standard affermazioni disponibile in TestNG?

Le asserzioni non solo ci permettono di aggiungere la convalida nei test, ma aiutano anche a decidere il loro stato (Passato/fallito).

  • assertEquals – Passa se gli argomenti corrispondono a else fallisce.
  • assertNotEquals – Se i valori effettivi e attesi corrispondono, l’asserzione fallisce.
  • assertTrue-Passa se la condizione di input è true else genera AssertionError.
  • assertFalse-Passa se la condizione di input è false else lancia AssertionError.
  • assertNull-Esegue il test null su un oggetto. In caso di null, il test viene interrotto con un’eccezione.
  • assertNotNull-Fa l’opposto di ” asserNull.”Il metodo di test si interrompe con un’eccezione alla scoperta di un oggetto non nullo.

Q-5: Quali sono le affermazioni TestNG hard e soft e in che modo differiscono?

Le asserzioni hard interrompono immediatamente un test con una AssertException dopo che il metodo assert segnala un errore. Se uno dei molti casi di test fallisce, l’esecuzione continua con i test rimanenti.

Tuttavia, in alcuni casi, vogliamo che il test completi tutti i passaggi anche se uno di essi fallisce. TestNG offre di utilizzare un’asserzione soft in tali scenari.

Un’asserzione soft non genera un’eccezione in caso di errore, ma raccoglie tutti gli errori finché non termina. Ed è così che potremmo riuscire a eseguire tutti i passaggi di un test.

Puoi leggere di più su questi e vedere esempi dal tutorial qui sotto.

  • Asserzioni hard in TestNG
  • Asserzioni soft in TestNG

Q-6: Qual è lo scopo del “TestNG.File XML”?

Il ” TestNG.XML ” è un file di configurazione che contiene le impostazioni del progetto TestNG. Rappresenta anche una suite di TestNG che può includere uno o più test.

Possiamo fare diverse personalizzazioni con questo file. L’elenco è il seguente.

  • Imposta più test da eseguire con un solo clic.
  • Includi / Escludi casi di test.
  • Selezionare uno o più gruppi specifici.
  • Parametri di alimentazione per i test.
  • Introdurre dipendenze a livello di gruppo.
  • Messa a punto test di parallelizzazione.
  • Configura i listener per i test.

Q-7: È possibile eseguire un test TestNG senza il “TestNG.File XML”? Se Sì, allora come?

Sì, possiamo eseguire il test direttamente dalla riga di comando usando ant o maven. Potrebbe essere necessario passare la classe, il metodo o il nome del gruppo richiesti nel comando.

Tuttavia, possiamo utilizzare solo un set limitato di funzionalità di TestNG senza il “TestNG.File XML”.

Q-8: Come passare un valore di stringa a un test usando il “TestNG.File XML”?

Possiamo fornire un valore stringa utilizzando il tag parametro al caso di test desiderato all’interno del “TestNG.XML.”

<suite name="TestNG Param Suite" verbose="1"> <parameter name="my-string-param" value="my string value" /> <test name="Param Test"> <classes> <class name="com.techbeamers.test.ParamTest"> <methods> <include name="paramTest" /> </methods> </class> </classes> </test></suite>

Successivamente, avremo bisogno di accedere al valore della stringa utilizzando l’annotazione del parametro appena sopra il test all’interno del codice Java.

package com.techbeamers.test;import org.testng.annotations.Parameters;import org.testng.annotations.Test;public class ParamTest {/** * * Following method takes one param as input argument. * Its value is set * at the suite level. */@Parameters({ "my-string-param" })@Testpublic void paramTest(String strValue) {System.out.println("The input parameter is: " + strValue);}}

Q-9: Come passare un parametro opzionale a un test utilizzando il ” TestNG.File XML”?

Possiamo fornire un parametro opzionale con l’aiuto dell’annotazione “@Optional”.

Di seguito è riportato il campione “TestNG.File XML”.

<suite name="Optional Param Suite" verbose="1"> <test name="Optional Param"> <parameter name="opt-value" value="optional text" /> <classes> <class name="com.techbeamers.test.OptionalParam" /> </classes> </test></suite>

Ecco il codice Java per accedere al parametro opzionale.

package com.techbeamers.test; import org.testng.annotations.Optional;import org.testng.annotations.Parameters;import org.testng.annotations.Test; public class OptionalParam{ @Parameters({ "opt-value" }) @Test public void optionTest(@Optional(opt-value") String strValue) { System.out.println("The value is: " + strValue); }}

Q-10: Come eseguire più test TestNG in parallelo?

TestNG supporta esecuzioni simultanee di test. Possiamo utilizzare questa funzione per eseguire i test in diversi browser contemporaneamente.

Nel TestNG XML, c’è un tag “suite” che ha un attributo “parallel”. Questo tag può parallelizzare l’esecuzione del test a diversi livelli.

Possiamo impostare l’attributo “parallelo” con uno dei seguenti valori.

  • Test-Eseguire tutti i test in parallelo che rientrano nel tag “test”.
  • Classi-Eseguire tutti i test in parallelo corrispondenti alle “classi” menzionate nel tag “classi”
  • metodi-Eseguire tutti i test in parallelo specificati con l’annotazione @ Test.
  • Istanze-Esegui quei test in parallelo che hanno lo stesso InstanceId else li eseguirà in un thread diverso.

Q-11: Come bloccare un metodo di test dall’esecuzione in TestNG?

Possiamo impostare l’attributo “abilitato” su “false” per bloccare un metodo di test. Il suo valore predefinito è ” true.”

Ruotando questo flag su” false ” si bloccherà l’esecuzione del test.

package com.techbeamers.test;import org.testng.annotations.Test;public class SimpleTest {@Test(enabled = false) public void testOne() { System.out.println("Test one."); }@Test(enabled = true) public void testTwo(String strValue) { System.out.println("Test two."); }}

Q-12: Come bloccare un test TestNG a seconda di una condizione?

Possiamo utilizzare il trasformatore di annotazione di TestNG per inizializzare la proprietà disabled di un’annotazione @Test con un valore “true” o “false”.

public class TestNGTest implements IAnnotationTransformer { public void transform(ITest annotation, Class myClass, Constructor myConstructor, Method myMethod){if (is_test_disabled(myMethod.getName()))) { annotation.setEnabled(false); } }public boolean is_test_disabled(String strName){ // Check if the test is disabled or not. }}

Q-13: Come rendere un test dipendente da un altro in TestNG?

Possiamo applicare la funzione di dipendenza di TestNG in questo caso. Fornisce l’attributo “dependsOnMethods” per dichiarare le dipendenze di un metodo di test. Si prega di seguire l’esempio qui sotto.

package com.techbeamers.test;import org.testng.annotations.Test;public class TestNGDependency {@Testpublic void stepOne() {System.out.println("Executing stepOne");}@Test(dependsOnMethods = { "stepOne" })public void stepTwo() {System.out.println("Executing stepOne->stepTwo");}@Test(dependsOnMethods = { "stepOne", "stepTwo" })public void stepThree() {System.out.println("Executing stepOne->stepTwo->stepThree");}}

Q-14: Come controllare l’ordine di esecuzione del test in TestNG?

Possiamo impostare l’attributo “preserve-order” su ” true “nel” TestNG.XML.”

<test name="MyTestOrder" preserve-order="true"> <classes> <class name="TestNGOrder"> <methods> <include name="stepOne" /> <include name="stepTwo" /> </methods> </class> </classes></test>

In alternativa, possiamo specificare un valore di sequenza predefinito nell’attributo” priorità ” per ogni test.

package com.techbeamers.test;import org.testng.annotations.Test;public class TestNGOrder {@Test(priority = 1)public void stepOne() {System.out.println("Executing stepOne");}@Test(priority = 2)public void stepTwo() {System.out.println("Executing stepOne->stepTwo");}@Test(priority = 3)public void stepThree() {System.out.println("Executing stepOne->stepTwo->stepThree");}}

Q-15: Cosa succede se la priorità di un test case in TestNG è zero?

Per impostazione predefinita, ogni caso di test in TestNG ottiene una priorità zero.

Supponiamo: se esistono due casi – uno con priorità 1 e un altro con il valore predefinito, allora quest’ultimo verrà eseguito per primo.

Nota: un caso di test con un valore di priorità inferiore avrà sempre una precedenza maggiore.

Q-16: Cos’è l’annotazione DataProvider in TestNG e perché la usi?

Il framework TestNG ha introdotto l’annotazione del provider di dati per supportare i test basati sui dati. Ci consente di utilizzare sia fonti di input interne che esterne.

Se la dimensione di input è piccola, possiamo mantenere i dati all’interno dei file di progetto. Tuttavia, nella maggior parte dei casi, la necessità è di avere un grande set di dati da inserire nei casi di test. E nessun tester o uno sviluppatore vorrebbe gonfiare il suo codice con un insieme così massiccio di input.

Quindi, la soluzione è usare l’annotazione TestNG “@DataProvider”. Può consentire a un test di accettare input da origini dati esterne come CSV, MS Excel e molti altri.

Di seguito un semplice esempio di utilizzo dell’annotazione “@DataProvider” per leggere l’input da un array 2-D.

package com.techbeamers.test;import org.testng.annotations.Test;import org.testng.annotations.DataProvider;public class DataDrivenTest {@Test(dataProvider="empSalary")public void processSalary(String empName, int empSal) {System.out.println("Employee: " + empName);System.out.println("Salary: " + empSal);}@DataProviderpublic Object empSalary() {return new Object{{"John", 15000}, {"Andi", 18000}};}}

Q-17: Cos’è l’annotazione di fabbrica in TestNG e perché la usi?

Il “@Factory” come suggerisce il nome è un’annotazione che può produrre test in fase di esecuzione utilizzando i set di dati/condizioni specificati.

Questa annotazione risolve un problema comune di eseguire test con diversi set di dati senza crearli esplicitamente.

Un altro vantaggio che porta è quello di consentire ai parametri di passare alle classi di test mentre li istanziano.

Controlla l’esempio qui sotto per capirlo in profondità.

package com.techbeamers.test;import org.testng.TestNG;public class TestClass{ private int arg; public TestClass(int arg) { this.arg = arg; } @Test public void firstTest() { int param = arg + 1; System.out.println("firstTest(): " + param); } @Test public void secondTest() { int param = arg + 2; System.out.println("secondTest(): " + param); }} public class TestFactory{ @Factory public Object factoryMethod() { return new Object { new TestClass(0), new TestClass(1) }; }}
  • Deve leggere – Come utilizzare il metodo di fabbrica TestNG?

Q-18: In che modo l’annotazione @ Factory è diversa da @ DataProvider?

L’annotazione @Factory porta alle seguenti azioni.

  • Crea le istanze di una classe di test in fase di esecuzione.
  • Tutti i metodi di test della classe TestNG vengono eseguiti con il set di dati specificato.

Mentre, se usiamo @DataProvider, accade quanto segue.

  • Il fornitore di dati è applicabile solo per i metodi di prova immediatamente successivi.
  • Può eseguire un metodo specifico il no. di volte è uguale al numero di righe restituito dal gestore del provider di dati.

Q-19: Cosa sono gli ascoltatori in TestNG e perché li usi?

TestNG framework definisce un insieme di classi note come listener per monitorare i diversi stati dei test.

Gli Ascoltatori estendono la seguente interfaccia marker – “org.prova.ITestListener”. Usandoli, possiamo improvvisare il comportamento di un test TestNG.

Di seguito è riportato l’elenco degli ascoltatori implementati da TestNG.

  • IExecutionListener – Tiene traccia di un TestNG eseguito dall’inizio alla fine.
  • IAnnotationTransformer – Può personalizzare un’annotazione TestNG e farlo funzionare di conseguenza.
  • ISuiteListener-Monitora l’inizio e la fine di una suite di test.
  • ITestListener-Continua a controllare diversi stati di un test TestNG.
  • IConfigurationListener-Tiene traccia degli eventi attivati con i metodi di configurazione.
  • IMethodInterceptor – Ci dà la possibilità di modificare l’elenco dei metodi di test durante un’esecuzione TestNG.
  • IInvokedMethodListener-Aggiunge i gestori da invocare prima di chiamare i metodi TestNG before e after.
  • IHookable: consente di impostare un metodo di callback da attivare prima di un metodo di test.
  • IReporter-Ci permette di produrre un rapporto di prova per l’esecuzione complessiva.

Q-20: Quali sono i metodi disponibili nell’interfaccia ITestListener di TestNG?

L’interfaccia ITestListener può acquisire i seguenti eventi / metodi.

  • onStart – Viene attivato dopo l’istanziazione della classe di test e prima della chiamata a qualsiasi metodo di configurazione.
  • onTestSuccess – Viene attivato se un test ha esito positivo.
  • onTestFailure – Viene attivato se un test fallisce.
  • onTestSkipped-Viene attivato per ogni test che viene ignorato.
  • onTestFailedButWithinSuccessPercentage – Viene attivato per ogni test che fallisce ma rimane al di sotto della percentuale di successo.
  • onFinish-Viene attivato dopo che tutti i test terminano l’esecuzione e non viene lasciato alcun metodo di configurazione.

Q-21: Come raggruppare i test a livello di metodo in TestNG?

Possiamo specificare i nomi dei gruppi nell’attributo “gruppi” dell’annotazione @Test poco prima dei metodi di test.

È utile per eseguire tutti i test semplicemente menzionando il gruppo.

Nell’esempio seguente, abbiamo un’epica, due storie e un no. di test sotto di loro. Abbiamo creato gruppi incentrati sulla storia e li abbiamo specificati a livello di metodo.

package com.techbeamers.test;import org.testng.annotations.Test;public class TestEpic{ @Test(groups={"story1","story2"}) public void funcTest1() { System.out.println("test1"); } @Test(groups="story1") public void funcTest2() { System.out.println("test2"); } @Test(groups="story2") public void funcTest3() { System.out.println("test3"); }}

Q-22: Come raggruppare i test a livello di classe in TestNG?

Se la maggior parte dei nostri test rientra nello stesso gruppo, non è necessario ripetere l’attributo “gruppi” per ciascun metodo di test. Possiamo annotare la classe con @ Test e utilizzare l’attributo” gruppi”. Verrà quindi applicato a tutti i metodi pubblici della classe.

Ad esempio, nella classe di test sottostante “TestEpic”, il gruppo “story1” definito a livello di classe si sovrapporrà a tutti i suoi metodi di test pubblici.

package com.techbeamers.test;import org.testng.annotations.Test;@Test(groups="story1")public class TestEpic{ @Test public void funcTest1() { System.out.println("test1"); } @Test public void funcTest2() { System.out.println("test2"); } @Test(groups="story2") public void funcTest3() { System.out.println("test3"); }}

Q-23: Come eseguirai i test da un gruppo TestNG?

Possiamo seguire uno qualsiasi dei due metodi per eseguire un gruppo specifico in TestNG.

  • Eseguito tramite file XML TestNG.
  • Esegui da Eclipse IDE.

Nel TestNG XML, c’è un tag “gruppi” che ha sottotag e cioè “include”/”exclude.”possiamo aggiungere i nostri gruppi al tag “include” per notificare a TestNG di eseguire tutti i test al suo interno.

Il framework cercherà i gruppi inclusi nelle classi di test aggiunte al tag “classi”. Possiamo anche ignorare un gruppo aggiungendolo all’elemento” exclude”.

Nell’esempio seguente esegue i test per il gruppo “story1”.

<?xml version="1.0" encoding="UTF-8"?><suite name="Suite"> <test name="story1"> <groups> <run> <include name="story1" /> <exclude name="story2" /> </run> </groups> <classes> <class name="com.techbeamers.test.TestEpic" /> </classes> </test></suite>

Per l’esecuzione di gruppi da Eclipse, possiamo seguire i passaggi seguenti.

  • Avvia Eclipse, fai clic sul menu “Esegui” e premi ” Esegui configurazioni.”
  • Fare clic su TestNG, quindi su “Nuova configurazione” e fornire un’etichetta.
  • Nel menu Progetto, premere il pulsante” Sfoglia ” e scegliere il progetto.
  • Passare alla sezione “Gruppi”, premere nuovamente il pulsante” Sfoglia ” per elencare i gruppi.
  • Scegli un gruppo da eseguire.
  • Premi il pulsante” Applica “e poi vai avanti su” Esegui.”

Q-24: Come eseguire un singolo test TestNG usando maven?

Per eseguire un singolo test TestNG, dovremmo usare il seguente comando Maven.

mvn -Dtest=<Test Class>#<Test Method> test

Il comando precedente supporta anche i caratteri jolly nei nomi di classe/metodo.

Q-25: Come eseguire un set di gruppi TestNG usando maven?

Se abbiamo diversi gruppi di test, ad esempio story1, story2, story3, possiamo eseguirli tutti con un singolo comando.

mvn test -Dgroups=story1,story2,story3

Quick wrap up – Real TestNG intervista Domande& Risposte

Le domande di intervista TestNG di cui sopra sarebbe senza dubbio aiutare durante un faceoff in tempo reale con l’intervistatore. Si consiglia di leggerli con attenzione e si prega di farlo 2-3 volte almeno.

Puoi seguirci sui nostri account di social media (Facebook / Twitter) per vedere cose più tecniche e pratiche.

Migliore,

TechBeamers

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.