Top 50 TestNG Întrebări și răspunsuri la interviu (2026)

Top TestNG Întrebări și răspunsuri la interviu

Pregătirea pentru un TestNG interviu? Este timpul să luați în considerare întrebările care vă scot în evidență punctele forte. Un solid TestNG Fundația interviurilor dezvăluie profunzimea, încrederea și pregătirea apreciate de echipele de angajare.

Oportunitățile în acest domeniu acoperă creșterea automatizării, framework-uri în continuă evoluție și aplicații practice de testare care necesită experiență tehnică și profesională. Lucrul în domeniu necesită expertiză în domeniu, abilități de analiză și un set flexibil de competențe care să ajute absolvenții, profesioniștii de nivel mediu și senior să răspundă la întrebări și răspunsuri frecvente la întrebări tehnice, de bază și avansate.
Citeste mai mult…

👉 Descărcare PDF gratuită: TestNG Întrebări și răspunsuri la interviu

Top TestNG Întrebări și răspunsuri la interviu

1) Ce este TestNG și de ce este folosit în testarea automată?

TestNG (Test Next Generation) este un framework de testare inspirat de JUnit și NUnit, dar îmbunătățit cu capabilități avansate, cum ar fi gruparea, secvențierea, parametrizarea și gestionarea dependențelor. Este utilizat în principal în testarea automată pentru a eficientiza execuția testelor, a îmbunătăți organizarea testelor și a genera rapoarte HTML și XML detaliate.

Beneficiile cheie ale TestNG includ:

  • Sprijină executarea testului în paralel, reducând timpul total de execuție.
  • Oferă adnotări care controlează eficient fluxul de testare.
  • promoții testare bazată pe date prin @DataProvider adnotare.
  • generează rapoarte personalizabile pentru o depanare mai bună.

De exemplu, TestNG vă permite să executați independent grupuri de teste de tip fume, regresie și integrare, fără a modifica codul de testare, oferind flexibilitate și scalabilitate în suite mari de automatizare.


2) Explicați TestNG ciclul de viață cu adnotări și ordinea lor de execuție.

TestNG Ciclul de viață definește modul în care testele sunt inițializate, executate și terminate. Acesta este controlat prin adnotări care oferă structură și claritate fluxului de testare.

adnotare Descriere Ordin de executare
@BeforeSuite Rulează înaintea tuturor testelor din suită 1
@BeforeTest Se execută înainte de <test> etichetă în XML 2
@BeforeClass Se execută înaintea primei metode din clasa curentă 3
@BeforeMethod Se execută înainte de fiecare metodă de testare 4
@Test Conține logică de testare reală 5
@AfterMethod Se execută după fiecare metodă de testare 6
@AfterClass Rulează după toate metodele din clasă 7
@AfterTest Aleargă după <test> etichetă în XML 8
@AfterSuite Se execută după toate testele din suită 9

Această ordine structurată asigură o configurare și o demontare previzibilă a testelor, crucială pentru menținerea independenței testelor.


3) Cum este TestNG diferit de JUnit?

Deși ambele framework-uri sunt utilizate pentru testarea unitară, TestNG oferă capacități de configurare mai robuste și execuție paralelă.

Caracteristică JUnit TestNG
Execuție paralelă Suport limitat Suport complet
Adnotări Mai puține (@Before, @After) Mai bogat (@BeforeSuite, @DataProvider)
Managementul dependenței Nu este disponibil Disponibil folosind dependsOnMethods
Gruparea Nu este suportat Acceptat folosind groups
Parametrizare Prin intermediul unor alergători externi Încorporat prin XML sau @DataProvider

În concluzie, TestNG este preferat pentru testarea automatizării la nivel de întreprindere și integrare cu instrumente precum Selenium, în timp ce JUnit este ideal pentru teste unitare mai simple.


4) Ce sunt TestNG adnotări și cum sunt acestea utile?

Adnotări în TestNG defini structura și comportamentul metodelor de testareAcestea elimină necesitatea unei configurări XML complexe prin furnizarea de control declarativ al testelor direct în cod.

Adnotările utilizate în mod obișnuit includ:

  • @BeforeSuite, @BeforeTest, @BeforeClass, @BeforeMethod
  • @Test
  • @AfterMethod, @AfterClass, @AfterTest, @AfterSuite

Exemplu:

@BeforeMethod
public void setup() {
    System.out.println("Initializing browser...");
}

@Test
public void verifyLogin() {
    System.out.println("Executing login test...");
}

Acest lucru ajută dezvoltatorii să organizeze execuția testelor în mod logic, asigurându-se că configurarea, execuția testelor și demontarea au loc într-o ordine definită.


5) Explicați conceptul de grupare în TestNG.

Gruparea în TestNG permite clasificarea logică a testelor în seturi mai mici, ușor de gestionat, cum ar fi „Fum”, „Regresie” sau „Sanitate”.

Exemplu:

@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }

Puteți configura suita XML pentru a rula grupuri specifice:

<groups>
  <run>
    <include name="Smoke"/>
  </run>
</groups>

Beneficii:

  • Facilitează execuția selectivă a cazurilor de testare.
  • Îmbunătățește flexibilitatea în conductele CI/CD.
  • Economisește timp de execuție în timpul construcțiilor incrementale.

6) Cum se poate realiza parametrizarea în TestNG?

Parametrizarea permite testarea bazată pe date, permițând rularea testelor cu mai multe seturi de date de intrare. TestNG suportă două metode principale:

  1. Utilizarea @Parameters adnotare cu XML:
  2. <parameter name="browser" value="chrome"/>
    @Test
    @Parameters("browser")
    public void launchBrowser(String browser) { ... }
    
  3. Utilizarea @DataProvider:
  4. @DataProvider(name="loginData")
    public Object[][] getData() {
      return new Object[][] {{"user1","pass1"}, {"user2","pass2"}};
    }
    
    @Test(dataProvider="loginData")
    public void loginTest(String user, String pass) { ... }
    

Această flexibilitate facilitează întreținerea și executarea unor seturi mari de teste în diferite medii sau configurații.


7) Ce sunt dependențele în TestNG și cum sunt gestionate?

Dependențe în TestNG controlează ordinea de execuție a testelor pe baza rezultatelor altor teste folosind dependsOnMethods or dependsOnGroups atribute.

Exemplu:

@Test
public void loginTest() { ... }

@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }

Dacă metoda dependentă eșuează, testul ulterior este omis automat.

Acest mecanism previne execuția invalidă a testelor și ajută la menținerea integritatea testului logicEste util în special pentru fluxuri funcționale în mai mulți pași, cum ar fi autentificare → efectuare acțiune → verificare rezultat.


8) Care sunt diferitele modalități de execuție TestNG teste?

TestNG Testele pot fi executate în mai multe moduri flexibile, în funcție de configurația de testare:

  1. Din IDE (Eclipse/IntelliJ): Faceți clic dreapta pe clasă sau XML fileRun asTestNG Test.
  2. Din linia de comandă: java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml
  3. Utilizarea instrumentelor de construire:
    • Maven: Configurați surefire-plugin in pom.xml.
    • Gradle: Utilizare testng dependență și configurația sarcinilor.
  4. Prin conducte CI/CD: Integrat cu Jenkins sau GitHub Actions pentru execuție automată.

Această varietate asigură compatibilitatea între mediile de dezvoltare, testare și producție.


9) Ce sunt TestNG ascultători și de ce sunt aceștia importanți?

Ascultătorii în TestNG oferă hook-uri pentru a personaliza comportamentul testelor prin monitorizarea evenimentelor de execuție a testelor, cum ar fi pornirea, succesul, eșecul sau omiterea.

Ascultători obișnuiți:

  • ITestListenerUrmărește evenimentele la nivel de metodă de testare.
  • ISuiteListenerObservă evenimentele la nivel de suită.
  • IReporterGenerează rapoarte personalizate.

Exemplu:

public class CustomListener implements ITestListener {
  public void onTestFailure(ITestResult result) {
    System.out.println("Test Failed: " + result.getName());
  }
}

Ascultătorii sunt adesea folosiți pentru preluarea capturi de ecran la eșec, generatoare jurnale personalizate, integrarea cu instrumentele de raportare precum Allure sau ExtentReports.


10) Care sunt avantajele și dezavantajele utilizării TestNG?

Aspect Avantaje Dezavantaje
Flexibilitate Suportă gruparea, dependența și execuția paralelă Configurare XML complexă pentru suite mari
Raportarea Oferă rapoarte detaliate HTML și XML Personalizare limitată fără ascultători
Integrare Funcționează perfect cu Selenium și instrumente CI/CD Curba de învățare puțin mai mare
Parametrizare Suport încorporat pentru testarea bazată pe date Necesită întreținere pentru seturi de date mari

În general, TestNG este un framework robust și flexibil, potrivit pentru mediile moderne de testare automată, în ciuda costurilor minore de configurare.


11) Cum puteți prioritiza cazurile de testare în TestNG?

TestNG furnizează priority atribut în @Test adnotare pentru a defini ordinea în care ar trebui executate metodele de testare. Testele cu valori de prioritate mai mici rulează primele.

Exemplu:

@Test(priority = 1)
public void loginTest() { ... }

@Test(priority = 2)
public void dashboardTest() { ... }

Dacă nu este specificată nicio prioritate, valoarea implicită este 0și metodele se execută alfabetic.

Cea mai buna practica: Folosiți valorile de prioritate cu moderație. Suprautilizarea lor poate face ordinea de testare rigidă. Pentru fluxuri complexe, gestionarea dependențelor (dependsOnMethods) este mai ușor de întreținut decât prioritizarea strictă.


12) Explicați conceptul și utilizarea execuției paralele în TestNG.

Execuție paralelă în TestNG permite rularea simultană a mai multor teste, clase sau metode, reducând semnificativ timpul total de execuție.

Puteți activa această funcție în testng.xml fișier:

<suite name="ParallelSuite" parallel="tests" thread-count="3">
  <test name="Test1">...</test>
  <test name="Test2">...</test>
</suite>

Moduri paralele acceptate:

  • tests
  • classes
  • methods
  • instances

avantaje:

  • Ciclu de feedback mai rapid.
  • Utilizarea eficientă a procesoarelor multi-core.
  • Scalabilitate pentru suite mari de automatizare.

Totuși, asigurați-vă siguranța firului când se utilizează resurse partajate precum WebDriver sau conexiuni la baze de date.


13) Ce sunt furnizorii de date în TestNGCum diferă acestea de parametri?

@DataProvider permite testare bazată pe date prin furnizarea metodelor de testare cu seturi multiple de date.

Exemplu:

@DataProvider(name="credentials")
public Object[][] data() {
    return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}

@Test(dataProvider="credentials")
public void login(String username, String password) { ... }

Diferența dintre @Parameters și @DataProvider:

Caracteristică @Parameters @DataProvider
Sursă de date Fișier XML Java metodă
Tipul de date Set unic de date Seturi multiple de date
Flexibilitate Less Înalt
Utilizare caz Variabile de mediu Teste repetate bazate pe date

Prin urmare, @DataProvider este preferat atunci când se execută un singur test cu mai multe seturi de date, cum ar fi verificarea autentificării cu mai multe credențiale.


14) Cum poți dezactiva sau sări peste un test în TestNG?

Puteți dezactiva un test în TestNG folosind enabled atribut sau prin omiterea acestuia programatică.

1. Utilizarea enabled = false:

@Test(enabled = false)
public void skipTest() {
    System.out.println("This test will not run.");
}

2. Omiterea în timpul execuției folosind SkipException:

@Test
public void conditionalSkip() {
    throw new SkipException("Skipping this test due to condition.");
}

Dezactivarea este utilă pentru dezactivare temporară teste instabile sau incomplete fără a le șterge. Omiterea este valoroasă pentru condiții de execuție, cum ar fi omiterea testelor pentru browserele necompatibile.


15) Care este rolul fișierului testng.xml și care sunt componentele sale principale?

testng.xml fișierul este coloana vertebrală de configurare a TestNGDefinește suite de teste, grupuri de teste, parametri și configurarea execuției paralele.

Exemplu de structură:

<suite name="AutomationSuite">
  <parameter name="browser" value="chrome"/>
  <test name="RegressionTests">
    <classes>
      <class name="com.test.LoginTest"/>
      <class name="com.test.PaymentTest"/>
    </classes>
  </test>
</suite>

Componente majore:

  • <suite> – Definește întreaga suită.
  • <test> – Reprezintă un bloc de testare.
  • <classes> – Listează clasele de testare.
  • <methods> – Filtrează metode specifice de testare.
  • <parameter> – Oferă parametri globali sau la nivel de test.

Fișierul XML oferă control centralizat supraexecuție fără a modifica codul.


16) Cum puteți genera rapoarte în TestNG?

TestNG generează automat două tipuri de rapoarte:

  1. Raport HTML (test-output/index.html) – Rezumează testele promovate, respinse și omise.
  2. Raport XML – Folosit pentru integrarea cu instrumente CI/CD.

Pentru raportare avansată, TestNG se integrează cu:

  • ExtentReports – Oferă tablouri de bord grafice și jurnale detaliate.
  • Rapoartele Allure – Oferă analize vizuale cu pași de testare, capturi de ecran și jurnale.

Exemplu de integrare:

ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();

Aceste rapoarte sunt esențiale pentru urmărirea tendințelor și identificarea zonelor slabe în acoperirea testelor.


17) În ce se află fabricile TestNG, și cum funcționează?

Fabrici în TestNG sunt folosite pentru a crea instanțe dinamice ale claselor de testareAcestea permit instanțierea parametrizată a claselor înainte de rularea testelor.

Exemplu:

public class FactoryExample {
  private String browser;

  public FactoryExample(String browser) {
    this.browser = browser;
  }

  @Factory
  public static Object[] factoryMethod() {
    return new Object[] { new FactoryExample("Chrome"), new FactoryExample("Firefox") };
  }

  @Test
  public void testBrowser() {
    System.out.println("Running test on: " + browser);
  }
}

avantaje:

  • Activează crearea de obiecte parametrizate.
  • Ideal pentru testare cross-browser și execuție multi-mediu.
    Factoriile completează DataProviders atunci când aveți nevoie de configurații diferite ale obiectelor, în loc să folosiți doar variații de date la nivel de metodă.

18) Cum poți folosi aserțiunile în TestNG?

Aserțiunile sunt utilizate pentru a valida rezultatele așteptate față de cele reale în cadrul metodelor de testare.

Tipuri de afirmații:

  1. Afirmații dure (clasa Assert):
    Oprește imediat execuția testului în caz de eșec.
  2. Assert.assertEquals(actual, expected);
    Assert.assertTrue(condition);
    
  3. Aserțiuni soft (clasa SoftAssert):
    Continuă execuția chiar și după eșec, raportând toate problemele la final.
  4. SoftAssert soft = new SoftAssert();
        soft.assertEquals(actual, expected);
        soft.assertAll();
    
  5. Când utilizați:
    • Folosește afirmații dure pentru validare critică cum ar fi autentificarea reușită.
    • Folosește aserțiuni soft pentru verificări multiple în cadrul unei singure metode de testare.

19) Explicați diferența dintre @BeforeMethod și @BeforeClass în TestNG.

Aspect @BeforeMethod @BeforeClass
Execuție Rulează înainte de fiecare metoda de test Rulează o dată înainte orice metodă din clasă
domeniu Per metodă de testare Per clasă de testare
Uz comun Inițializarea browserului înainte de fiecare test Se încarcă configurația sau configurarea browserului o singură dată

Exemplu:

@BeforeClass
public void setupClass() {
    System.out.println("Executed once per class");
}

@BeforeMethod
public void setupMethod() {
    System.out.println("Executed before each method");
}

Utilizare @BeforeMethod când fiecare test necesită un mediu curat și @BeforeClass pentru sarcini de inițializare dificile care pot fi reutilizate.


20) Cum face TestNG injecția de dependențe de suport și care sunt cazurile sale de utilizare?

TestNG sprijină injecție de dependență prin injectarea încorporată a obiectelor de context și configurare, cum ar fi ITestContext, XmlTest, Method.

Exemplu:

@Test
public void testContextExample(ITestContext context) {
    System.out.println("Suite Name: " + context.getSuite().getName());
}

Cazuri de utilizare:

  • Preluarea parametrilor de testare în mod dinamic.
  • Accesarea informațiilor de configurare, cum ar fi numele suitelor sau setările de execuție paralelă.
  • Îmbunătățirea flexibilității testelor fără a crea dependențe.

Injecția de dependențe permite dezvoltatorilor să scrie teste modulare, contextuale care se adaptează dinamic la schimbările mediului.


21) Care este diferența dintre @Factory și @DataProvider în TestNG?

Ambele @Factory și @DataProvider ajută la parametrizare, dar funcționează la niveluri diferite în arhitectura de testare.

Caracteristică @Factory @DataProvider
domeniu Nivelul clasei Nivelul metodei
Scop Creează mai multe instanțe ale unei clase cu date diferite Furnizează date unei singure metode de testare
Execuție Execută întreaga clasă pentru fiecare instanță Execută o metodă de mai multe ori
Caz de utilizare ideal Testarea pe mai multe browsere sau în mediu Testare funcțională bazată pe date

Exemplu:

  • Fabrică: Rulează întreaga clasă per tip de browser.
  • Furnizor de date: Rulează o metodă de testare cu mai multe seturi de date.

Utilizare @Factory când instanțierea obiectului în sine variază și @DataProvider pentru variația inputului funcțional în cadrul aceleiași instanțe a obiectului.


22) Cum poți reîncerca automat cazurile de testare eșuate în TestNG?

TestNG oferă un mecanism pentru a reluați cazurile de testare eșuate folosind IRetryAnalyzer interfață.

Exemplu de implementare:

public class RetryAnalyzer implements IRetryAnalyzer {
  int count = 0;
  int maxTry = 2;

  public boolean retry(ITestResult result) {
    if (count < maxTry) {
      count++;
      return true;
    }
    return false;
  }
}

Utilizare:

@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
   Assert.fail("Intentional Failure");
}

Beneficii:

  • Reduce instabilitatea în conductele CI.
  • Gestionează problemele tranzitorii de rețea sau de mediu.

Cea mai buna practica: Combinați logica de reîncercare cu înregistrarea în jurnal și capturile de ecran adecvate pentru depanarea erorilor intermitente.


23) La ce este folosit ITestContext în TestNG?

ITestContext furnizează informații contextuale despre rularea testului, inclusiv numele suitei, numele testului, directorul de ieșire și parametrii.

Exemplu:

@Test
public void contextExample(ITestContext context) {
    System.out.println("Suite: " + context.getSuite().getName());
}

Metode cheie:

  • getSuite() – Preia informații la nivel de suită.
  • getName() – Returnează numele testului.
  • setAttribute() / getAttribute() – Partajarea datelor între teste.

Permite partajarea datelor între metode sau clase de testare și facilitează raportarea și înregistrarea dinamică.


24) Cum poți crea dependențe între grupuri de testare în TestNG?

Puteți defini dependențe intergrup folosind dependsOnGroups atribut în @Test adnotare.

Exemplu:

@Test(groups = "Login")
public void login() { ... }

@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }

Acest lucru asigură că verifyProfile grupul rulează numai dacă toate testele din Login trecere de grup cu succes.

Este deosebit de util în testarea de integrare, unde modulele depind de execuția cu succes a altora (de exemplu, fluxul de conectare → profil → deconectare).


25) Cum poți ignora anumite metode de testare într-un TestNG Fișier XML?

Puteți în mod explicit exclude metode într-o clasă din fișierul suitei XML folosind <exclude> tag-uri.

Exemplu:

<class name="com.test.LoginTests">
  <methods>
    <exclude name="verifyLogout"/>
  </methods>
</class>

Acest lucru permite testerilor să dezactivați temporar anumite metode fără a modifica Java cod sursă — util în suite mari unde este necesară includerea sau excluderea dinamică pe baza ciclurilor de lansare sau a priorităților sprintului.


26) Cum se poate TestNG fi integrat cu Selenium WebDriver?

TestNG și Selenium formează o combinație puternică pentru automatizarea interfeței utilizator.

O configurație tipică de integrare implică organizarea testelor folosind adnotări, gestionarea configurării/dezamorsării și rularea testelor prin intermediul instrumentelor XML sau CI.

Exemplu:

@BeforeMethod
public void setup() {
    driver = new ChromeDriver();
}

@Test
public void verifyTitle() {
    driver.get("https://example.com");
    Assert.assertEquals(driver.getTitle(), "Example Domain");
}

@AfterMethod
public void teardown() {
    driver.quit();
}

Beneficii de integrare:

  • Activează testarea paralelă a browserului.
  • Simplifică gruparea testelor și raportarea.
  • Funcționează perfect cu Conducte CI/CD precum Jenkins sau GitHub Actions.

27) Care sunt câteva dintre cele mai bune practici atunci când se utilizează TestNG în framework-uri mari de automatizare?

Cele mai bune practici:

  1. Utilizare DescriptDenumire activă: Denumiți testele bazate pe comportament, nu pe implementare.
  2. Gruparea cu pârghii: Creați grupuri de teste logice (Fum, Regresie).
  3. Evitați codarea hardcoding: Folosește parametri sau fișiere de proprietăți pentru datele de testare.
  4. Minimizarea dependențelor: Păstrați cazurile de testare independente ori de câte ori este posibil.
  5. Centralizați configurația: Utilizare testng.xml pentru amenajarea suitei.
  6. Integrarea raportării: Folosește listener-uri sau instrumente terțe, cum ar fi ExtentReports.
  7. Folosiți cu precauție logica de reîncercare: Evitați mascarea defectelor reale.

Respectarea acestor asigurări scalabilitate, mentenabilitate și lizibilitate în automatizarea la nivel de întreprindere.


28) Care este diferența dintre @BeforeTest și @BeforeSuite în TestNG?

Caracteristică @BeforeTest @BeforeSuite
domeniu Se execută înainte de fiecare <test> etichetă în XML Rulează o dată înaintea întregii suite
Frecvență De mai multe ori (dacă este de mai multe ori <test> blocuri) Doar o dată per suită
Uz comun Inițializați configurația la nivel de test Configurați resurse globale

Exemplu:

@BeforeSuite
public void setupSuite() {
    System.out.println("Global setup for suite.");
}

@BeforeTest
public void setupTest() {
    System.out.println("Setup for each <test> tag.");
}

Utilizare @BeforeSuite pentru configurații globale (de exemplu, conexiune la baza de date) și @BeforeTest pentru inițializări specifice testului.


29) Can TestNG poate fi folosit pentru testarea API-urilor? Cum?

Da. TestNG poate fi folosit eficient pentru Testare API prin integrarea cu bibliotecile client HTTP precum Fiți siguri or HttpClient.

Exemplu:

@Test
public void verifyApiResponse() {
    Response response = RestAssured.get("https://api.example.com/users");
    Assert.assertEquals(response.getStatusCode(), 200);
}

avantaje:

  • Activează validare bazată pe aserțiuni de răspunsuri.
  • Sprijină parametrizare și testare bazată pe date pentru mai multe puncte finale.
  • generează rapoarte structurate pentru validări API REST.

Prin combinare TestNG și cu RestAssured, testerii pot menține un cadru de automatizare unificat atât pentru testarea UI, cât și pentru cea API.


30) Cum se transmit parametrii din linia de comandă în TestNG?

Puteți suprascrie parametrii XML în timpul execuției prin transmiterea proprietăților de sistem folosind -D steag.

Exemplu de comandă:

mvn test -Dbrowser=chrome -Denv=staging

Exemplu de cod:

@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
    System.out.println("Running on: " + browser);
}

Acest lucru permite selecție dinamică a mediului în conductele CI/CD fără a modifica fișierele de configurare, sporind flexibilitatea testării.


31) Cum poți controla ordinea de execuție a testelor în TestNG fără a folosi priorități?

În loc de a folosi priority, TestNG permite controlul prin dependențe și Ordonarea metodelor XML.

Metode:

  1. Utilizarea dependsOnMethods:
  2. @Test
    public void login() { ... }
    
    @Test(dependsOnMethods = "login")
    public void verifyDashboard() { ... }
    
  3. Utilizarea secvenței metodei XML:
  4. <classes>
      <class name="com.test.LoginTests">
        <methods>
          <include name="login"/>
          <include name="verifyDashboard"/>
        </methods>
      </class>
    </classes>
    

Cea mai buna practica: Preferați dependențele logice pentru fluxuri complexe în locul priorităților statice, asigurând suite de teste robuste și ușor de întreținut.


32) Cum poți executa anumite metode de testare din linia de comandă în TestNG?

TestNG permite execuția testelor la nivel de metodă direct din linia de comandă folosind configurații XML sau Maven Surefire.

Opțiunea 1: Utilizarea fișierului XML

<class name="com.test.LoginTests">
  <methods>
    <include name="verifyLogin"/>
  </methods>
</class>

Opțiunea 2: Comandă Maven

mvn test -Dtest=com.test.LoginTests#verifyLogin

Această abordare permite execuție selectivă, util pentru depanarea metodelor individuale sau validarea funcționalităților critice în timpul compilărilor rapide.


33) Cum parametrizezi testele folosind un fișier Excel extern în TestNG?

Parametrizarea bazată pe Excel este comună în cadrele bazate pe date, unde datele de testare se schimbă frecvent.

Etape de implementare:

  1. Utilizare Apache POI or JExcel pentru a citi date Excel.
  2. Introduceți-l într-un @DataProvider metodă.

Exemplu:

@DataProvider(name = "excelData")
public Object[][] readExcel() throws Exception {
    FileInputStream fis = new FileInputStream("data.xlsx");
    XSSFWorkbook wb = new XSSFWorkbook(fis);
    XSSFSheet sheet = wb.getSheetAt(0);
    Object[][] data = new Object[sheet.getLastRowNum()][2];
    for (int i = 0; i < sheet.getLastRowNum(); i++) {
        data[i][0] = sheet.getRow(i + 1).getCell(0).getStringCellValue();
        data[i][1] = sheet.getRow(i + 1).getCell(1).getStringCellValue();
    }
    return data;
}

Acest lucru permite rularea aceleiași metode de testare cu mai multe seturi de date din lumea reală din Excel, crescând flexibilitatea și acoperirea.


34) Cum poți alerga TestNG teste în conducte Jenkins sau CI/CD?

TestNG se integrează perfect cu Jenkins, GitLab CI, GitHub Actiuni prin Maven sau Gradle construiește.

Pași în Jenkins:

  1. Instalare Plugin de integrare Maven.
  2. Crearea unei Lucrare Freestyle sau Pipeline.
  3. Adăuga mvn clean test ca etapă de construcție.
  4. După compilare, configurați rapoartele HTML:
    • Directorul de rapoarte: test-output
    • Fișier index: index.html

Beneficii:

  • Activează testarea automată a regresiei.
  • Oferă rulări de teste programate și urmărirea tendințelor.
  • Asigură executarea consecventă a testelor în toate mediile.

35) Care este scopul @Parameters și cum diferă de @Optional?

Ambele adnotări se ocupă de parametrizare, dar servesc unor scopuri distincte.

Caracteristică @Parameters @Optional
Scop Transmite parametrii din fișierul XML Oferă valoarea implicită dacă parametrul lipsește
Declarație Utilizat cu XML <parameter> Metoda de testare utilizată în interior
Comportament Generază eroare dacă lipsește o valoare Folosește o valoare de rezervă

Exemplu:

@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
    System.out.println("Running on: " + browser);
}

Utilizarea @Optional asigură stabilitate test când configurațiile XML sunt incomplete.


36) Cum gestionați dependențele de testare între diferite clase în TestNG?

Pentru a crea dependențe între clase, TestNG permite utilizarea dependsOnGroups atribut.

Exemplu:

@Test(groups = "Login")
public void loginTest() { ... }

@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }

Această abordare ajută la gestionarea dependențe multi-modul unde fiecare clasă reprezintă un modul (Autentificare, Tablou de bord, Plată etc.).

Asigură că modulele dependente se execută numai dacă testele preliminare sunt efectuate cu succes, menținând integritatea testelor.


37) Ce sunt erorile de configurare în TestNGși cum pot fi acestea gestionate?

Erorile de configurare apar atunci când metodele de configurare sau demontare sunt adnotate cu @Before* or @After* nu reușesc.

Ele pot provoca teste dependente de omis, chiar dacă acele teste sunt corecte.

Cauze comune:

  • Inițializare incorectă a WebDriver-ului.
  • Probleme de configurare a bazei de date sau a mediului.
  • Configurare greșită a parametrilor.

Soluții:

  • Utilizare încearcă să prinzi blocuri în metodele de configurare.
  • Aplică alwaysRun = true pentru a asigura curățarea în ciuda defecțiunilor.

Exemplu:

@BeforeMethod(alwaysRun = true)
public void setup() {
    // Setup logic
}

Acest lucru asigură că metodele de demontare sunt executate în continuare, menținând stabilitatea mediului de testare.


38) La ce sunt folosite atributele invocationCount și threadPoolSize în TestNG?

Aceste atribute permit execuție repetată și paralelă a testelor a aceleiași metode.

Exemplu:

@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
    System.out.println("Running load test...");
}
Atribut Descriere
invocationCount Numărul de execuții ale unei metode
threadPoolSize Numărul de fire de execuție simultane

Utilizare caz: Testarea performanței, verificarea stabilității sau reproducerea unui comportament instabil în timpul mai multor rulări.


39) Cum rulezi doar cazuri de testare eșuate în TestNG?

După o cursă prin suită, TestNG generează un fișier numit testng-failed.xml în test-output director.

Puteți rula din nou doar testele eșuate executând:

java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml

avantaje:

  • Economisește timp prin omiterea testelor reușite.
  • Facilitează depanarea în suite mari.
  • Utilizat în mod obișnuit în conductele CI pentru retestări rapide.

De asemenea, puteți integra acest lucru cu Jenkins folosind un script post-build pentru reluări.


40) Care sunt unele limitări ale TestNG și cum pot fi acestea atenuate?

În ciuda robusteții sale, TestNG are câteva limitări.

Prescripţie Strategia de atenuare
Complexitatea configurației XML Folosește configurații și constructori bazați pe adnotări
Raportare nativă limitată Integrați ExtentReports sau Allure
Fără control de reîncercare încorporat aplica IRetryAnalyzer
Probleme legate de siguranța firelor de execuție în paralel Folosește instanțe WebDriver locale pentru fire de execuție
Curba de învățare pentru începători Mențineți structurile de proiect bazate pe șabloane

Cu o proiectare adecvată a framework-ului și cele mai bune practici, aceste limitări pot fi reduse la minimum, asigurând soluții de automatizare stabile și ușor de întreținut.


41) Cum folosești listener-ele pentru înregistrarea în jurnal și realizarea de capturi de ecran în Selenium-TestNG?

Ascultătorii în TestNG ajută la monitorizarea execuției testelor și la efectuarea de acțiuni precum înregistrarea în jurnal, realizarea de capturi de ecran sau raportarea dinamică a rezultatelor.

Exemplu de implementare:

public class ScreenshotListener implements ITestListener {
  @Override
  public void onTestFailure(ITestResult result) {
      WebDriver driver = ((BaseTest) result.getInstance()).getDriver();
      File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
      FileUtils.copyFile(src, new File("screenshots/" + result.getName() + ".png"));
  }
}

Utilizare:

@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }

Beneficii:

  • Înregistrează automat defecțiunile.
  • Îmbunătățește depanarea prin dovezi vizuale.
  • Reduce efortul manual în gestionarea jurnalelor.

Această tehnică este crucială în procesul de automatizare CI/CD, în special atunci când se diagnostichează de la distanță versiunile eșuate.


42) Care este diferența dintre IReporter și ITestListener în TestNG?

Caracteristică IReporter ITestListener
Scop Generează rapoarte personalizate după execuția testului Urmărește și reacționează la evenimentele de testare în timpul rulării
Invocare După finalizarea tuturor testelor Pe parcursul ciclului de viață al testării (început, succes, eșec)
producție Rapoarte HTML/XML/JSON Fișiere jurnal, capturi de ecran, tablouri de bord live
Uz comun ExtentReports, integrare Allure Înregistrare în jurnal, gestionarea erorilor, mecanisme de reîncercare

Exemplu:

  • Utilizare IReporter pentru construire rapoarte cuprinzătoare după finalizarea testului.
  • Utilizare ITestListener pentru înregistrare în timp real sau capturi de ecran.

Pot fi, de asemenea combinate pentru a construi sisteme de analiză automatizată end-to-end.


43) Cum se efectuează testarea cross-browser folosind TestNG Configurație XML?

Testarea cross-browser asigură că aceeași funcționalitate funcționează pe diferite browsere.

Exemplu de configurare:

