Top 50 TestNG Otázky a odpovědi na pohovor (2026)

Vrchní část TestNG Dotazy a odpovědi na pohovor

Příprava na a TestNG pohovor? Je čas zvážit otázky, které ukážou vaše silné stránky. Solidní TestNG Základy pohovoru odhalují hloubku, sebevědomí a připravenost, které si náborové týmy cení.

Příležitosti v této oblasti zahrnují růst automatizace, vyvíjející se frameworky a praktické testovací aplikace vyžadující technické a odborné zkušenosti. Práce v terénu vyžaduje odborné znalosti v dané oblasti, analytické dovednosti a flexibilní sadu dovedností, která pomáhá začínajícím, středním i vyšším profesionálům řešit běžné otázky a odpovědi na nejčastější otázky v oblasti technických, základních i pokročilých znalostí.
Přečtěte si více ...

👉 Zdarma ke stažení PDF: TestNG Otázky a odpovědi na pohovor

Vrchní část TestNG Dotazy a odpovědi na pohovor

1) Co je TestNG a proč se používá v automatizovaném testování?

TestNG (Test Next Generation) je testovací framework inspirovaný JUnit a NUnit, ale vylepšený o pokročilé funkce, jako je seskupování, řazení, parametrizace a správa závislostí. Používá se primárně v automatizovaném testování k zefektivnění provádění testů, zlepšení organizace testů a generování podrobných HTML a XML reportů.

Klíčové výhody TestNG patří:

  • Podporuje paralelní provádění testů, čímž se zkrátí celková doba běhu.
  • Poskytuje anotace které efektivně řídí tok testu.
  • Nabídky testování řízené daty přes @DataProvider anotace.
  • Generuje přizpůsobitelné reporty pro lepší ladění.

Například, TestNG umožňuje nezávisle spouštět skupiny kouřových, regresních a integračních testů bez úpravy testovacího kódu, což nabízí flexibilitu a škálovatelnost ve velkých automatizačních sadách.


2) Vysvětlete TestNG životní cyklus s anotacemi a pořadím jejich provádění.

Jedno TestNG Životní cyklus definuje, jak jsou testy inicializovány, spouštěny a ukončovány. Je řízen pomocí anotací, které poskytují strukturu a přehlednost průběhu testování.

Anotace Description Exekuční příkaz
@BeforeSuite Spustí se před všemi testy v sadě 1
@BeforeTest Provede se před <test> tag v XML 2
@BeforeClass Spustí se před první metodou v aktuální třídě. 3
@BeforeMethod Provádí se před každou testovací metodou 4
@Test Obsahuje skutečnou testovací logiku 5
@AfterMethod Spustí se po každé testovací metodě 6
@AfterClass Spustí se po všech metodách ve třídě 7
@AfterTest Běží po <test> tag v XML 8
@AfterSuite Spustí se po všech testech v sadě 9

Toto strukturované pořadí zajišťuje předvídatelné nastavení a demontáž testů, což je klíčové pro zachování nezávislosti testů.


3) Jak je TestNG se liší od JUnit?

I když se oba frameworky používají pro jednotkové testování, TestNG poskytuje robustnější konfiguraci a možnosti paralelního spouštění.

vlastnost JUnit TestNG
Paralelní provedení Omezená podpora Plná podpora
Anotace Méně (@Before, @After) Bohatší (@BeforeSuite, @DataProvider)
Správa závislostí Není k dispozici K dispozici s použitím dependsOnMethods
Seskupování Není podporováno Podporováno pomocí groups
Parametrizace Prostřednictvím externích běžců Vestavěné pomocí XML nebo @DataProvider

Celkem, TestNG je výhodné pro automatizované testování na podnikové úrovni a integraci s nástroji jako Selenium, zatímco JUnit je ideální pro jednodušší jednotkové testy.


4) Co jsou TestNG anotace a jak jsou užitečné?

Anotace v TestNG definovat struktura a chování testovacích metodEliminují potřebu složité konfigurace XML tím, že poskytují deklarativní kontrolu testování přímo v kódu.

Mezi běžně používané anotace patří:

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

Příklad:

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

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

To pomáhá vývojářům logicky organizovat provádění testů a zajišťuje, že nastavení, spuštění testu a ukončení probíhají v definovaném pořadí.


5) Vysvětlete koncept seskupování TestNG.

Seskupování TestNG umožňuje logické rozdělení testů do menších, lépe zvládnutelných sad, jako například „Kouř“, „Regrese“ nebo „Příčetnost“.

Příklad:

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

Svou sadu XML můžete nakonfigurovat tak, aby spouštěla ​​specifické skupiny:

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

Výhody:

  • Usnadňuje selektivní provádění testovacích případů.
  • Zvyšuje flexibilitu v CI/CD pipelinech.
  • Šetří čas provádění během inkrementálních sestavení.

6) Jak lze dosáhnout parametrizace v TestNG?

Parametrizace umožňuje testování řízené daty, což dovoluje spouštět testy s více vstupními datovými sadami. TestNG podporuje dvě primární metody:

  1. Použití @Parameters anotace s XML:
  2. <parameter name="browser" value="chrome"/>
    @Test
    @Parameters("browser")
    public void launchBrowser(String browser) { ... }
    
  3. Použití @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) { ... }
    

Tato flexibilita usnadňuje údržbu a provádění velkých testovacích sad napříč prostředími nebo konfiguracemi.


7) Co jsou závislosti v TestNG a jak se s nimi pracuje?

Závislosti v TestNG řídit pořadí provádění testů na základě výsledků jiných testů pomocí dependsOnMethods or dependsOnGroups atributy.

Příklad:

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

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

Pokud závislá metoda selže, následný test se automaticky přeskočí.

Tento mechanismus zabraňuje provedení neplatných testů a pomáhá udržovat logická integrita testuJe to obzvláště užitečné pro vícekrokové funkční toky, jako je přihlášení → provedení akce → ověření výsledku.


8) Jaké jsou různé způsoby provedení TestNG testy?

TestNG Testy lze provádět několika flexibilními způsoby v závislosti na nastavení testování:

  1. Z IDE (Eclipse/IntelliJ): Klikněte pravým tlačítkem myši na třídu nebo XML fileRun asTestNG Test.
  2. Z příkazového řádku: java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml
  3. Používání nástrojů pro tvorbu:
    • Maven: Konfigurace surefire-plugin in pom.xml.
    • Gradle: Použijte testng závislost a konfigurace úlohy.
  4. Prostřednictvím CI/CD kanálů: Integrováno s akcemi Jenkins nebo GitHub pro automatické spouštění.

Tato rozmanitost zajišťuje kompatibilitu napříč vývojovým, testovacím i produkčním prostředím.


9) Co jsou TestNG posluchači a proč jsou důležití?

Posluchači v TestNG poskytují hooky pro přizpůsobení chování testu monitorováním událostí provádění testu, jako je spuštění, úspěch, selhání nebo přeskočení.

Běžní posluchači:

  • ITestListenerSleduje události na úrovni testovací metody.
  • ISuiteListenerSleduje události na úrovni apartmánu.
  • IReporter: Generuje vlastní zprávy.

Příklad:

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

Posluchači se často používají k přijímání snímky obrazovky při selhání, generování vlastní protokolynebo integrace s nástroji pro tvorbu reportů jako Allure nebo ExtentReports.


10) Jaké jsou výhody a nevýhody používání TestNG?

Vzhled Výhody Nevýhody
Flexibilita Podporuje seskupování, závislosti a paralelní provádění Složité nastavení XML pro velké sady
Hlášení Poskytuje podrobné HTML a XML reporty Omezené přizpůsobení bez posluchačů
Integrace Funguje bez problémů s Selenium a nástroje CI/CD Mírně vyšší křivka učení
Parametrizace Vestavěná podpora pro testování řízené daty Vyžaduje údržbu pro velké datové sady

Celkově TestNG je robustní a flexibilní framework vhodný pro moderní prostředí automatizovaného testování, a to i přes jeho minimální konfigurační režijní náklady.


11) Jak můžete stanovit priority testovacích případů v TestNG?

TestNG poskytuje priority atribut v @Test Anotace pro definování pořadí, ve kterém by se testovací metody měly provádět. Testy s nižšími hodnotami priority se spustí jako první.

Příklad:

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

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

Pokud není zadána žádná priorita, výchozí hodnota je 0a metody se provádějí abecedně.

Nejlepší praxe: Používejte hodnoty priorit střídmě. Jejich nadměrné používání může způsobit, že pořadí testů bude nepružné. U složitých toků je vhodné spravovat závislosti (dependsOnMethods) je udržitelnější než striktní prioritizace.


12) Vysvětlete koncept a použití paralelního provádění v TestNG.

Paralelní provádění v TestNG umožňuje současné spuštění více testů, tříd nebo metod, což výrazně zkracuje celkovou dobu provádění.

Tuto funkci můžete povolit v testng.xml Soubor:

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

Podporované paralelní režimy:

  • tests
  • classes
  • methods
  • instances

Výhody:

  • Rychlejší cyklus zpětné vazby.
  • Efektivní využití vícejádrových procesorů.
  • Škálovatelnost pro velké automatizační sady.

Zajistěte však bezpečnost vlákna při použití sdílených zdrojů, jako je WebDriver nebo databázová připojení.


13) Co jsou poskytovatelé dat v TestNGJak se liší od parametrů?

@DataProvider umožňuje testování řízené daty dodáním více sad dat k testovacím metodám.

Příklad:

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

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

Rozdíl mezi @Parameters a @DataProvider:

vlastnost @Parameters @DataProvider
Zdroj dat Soubor XML Java metoda
Datový typ Jedna datová sada Více datových sad
Flexibilita Less Vysoký
Použijte pouzdro Proměnné prostředí Opakované testy založené na datech

Proto, @DataProvider je preferováno při provádění jednoho testu s více datovými sadami, například při ověřování přihlášení s více přihlašovacími údaji.


14) Jak můžete zakázat nebo přeskočit test v TestNG?

Test můžete zakázat v TestNG s použitím enabled atribut nebo jeho programově přeskočením.

1. Použitím enabled = false:

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

2. Přeskakování během běhu pomocí SkipException:

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

Zakázání je užitečné pro dočasná deaktivace nestabilní nebo neúplné testy bez jejich smazání. Přeskakování je cenné pro podmínky běhu, například přeskakování testů pro nepodporované prohlížeče.


15) Jaká je role souboru testng.xml a jaké jsou jeho hlavní součásti?

Jedno testng.xml soubor je konfigurační páteří TestNGDefinuje testovací sady, testovací skupiny, parametry a nastavení paralelního provádění.

Příklad struktury:

<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>

Hlavní součásti:

  • <suite> – Definuje celou sadu.
  • <test> – Představuje testovací blok.
  • <classes> – Vypíše testovací třídy.
  • <methods> – Filtruje specifické testovací metody.
  • <parameter> – Poskytuje globální parametry nebo parametry na úrovni testů.

Soubor XML poskytuje centralizované ovládání nadprovádění bez změny kódu.


16) Jak můžete generovat reporty v TestNG?

TestNG automaticky generuje dva typy zpráv:

  1. HTML zpráva (test-output/index.html) – Shrnuje úspěšné, neúspěšné a vynechané testy.
  2. XML zpráva – Používá se pro integraci s nástroji CI/CD.

Pro pokročilé reportování TestNG integruje se s:

  • Zprávy o rozsahu – Nabízí grafické dashboardy a podrobné protokoly.
  • Allure Reports – Poskytuje vizuální analýzy s kroky testování, snímky obrazovky a protokoly.

Příklad integrace:

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

Tyto zprávy jsou nezbytné pro sledování trendů a identifikaci slabých oblastí v pokrytí testy.


17) V čem jsou továrny? TestNG, a jak fungují?

Továrny v TestNG se používají k vytvoření dynamické instance testovacích třídUmožňují parametrizované vytváření instancí tříd před spuštěním testů.

Příklad:

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);
  }
}

Výhody:

  • umožňuje vytváření parametrizovaných objektů.
  • Ideální pro testování napříč prohlížeči si provádění ve více prostředích.
    Továrny doplňují DataProviders, když potřebujete různé konfigurace objektů, spíše než jen variace dat na úrovni metod.

18) Jak můžete použít aserce v TestNG?

Tvrzení se používají k ověření očekávaných a skutečných výsledků v rámci testovacích metod.

Typy tvrzení:

  1. Tvrdá tvrzení (třída Assert):
    Zastaví provádění testu ihned po selhání.
  2. Assert.assertEquals(actual, expected);
    Assert.assertTrue(condition);
    
  3. Měkká tvrzení (třída SoftAssert):
    Pokračuje v provádění i po selhání a na konci hlásí všechny problémy.
  4. SoftAssert soft = new SoftAssert();
        soft.assertEquals(actual, expected);
        soft.assertAll();
    
  5. Kdy použít:
    • Použijte tvrdá tvrzení pro kritické validace jako úspěšné přihlášení.
    • Použijte měkká tvrzení pro vícenásobné ověření v rámci jedné zkušební metody.

19) Vysvětlete rozdíl mezi @BeforeMethod a @BeforeClass v TestNG.

Vzhled @BeforeMethod @BeforeClass
Provedení Běží před každým testovací metoda Běží jednou předtím libovolná metoda ve třídě
Rozsah Podle zkušební metody Na testovací třídu
Běžné použití Inicializace prohlížeče před každým testem Jedno načtení konfigurace nebo nastavení prohlížeče

Příklad:

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

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

Použijte @BeforeMethod kdy každý test vyžaduje čisté prostředí a @BeforeClass pro náročné inicializační úlohy, které lze znovu použít.


20) Jak se to dělá TestNG Podpora vkládání závislostí a jaké jsou její případy použití?

TestNG podporuje injekce závislosti prostřednictvím vestavěného vkládání kontextu a konfiguračních objektů, jako například ITestContext, XmlTestnebo Method.

Příklad:

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

Případy užití:

  • Dynamické načítání testovacích parametrů.
  • Přístup k informacím o konfiguraci, jako jsou názvy sad nebo nastavení paralelního spouštění.
  • Zvýšení flexibility testů bez závislostí na hardcodingu.

Vkládání závislostí umožňuje vývojářům psát modulární, kontextově orientované testy které se dynamicky přizpůsobují změnám prostředí.


21) Jaký je rozdíl mezi @Factory a @DataProvider v TestNG?

Oba @Factory si @DataProvider pomáhají s parametrizací, ale pracují na různé úrovně v testovací architektuře.

vlastnost @Factory @DataProvider
Rozsah Úroveň třídy Úroveň metody
Účel Vytvoří více instancí třídy s různými daty. Dodává data jedné testovací metodě
Provedení Spustí celou třídu pro každou instanci Spustí jednu metodu vícekrát
Ideální případ použití Testování napříč prohlížeči nebo prostředím Funkční testování řízené daty

Příklad:

  • Továrna: Spustí celou třídu pro každý typ prohlížeče.
  • Poskytovatel dat: Spustí jednu testovací metodu s více datovými sadami.

Použijte @Factory když se samotná instance objektu mění a @DataProvider pro funkční variaci vstupu v rámci stejné instance objektu.


22) Jak můžete automaticky opakovat neúspěšné testovací případy v TestNG?

TestNG poskytuje mechanismus pro znovu spustit neúspěšné testovací případy s použitím IRetryAnalyzer rozhraní.

Příklad implementace:

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

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

Použití:

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

Výhody:

  • Snižuje vločkovitost v CI potrubích.
  • Řeší přechodné problémy se sítí nebo prostředím.

Nejlepší praxe: Kombinujte logiku opakování se správným protokolováním a snímky obrazovky pro ladění občasných selhání.


23) K čemu se používá ITestContext v TestNG?

ITestContext poskytuje kontextové informace o běhu testu, včetně názvu sady, názvu testu, výstupního adresáře a parametrů.

Příklad:

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

Klíčové metody:

  • getSuite() – Načte informace na úrovni sady.
  • getName() – Vrátí název testu.
  • setAttribute() / getAttribute() – Sdílení dat mezi testy.

To umožňuje sdílení dat mezi testovacími metodami nebo třídami a usnadňuje dynamické reportování a protokolování.


24) Jak můžete vytvořit závislost mezi testovacími skupinami v TestNG?

Závislosti mezi skupinami můžete definovat pomocí dependsOnGroups atribut v @Test anotace.

Příklad:

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

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

Tím je zajištěno, že verifyProfile skupina se spustí pouze tehdy, pokud všechny testy v Login úspěšný průchod skupiny.

Je to obzvláště užitečné v integrační testování, kde moduly závisí na úspěšném spuštění ostatních (např. postup přihlášení → profil → odhlášení).


25) Jak můžete ignorovat určité testovací metody v TestNG XML soubor?

Můžete explicitně vyloučit metody v rámci třídy v souboru XML suite pomocí <exclude> značky.

Příklad:

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

To umožňuje testerům dočasně zakázat určité metody bez úpravy Java zdrojový kód – užitečný ve velkých sadách, kde je potřeba dynamické začleňování nebo vylučování na základě cyklů vydání nebo priorit sprintů.


26) Jak může TestNG být integrován s Selenium WebDriver?

TestNG si Selenium tvoří silnou kombinaci pro automatizaci uživatelského rozhraní.

Typické nastavení integrace zahrnuje organizaci testů pomocí anotací, správu nastavení/demontáže a spouštění testů pomocí nástrojů XML nebo CI.

Příklad:

@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();
}

Výhody integrace:

  • umožňuje paralelní testování prohlížečů.
  • Zjednodušuje seskupování testů a vytváření reportů.
  • Funguje bez problémů s CI/CD potrubí jako Jenkins nebo GitHub Actions.

27) Jaké jsou některé osvědčené postupy při používání TestNG ve velkých automatizačních systémech?

Osvědčené postupy:

  1. Použijte Descriptživé pojmenování: Pojmenovávejte testy podle chování, ne podle implementace.
  2. Seskupení pákového efektu: Vytvořte logické testovací skupiny (Kouř, Regrese).
  3. Vyhněte se hardkódování: Pro testovací data použijte parametry nebo soubory vlastností.
  4. Minimalizujte závislosti: Kdykoli je to možné, udržujte testovací případy nezávislé.
  5. Centralizovat konfiguraci: Použijte testng.xml pro nastavení apartmá.
  6. Integrace reportingu: Používejte posluchače nebo nástroje třetích stran, jako například ExtentReports.
  7. Logiku opakování používejte opatrně: Vyhněte se maskování skutečných vad.

Dodržování těchto pokynů zajišťuje škálovatelnost, udržovatelnost a čitelnost v automatizaci na podnikové úrovni.


28) Jaký je rozdíl mezi @BeforeTest a @BeforeSuite v TestNG?

vlastnost @BeforeTest @BeforeSuite
Rozsah Běží před každým <test> tag v XML Spustí se jednou před celou sadou
Frekvence Vícekrát (pokud vícekrát <test> bloky) Pouze jednou za apartmá
Běžné použití Inicializace konfigurace na úrovni testování Nastavení globálních zdrojů

Příklad:

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

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

Použijte @BeforeSuite for globální konfigurace (např. připojení k databázi) a @BeforeTest for inicializace specifické pro test.


29) Může TestNG použít pro testování API? Jak?

Ano. TestNG lze efektivně využít pro API testování integrací s klientskými knihovnami HTTP, jako je Ujišťujeme vás or HttpClient.

Příklad:

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

Výhody:

  • umožňuje validace založená na tvrzeních odpovědí.
  • Podporuje parametrizace si testování řízené daty pro více koncových bodů.
  • Generuje strukturované zprávy pro validace REST API.

Kombinováním TestNG A díky RestAssured mohou testeři spravovat jednotný automatizační rámec pro testování uživatelského rozhraní i API.


30) Jak se předávají parametry z příkazového řádku v TestNG?

Parametry XML můžete za běhu přepsat předáním systémových vlastností pomocí -D vlajka.

Příklad příkazu:

mvn test -Dbrowser=chrome -Denv=staging

Příklad kódu:

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

To umožňuje dynamický výběr prostředí v CI/CD pipelinech bez změny konfiguračních souborů, což zvyšuje flexibilitu testování.


31) Jak můžete ovládat pořadí provádění testů v TestNG bez použití priorit?

Místo použití priority, TestNG umožňuje ovládání prostřednictvím Závislostí si Řazení metod XML.

Metody:

  1. Použití dependsOnMethods:
  2. @Test
    public void login() { ... }
    
    @Test(dependsOnMethods = "login")
    public void verifyDashboard() { ... }
    
  3. Použití sekvence metod XML:
  4. <classes>
      <class name="com.test.LoginTests">
        <methods>
          <include name="login"/>
          <include name="verifyDashboard"/>
        </methods>
      </class>
    </classes>
    

Nejlepší praxe: Upřednostňujte logické závislosti pro složité toky před statickými prioritami, což zajišťuje robustní a udržovatelné testovací sady.


32) Jak lze spustit specifické testovací metody z příkazového řádku v TestNG?

TestNG umožňuje provádění testů na úrovni metod přímo z příkazového řádku pomocí konfigurací XML nebo Maven Surefire.

Možnost 1: Použití souboru XML

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

Možnost 2: Příkaz Maven

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

Tento přístup umožňuje selektivní provedení, užitečné pro ladění jednotlivých metod nebo ověřování kritických funkcí během rychlého sestavení.


33) Jak parametrizujete testy pomocí externího souboru Excelu v TestNG?

Parametrizace řízená Excelem je běžná v datově řízených frameworkech, kde se testovací data často mění.

Kroky implementace:

  1. Použijte Apache POI or JExcel číst data z Excelu.
  2. Vložte to do @DataProvider metoda.

Příklad:

@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;
}

To umožňuje spustit stejnou testovací metodu s více reálnými datovými soubory z Excelu, což zvyšuje flexibilitu a pokrytí.


34) Jak můžeš běhat TestNG testy v Jenkins nebo CI/CD pipelinech?

TestNG se bez problémů integruje s Jenkins, GitLab CInebo Akce GitHub přes Maven nebo Gradle staví.

Kroky v Jenkinsovi:

  1. instalovat Plugin pro integraci s Mavenem.
  2. Vytvořit Práce ve volném stylu nebo na potrubí.
  3. přidat mvn clean test jako krok výstavby.
  4. Po sestavení konfigurujte HTML sestavy:
    • Adresář sestav: test-output
    • Indexový soubor: index.html

Výhody:

  • Umožňuje automatizované regresní testování.
  • Zajišťuje plánované testovací běhy a sledování trendů.
  • Zajišťuje konzistentní provádění testů napříč prostředími.

35) Jaký je účel @Parameters a jak se liší od @Optional?

Obě anotace se zabývají parametrizací, ale slouží odlišným účelům.

vlastnost @Parameters @Optional
Účel Předává parametry ze souboru XML Pokud parametr chybí, poskytuje výchozí hodnotu.
Prohlášení Používá se s XML <parameter> Použitá metoda vnitřního testování
Chování Vyvolá chybu, pokud chybí hodnota Používá záložní hodnotu

Příklad:

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

Použití @Optional zajišťuje test stability když jsou konfigurace XML neúplné.


36) Jak řešíte závislosti testů napříč různými třídami v TestNG?

Pro vytvoření závislostí mezi třídami, TestNG umožňuje použití dependsOnGroups atribut.

Příklad:

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

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

Tento přístup pomáhá řídit závislosti mezi více moduly kde každá třída představuje modul (Přihlášení, Dashboard, Platba atd.).

Zajišťuje, že závislé moduly se spustí pouze v případě, že jsou předpokladové testy úspěšné, a tím je zachována integrita testů.


37) Co jsou to selhání konfigurace v TestNG, a jak se s nimi dá zacházet?

K chybám konfigurace dochází, když jsou metody nastavení nebo demontáže označeny jako @Before* or @After* selhat.

Mohou způsobit závislé testy, které je třeba přeskočit, i když jsou tyto testy správné.

Společné příčiny:

  • Nesprávná inicializace WebDriveru.
  • Problémy s nastavením databáze nebo prostředí.
  • Nesprávná konfigurace parametrů.

Řešení:

  • Použijte Zkus chytit bloky v metodách nastavení.
  • Přihláška alwaysRun = true aby bylo zajištěno, že čištění proběhne i přes selhání.

Příklad:

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

Díky tomu je zajištěno, že vaše metody demontáže budou stále fungovat a zachová se stabilita testovacího prostředí.


38) K čemu se používají atributy invocationCount a threadPoolSize v TestNG?

Tyto atributy umožňují opakované a paralelní provádění testů stejné metody.

Příklad:

@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
    System.out.println("Running load test...");
}
Atribut Description
invocationCount Počet spuštění metody
threadPoolSize Počet souběžných vláken

Případ použití: Testování výkonu, ověřování stability nebo reprodukce nestabilního chování při více běhech.


39) Jak spouštíte pouze neúspěšné testovací případy v TestNG?

Po běhu v apartmá, TestNG generuje soubor s názvem testng-failed.xml v test-output adresáře.

Neúspěšné testy můžete znovu spustit spuštěním:

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

Výhody:

  • Šetří čas tím, že přeskakuje úspěšné testy.
  • Usnadňuje ladění ve velkých sadách.
  • Běžně se používá v CI pipelinech pro rychlé opakované testy.

Můžete to také integrovat s Jenkinsem pomocí skriptu po sestavení pro opakovaná spuštění.


40) Jaká jsou některá omezení TestNG a jak je lze zmírnit?

Navzdory své robustnosti, TestNG má několik omezení.

Omezení Strategie zmírňování
Složitost konfigurace XML Používejte konfiguraci a nástroje pro tvorbu textů založené na anotacích
Omezené nativní reportingové zprávy Integrujte ExtentReports nebo Allure
Žádná vestavěná kontrola opakování Nářadí IRetryAnalyzer
Obavy týkající se bezpečnosti vláken při paralelních běhech Použití instancí WebDriver lokálních pro vlákna
Křivka učení pro začátečníky Udržování struktur projektů založených na šablonách

Díky správnému návrhu frameworku a osvědčeným postupům lze tato omezení minimalizovat a zajistit tak stabilní a udržovatelná automatizační řešení.


41) Jak používáte posluchače pro logování a pořizování snímků obrazovky v Selenium-TestNG?

Posluchači v TestNG pomáhají monitorovat provádění testů a provádět akce, jako je protokolování, pořizování snímků obrazovky nebo dynamické hlášení výsledků.

Příklad implementace:

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"));
  }
}

Použití:

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

Výhody:

  • Automaticky zaznamenává poruchy.
  • Zlepšuje ladění pomocí vizuálních důkazů.
  • Snižuje manuální úsilí při údržbě protokolů.

Tato technika je klíčová v automatizačních pipelinech CI/CD, zejména při vzdálené diagnostice neúspěšných sestavení.


42) Jaký je rozdíl mezi IReporterem a ITestListenerem v TestNG?

vlastnost IReporter ITestListener
Účel Generuje vlastní zprávy po provedení testu Sleduje a reaguje na události běhových testů
Vyvolání Po dokončení všech testů Během životního cyklu testu (spuštění, úspěch, neúspěch)
Výstup Zprávy HTML/XML/JSON Soubory protokolů, snímky obrazovky, živé dashboardy
Běžné použití ExtentReports, integrace Allure Protokolování, ošetření selhání, mechanismy opakování

Příklad:

  • Použijte IReporter pro stavbu komplexní zprávy po dokončení testu.
  • Použijte ITestListener for záznamy v reálném čase nebo snímky obrazovky.

Mohou také být kombinovaný vybudovat komplexní systémy pro automatizovanou analytiku.


43) Jak provádíte testování napříč prohlížeči pomocí TestNG Konfigurace XML?

Testování napříč prohlížeči zajišťuje, že stejná funkcionalita funguje v různých prohlížečích.

Příklad konfigurace:

<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 Kód:

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

Tento přístup umožňuje paralelní spuštění ve více prohlížečích, čímž se urychlí pokrytí testy napříč platformami.


44) Jak se integrujete TestNG s Dockerem nebo Selenium Mřížka?

TestNG se bez problémů integruje s Dockerizováno Selenium Mřížka aby bylo možné distribuované paralelní testování.

Kroky:

  1. Nastavení Selenium Mřížka v Dockeru pomocí úředníka Selenium obraz:
    docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
  2. Aktualizace TestNG Nastavení:
  3. DesiredCapabilities caps = new DesiredCapabilities();
    caps.setBrowserName("chrome");
    driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
    
  4. Spusťte svůj balíček přes Jenkins nebo CI pipeline.

Výhody:

  • umožňuje škálovatelné paralelní testování.
  • Snižuje režijní náklady na nastavení prostředí.
  • Poskytuje konzistentní provádění testů napříč distribuovanými kontejnery.

45) Jaký je rozdíl mezi paralelním prováděním na úrovni sady, testů a metod v TestNG?

Úroveň Paralelní atribut Chování při provádění
Suita parallel="suites" Spouští více sad současně
test parallel="tests" Běží <test> bloky současně
Třída parallel="classes" Spouští testovací třídy paralelně
Metoda parallel="methods" Provádí jednotlivé testovací metody paralelně

Příklad:

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

Nejlepší praxe:Použijte parallel="classes" pro stabilitu v Selenium testy, aby se předešlo konfliktům sdílených ovladačů.


46) Jak můžete sdílet data mezi testy bez použití globálních proměnných v TestNG?

TestNG poskytuje ITestContext si injekce závislosti dynamicky sdílet data.

Příklad:

@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);
}

Tím se zabrání statickým proměnným, zachová se bezpečnost vláken a zajistí se izolace dat napříč testy.


47) Jak zaznamenáváte a zaznamenáváte vynechané testy? TestNG?

Vynechané testy můžete zachytit pomocí onTestSkipped() v ITestListener rozhraní.

Příklad:

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

Důvody pro přeskakování:

  • Selhání závislého testu.
  • Podmíněné přeskakování pomocí SkipException.
  • Nedostupnost prostředí.

Nejlepší praxe:
Zaznamenávat důvody přeskočení a trasování zásobníku pro účely sledovatelnosti v sestavách CI nebo dashboardech.


48) Vysvětlete, jak parametrizovat testy REST API pomocí TestNG a buďte si jisti.

TestNGJe @DataProvider elegantně se integruje s Ujišťujeme vás pro parametrizaci API.

Příklad:

@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);
}

Výhody:

  • Provede stejné volání API pro více koncových bodů nebo datových částí.
  • Zjednodušuje regresní testování API s různými vstupními sadami.
  • Bezproblémová integrace s nástroji a reporty CI.

49) Jak vytvoříte vlastní anotace v TestNG pro opakovaně použitelné testovací vzory?

Vlastní anotace mohou standardizovat konfigurace nebo validace opakovaných testů.

Příklad:

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

Použití:

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

V kombinaci s reflexí můžete tyto anotace dynamicky číst a seskupovat testy nebo řídit podmíněné provádění.

Tato technika je široce používána v frameworkové metaprogramování vytvářet samodokumentační testy.


50) Jak můžete kombinovat Cucumber si TestNG pro hybridní testovací frameworky?

TestNG může působit jako testovací běžec for Cucumber BDD scénáře, které nabízejí výkonné reportingové funkce a paralelizaci.

Příklad běžce:

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

Výhody:

  • Páky TestNGJe anotace, posluchače a reporty.
  • Podporuje paralelní provádění funkcí.
  • Integrace s Lákat si Zprávy o rozsahu snadno.

Tento hybridní přístup spojuje Čitelnost BDD s TestNG flexibilita, ideální pro frameworky podnikové úrovně.


🔍 Top TestNG Otázky pro pohovor s reálnými scénáři a strategickými odpověďmi

Níže uvádíme 10 realistických, pro danou doménu relevantních TestNG otázky k pohovoru spolu s jasnými očekáváními a pádnými příklady odpovědí.

1) Můžete vysvětlit klíčové výhody používání TestNG ve srovnání s JUnit?

Očekává se od kandidáta: Prokázat pochopení TestNGvylepšené funkce a proč je často preferován pro automatizaci podniků.

Příklad odpovědi: "TestNG nabízí několik výhod, jako je flexibilní konfigurace testů, podpora paralelního provádění, závislé testovací metody, testování řízené daty s DataProviders a vestavěné reportování. Díky těmto funkcím TestNG výkonnější pro komplexní automatizační frameworky, které vyžadují škálovatelnost.“


2) Jak používáte TestNG anotace pro řízení toku provádění testů?

Očekává se od kandidáta: Znalost účelu a pořadí anotací.

Příklad odpovědi: "TestNG nabízí anotace jako @BeforeSuite, @BeforeClass, @BeforeMethod, @Test a jim odpovídající anotace pro demontáž. Ty umožňují strukturovanou organizaci nastavení a čištění testů. Například @BeforeMethod se spustí před každou testovací metodou, což je užitečné pro inicializaci stavu prohlížeče.


3) Popište náročný automatizační projekt, kde TestNG hrál klíčovou roli.

Očekává se od kandidáta: Reálné zkušenosti s projekty a schopnost formulovat řešení problémů.

Příklad odpovědi: „Ve své předchozí roli jsem pracoval na projektu, který vyžadoval rozsáhlé regresní testování v různých prostředích.“ TestNGFunkce paralelního spouštění a seskupování umožnily týmu spouštět kritické sady současně, což výrazně zkrátilo dobu provádění a zároveň zachovalo spolehlivost.“


4) Jak na to TestNG Pomáhají skupiny efektivně organizovat a provádět testy?

Očekává se od kandidáta: Pochopení seskupování, včetně mechanismů zahrnutí/vyloučení.

Příklad odpovědi: „Skupiny v TestNG umožňují kategorizaci testovacích případů, jako je kouř, regrese a integrace. Pomocí souboru testng.xml mohu selektivně spouštět skupiny, vylučovat nestabilní testy a spravovat různé testovací sady bez nutnosti úpravy samotného kódu.“


5) Popište situaci, kdy jste museli ladit selhání TestNG testy. Jaký byl váš přístup?

Očekává se od kandidáta: Kritické myšlení a dovednosti v řešení problémů.

Příklad odpovědi: „Na předchozí pozici jsem se setkal s řadou neúspěšných TestNG testy, které se zdály být úspěšné lokálně, ale selhaly v CI. Povolil jsem podrobné protokolování, zkontroloval pořadí provádění a zjistil, že sdílený zdroj se mezi testy neresetoval. Poté jsem pomocí @AfterMethod implementoval příslušné kroky pro demontáž, abych zajistil izolaci testů.


6) Jak implementujete testování řízené daty pomocí TestNG?

Očekává se od kandidáta: Pochopení poskytovatelů dat (DataProvider) a případů užití.

Příklad odpovědi: „Vytvořím metodu @DataProvider, která vrací data v polích Object, a poté ji pomocí atributu dataProvider navážu na metodu @Test. To umožňuje více iterací stejného testu s různými vstupními sadami, což je užitečné pro validaci odeslaných formulářů nebo variací dat API.“


7) Jak spravujete závislosti testů v TestNG?

Očekává se od kandidáta: Správné použití metod dependsOnMethods nebo dependsOnGroups.

Příklad odpovědi: "TestNG umožňuje závislosti testů prostřednictvím atributů dependsOnMethods a dependsOnGroups. Závislosti používám, když se test musí spustit až po úspěšném dokončení jiného, ​​například když se objednávka ověřuje až po jejím vytvoření.


8) Popište, jak jste použili TestNG s nástroji pro průběžnou integraci.

Očekává se od kandidáta: Zkušenosti s reálnými automatizačními procesy.

Příklad odpovědi: „V mém předchozím zaměstnání jsem integroval TestNG s Jenkinsem konfigurací sestavení Maven pro generování TestNG HTML a XML reporty. Jenkins poté archivoval reporty a zobrazoval výsledky po každém cyklu sestavení. Tato integrace pomohla týmu rychle sledovat chyby a udržovat stabilitu vydání.“


9) Řekněte mi o situaci, kdy jste museli pracovat v napjatých termínech a zároveň zvládat více automatizačních úkolů.

Očekává se od kandidáta: Řízení času a schopnost stanovovat priority.

Příklad odpovědi: „V mé poslední roli jsem potřeboval aktualizovat stávající TestNG testovacích sad a zároveň jsem vytvářel nové pro nadcházející vydání. Prioritizaci úkolů jsem prováděl na základě dopadu na podnikání, nejprve jsem automatizoval oblasti s nejvyšším rizikem a používal TestNG seskupování pro oddělení dokončených sekcí pro včasnou kontrolu. To zajistilo včasné dodání bez kompromisů v kvalitě.“


10) Jak byste navrhli škálovatelné TestNG framework pro rozsáhlou aplikaci?

Očekává se od kandidáta: Archiporozumění texturám, vzorcům a osvědčeným postupům.

Příklad odpovědi: „Navrhl bych modulární framework s využitím modelu objektů stránky, integroval bych…“ TestNG pro správu provádění a pro scénáře řízené daty bych použil DataProviders. Také bych nakonfiguroval paralelní provádění, centralizoval utility a externalizoval konfigurační nastavení, aby rámec zůstal škálovatelný a udržovatelný s růstem aplikace.“

Shrňte tento příspěvek takto: