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

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
@DataProvideranotace. - 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:
- Použití
@Parametersanotace s XML: - Použití
@DataProvider:
<parameter name="browser" value="chrome"/>
@Test
@Parameters("browser")
public void launchBrowser(String browser) { ... }
@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í:
- Z IDE (Eclipse/IntelliJ): Klikněte pravým tlačítkem myši na třídu nebo
XML file→Run as→TestNG Test. - Z příkazového řádku:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - Používání nástrojů pro tvorbu:
- Maven: Konfigurace
surefire-plugininpom.xml. - Gradle: Použijte
testngzávislost a konfigurace úlohy.
- Maven: Konfigurace
- 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:
testsclassesmethodsinstances
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:
- HTML zpráva (
test-output/index.html) – Shrnuje úspěšné, neúspěšné a vynechané testy. - 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í:
- Tvrdá tvrzení (třída Assert):
Zastaví provádění testu ihned po selhání. - 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. - 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.
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
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:
- Použijte Descriptživé pojmenování: Pojmenovávejte testy podle chování, ne podle implementace.
- Seskupení pákového efektu: Vytvořte logické testovací skupiny (Kouř, Regrese).
- Vyhněte se hardkódování: Pro testovací data použijte parametry nebo soubory vlastností.
- Minimalizujte závislosti: Kdykoli je to možné, udržujte testovací případy nezávislé.
- Centralizovat konfiguraci: Použijte
testng.xmlpro nastavení apartmá. - Integrace reportingu: Používejte posluchače nebo nástroje třetích stran, jako například ExtentReports.
- 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:
- Použití
dependsOnMethods: - Použití sekvence metod XML:
@Test
public void login() { ... }
@Test(dependsOnMethods = "login")
public void verifyDashboard() { ... }
<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:
- Použijte Apache POI or JExcel číst data z Excelu.
- Vložte to do
@DataProvidermetoda.
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:
- instalovat Plugin pro integraci s Mavenem.
- Vytvořit Práce ve volném stylu nebo na potrubí.
- přidat
mvn clean testjako krok výstavby. - Po sestavení konfigurujte HTML sestavy:
- Adresář sestav:
test-output - Indexový soubor:
index.html
- Adresář sestav:
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 = trueaby 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
IReporterpro stavbu komplexní zprávy po dokončení testu. - Použijte
ITestListenerfor 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:
- Nastavení Selenium Mřížka v Dockeru pomocí úředníka Selenium obraz:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- Aktualizace TestNG Nastavení:
- Spusťte svůj balíček přes Jenkins nebo CI pipeline.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
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.“