<suite name="CrossBrowserSuite" parallel="tests">
  <test name="ChromeTest">
    <parameter name="browser" value="chrome"/>
    <classes><class name="com.test.LoginTest"/></classes>
  </test>
  <test name="FirefoxTest">
    <parameter name="browser" value="firefox"/>
    <classes><class name="com.test.LoginTest"/></classes>
  </test>
</suite>

Java Cod:

@Parameters("browser")
@BeforeClass
public void setup(String browser) {
    if(browser.equalsIgnoreCase("chrome"))
        driver = new ChromeDriver();
    else if(browser.equalsIgnoreCase("firefox"))
        driver = new FirefoxDriver();
}

Această abordare permite execuție paralelă, în mai multe browsere, accelerând acoperirea testelor pe toate platformele.


44) Cum te integrezi TestNG cu Docker sau Selenium Grilă?

TestNG se integrează perfect cu Dockerizat Selenium Grilă pentru a permite testarea paralelă distribuită.

Pași:

  1. Configurarea Selenium Grilă în Docker folosind oficialul Selenium imagine:
    docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
  2. Actualizează TestNG înființat:
  3. DesiredCapabilities caps = new DesiredCapabilities();
    caps.setBrowserName("chrome");
    driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
    
  4. Executați suita prin intermediul Jenkins sau al conductei CI.

Beneficii:

  • Activează testare paralelă scalabilă.
  • Reduce costurile de configurare a mediului.
  • Oferă execuție consistentă a testelor prin containere distribuite.

45) Care este diferența dintre execuția paralelă la nivel de suită, test și metodă în TestNG?

Nivel Atribut paralel Comportamentul de execuție
Suită parallel="suites" Execută mai multe suite simultan
Testare parallel="tests" Rulează <test> blocuri simultan
Clasă parallel="classes" Rulează clase de testare în paralel
Metodă parallel="methods" Execută metode individuale de testare în paralel

Exemplu:

<suite name="ParallelTests" parallel="methods" thread-count="3">
  <test name="SampleTest">
    <classes><class name="com.test.ParallelExample"/></classes>
  </test>
</suite>

Cea mai buna practica:Utilizare parallel="classes" pentru stabilitate în Selenium teste pentru a evita conflictele dintre driverele partajate.


46) Cum poți partaja date între teste fără a utiliza variabile globale în TestNG?

TestNG furnizează ITestContext și injecție de dependență pentru a partaja date în mod dinamic.

Exemplu:

@Test
public void storeData(ITestContext context) {
    context.setAttribute("token", "abc123");
}

@Test(dependsOnMethods = "storeData")
public void useData(ITestContext context) {
    String token = (String) context.getAttribute("token");
    System.out.println("Using token: " + token);
}

Acest lucru evită variabilele statice, menține siguranța firelor de execuție și asigură izolarea datelor între teste.


47) Cum capturați și înregistrați testele omise în TestNG?

Puteți captura testele omise folosind onTestSkipped() în ITestListener interfață.

Exemplu:

@Override
public void onTestSkipped(ITestResult result) {
    System.out.println("Skipped Test: " + result.getName());
}

Motive pentru omitere:

  • Eșecul testului dependent.
  • Salt condiționat prin SkipException.
  • Indisponibilitatea mediului.

Cea mai buna practica:
Înregistrați motivele omiterilor și urmăriți stiva pentru trasabilitate în rapoartele sau tablourile de bord CI.


48) Explicați cum se parametrizează testele API REST folosind TestNG și RestAssured.

TestNG'S @DataProvider se integrează elegant cu Fiți siguri pentru parametrizarea API-ului.

Exemplu:

@DataProvider(name = "apiData")
public Object[][] apiData() {
  return new Object[][] {
    {"https://api.example.com/users/1"},
    {"https://api.example.com/users/2"}
  };
}

@Test(dataProvider = "apiData")
public void testApi(String url) {
  Response response = RestAssured.get(url);
  Assert.assertEquals(response.getStatusCode(), 200);
}

avantaje:

  • Execută același apel API pentru mai multe endpoint-uri sau sarcini utile.
  • Simplifică testarea de regresie pentru API-uri cu seturi de intrări variabile.
  • Se integrează perfect cu instrumentele și rapoartele CI.

49) Cum creezi adnotări personalizate în TestNG pentru modele de testare reutilizabile?

Adnotările personalizate pot standardiza configurațiile sau validările de teste repetitive.

Exemplu:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
  String description() default "Smoke Test";
}

Utilizare:

@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }

Combinată cu reflecția, puteți citi dinamic aceste adnotări pentru a grupa teste sau pentru a conduce execuția condiționată.

Această tehnică este utilizată pe scară largă în meta-programare cadru pentru a construi teste autodocumentate.


50) Cum poți combina Cucumber și TestNG pentru framework-uri de testare hibride?

TestNG poate acționa ca alergător de teste pentru Cucumber Scenarii BDD, oferind raportare și paralelizare puternice.

Exemplu de alergător:

@CucumberOptions(
  features = "src/test/resources/features",
  glue = "stepDefinitions",
  plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }

avantaje:

  • pîrghii TestNG'S adnotări, ascultători și raportare.
  • Sprijină execuție paralelă a funcțiilor.
  • Se integrează cu Atrage și ExtentReports ușurință.

Această abordare hibridă îmbină Lizibilitate BDD implementate cu TestNG flexibilitate, ideal pentru framework-uri de nivel enterprise.


🔍 Sus TestNG Întrebări de interviu cu scenarii din lumea reală și răspunsuri strategice

Mai jos sunt 10 exemple realiste, relevante pentru domeniu TestNG întrebări de interviu, împreună cu așteptări clare și exemple solide de răspunsuri.

1) Puteți explica principalele avantaje ale utilizării TestNG comparat cu JUnit?

Așteptat de la candidat: Demonstrați înțelegerea TestNGFuncțiile îmbunătățite ale aplicației și de ce este adesea preferată pentru automatizarea întreprinderilor.

Exemplu de răspuns: TestNG oferă mai multe avantaje, cum ar fi configurarea flexibilă a testelor, suport pentru execuție paralelă, metode de testare dependente, testare bazată pe date cu DataProviders și raportare încorporată. Aceste capabilități fac TestNG mai puternic pentru cadre complexe de automatizare care necesită scalabilitate.”


2) Cum folosești TestNG adnotări pentru a controla fluxul de execuție a testelor?

Așteptat de la candidat: Cunoașterea scopului și ordinii adnotărilor.

Exemplu de răspuns: TestNG oferă adnotări precum @BeforeSuite, @BeforeClass, @BeforeMethod, @Test și adnotările corespunzătoare de dezactivare. Acestea permit organizarea structurată a configurării și curățării testelor. De exemplu, @BeforeMethod se execută înaintea fiecărei metode de testare, ceea ce este util pentru inițializarea stării browserului.


3) Descrieți un proiect de automatizare dificil în care TestNG a jucat un rol cheie.

Așteptat de la candidat: Experiență reală în proiecte și capacitate de a articula rezolvarea problemelor.

Exemplu de răspuns: „În rolul meu anterior, am lucrat la un proiect care necesita teste de regresie extinse în mai multe medii.” TestNGFuncțiile de execuție paralelă și grupare ale aplicației au permis echipei să ruleze simultan suite critice, reducând semnificativ timpul de execuție, menținând în același timp fiabilitatea.


4) Cum se face TestNG grupurile ajută la organizarea și executarea eficientă a testelor?

Așteptat de la candidat: Înțelegerea grupării, inclusiv a mecanismelor de includere/excludere.

Exemplu de răspuns: „Grupuri în TestNG „permit clasificarea cazurilor de testare, cum ar fi fum, regresie și integrare. Folosind testng.xml, pot rula selectiv grupuri, exclude teste instabile și gestiona diferite suite de teste fără a modifica codul în sine.”


5) Descrie o situație în care a trebuit să depanezi o eroare. TestNG teste. Care a fost abordarea ta?

Așteptat de la candidat: Gândire critică și abilități de depanare.

Exemplu de răspuns: „Într-o poziție anterioară, am întâlnit o serie de defecțiuni” TestNG teste care păreau să treacă de testele locale, dar care au eșuat în CI. Am activat înregistrarea detaliată a datelor, am revizuit ordinea de execuție și am descoperit că o resursă partajată nu era resetată între teste. Apoi am implementat pașii corespunzători de demontare folosind @AfterMethod pentru a asigura izolarea testelor.


6) Cum implementați testarea bazată pe date folosind TestNG?

Așteptat de la candidat: Înțelegerea furnizorilor de date și a cazurilor de utilizare.

Exemplu de răspuns: „Creez o metodă @DataProvider care returnează date în tablouri de obiecte și apoi le leg de o metodă @Test folosind atributul dataProvider. Aceasta permite iterații multiple ale aceluiași test cu seturi de intrări diferite, ceea ce este util pentru validarea trimiterilor de formulare sau a variațiilor sarcinii utile API.”


7) Cum gestionați dependențele de testare în TestNG?

Așteptat de la candidat: Utilizarea corectă a metodelor dependsOnMethods sau dependsOnGroups.

Exemplu de răspuns: TestNG permite dependențe de testare prin atributele dependsOnMethods și dependsOnGroups. Folosesc dependențe atunci când un test trebuie executat numai după ce altul se finalizează cu succes, cum ar fi verificarea unei comenzi numai după crearea acesteia.


8) Descrieți cum ați folosit TestNG cu instrumente de integrare continuă.

Așteptat de la candidat: Experiență în domeniul automatizării din lumea reală.

Exemplu de răspuns: „La fostul meu loc de muncă, m-am integrat” TestNG cu Jenkins prin configurarea versiunii Maven pentru a genera TestNG Rapoarte HTML și XML. Jenkins a arhivat apoi rapoartele și a afișat rezultatele după fiecare ciclu de compilare. Această integrare a ajutat echipa să urmărească rapid erorile și să mențină stabilitatea lansării.


9) Povestește-mi despre o situație în care a trebuit să lucrezi cu termene limită stricte, gestionând mai multe sarcini de automatizare.

Așteptat de la candidat: Managementul timpului și capacitatea de a stabili priorități.

Exemplu de răspuns: „În ultimul meu rol, a trebuit să actualizez funcțiile existente” TestNG suite de teste, creând în același timp altele noi pentru o versiune viitoare. Am prioritizat sarcinile în funcție de impactul asupra afacerii, am automatizat mai întâi zonele cu cel mai mare risc și am folosit TestNG „grupare pentru a izola secțiunile completate pentru o revizuire timpurie. Acest lucru a asigurat livrarea la timp fără a compromite calitatea.”


10) Cum ați proiecta un sistem scalabil TestNG cadru de lucru pentru o aplicație mare?

Așteptat de la candidat: Archiînțelegerea structurilor, modelelor și celor mai bune practici.

Exemplu de răspuns: „Aș proiecta un framework modular folosind Modelul de Obiecte al Paginii, aș integra TestNG „pentru gestionarea execuției și aș utiliza DataProviders pentru scenarii bazate pe date. De asemenea, aș configura execuția paralelă, aș centraliza utilitățile și aș externaliza setările de configurare, astfel încât framework-ul să rămână scalabil și ușor de întreținut pe măsură ce aplicația crește.”

Rezumați această postare cu: