Top 50 TestNG Intervjufrågor och svar (2026)

Förbereder sig för en TestNG intervju? Det är dags att fundera över vilka frågor som visar dina styrkor. En gedigen TestNG Intervjugrunden visar djup, självförtroende och beredskap som värderas av anställningsteam.
Möjligheterna inom detta område omfattar automatiseringstillväxt, utvecklande ramverk och praktiska testapplikationer som kräver teknisk och professionell erfarenhet. Att arbeta inom området kräver domänexpertis, analysförmåga och en flexibel kompetensuppsättning som hjälper nyutexaminerade, mellannivå- och seniora yrkesverksamma att lösa vanliga frågor och svar inom tekniska, grundläggande och avancerade områden. Läs mer ...
👉 Gratis PDF-nedladdning: TestNG Intervjufrågor och svar
★★★★ TestNG Intervjufrågor och svar
1) Vad är TestNG och varför används det i automatiseringstestning?
TestNG (Test Next Generation) är ett testramverk inspirerat av JUnit och NUnit men förbättrade med avancerade funktioner som grouping, sekvensering, parametrisering och beroendehantering. Det används främst inom automatiseringstestning för att effektivisera testkörning, förbättra testorganisation och generera detaljerade HTML- och XML-rapporter.
Viktiga fördelar med TestNG innefattar:
- Stöder parallell testkörning, vilket minskar den totala körtiden.
- Ger annoteringar som effektivt styr testflödet.
- Erbjudanden datadrivna tester genom
@DataProvideranteckning. - skapar anpassningsbara rapporter för bättre felsökning.
Till exempel, TestNG låter dig köra rök-, regressions- och integrationstestgrupper oberoende av varandra utan att modifiera testkod, vilket erbjuder flexibilitet och skalbarhet i stora automationssviter.
2) Förklara TestNG livscykel med annoteringar och deras exekveringsordning.
Ocuco-landskapet TestNG Livscykeln definierar hur tester initieras, körs och avslutas. Den styrs genom annoteringar som ger struktur och tydlighet åt testflödet.
| anteckning | BESKRIVNING | Verkställighetsordern |
|---|---|---|
@BeforeSuite |
Körs före alla tester i sviten | 1 |
@BeforeTest |
Körs före <test> tagg i XML |
2 |
@BeforeClass |
Körs före den första metoden i den aktuella klassen | 3 |
@BeforeMethod |
Utförs före varje testmetod | 4 |
@Test |
Innehåller faktisk testlogik | 5 |
@AfterMethod |
Körs efter varje testmetod | 6 |
@AfterClass |
Körs efter alla metoder i klassen | 7 |
@AfterTest |
Springer efter <test> tagg i XML |
8 |
@AfterSuite |
Utförs efter alla tester i sviten | 9 |
Denna strukturerade ordning säkerställer förutsägbar testoppsättning och nedmontering, vilket är avgörande för att upprätthålla testoberoende.
3) Hur är det TestNG skiljer sig från JUnit?
Även om båda ramverken används för enhetstestning, TestNG ger mer robust konfiguration och parallella exekveringsmöjligheter.
| Leverans | JUnit | TestNG |
|---|---|---|
| Parallell utförande | Begränsat stöd | Fullt stöd |
| Anteckningar | Färre (@Before, @After) |
Rikare (@BeforeSuite, @DataProvider) |
| Beroendehantering | Ej tillgänglig | Tillgänglig med dependsOnMethods |
| Grouping | Stöds inte | Stöds med hjälp av groups |
| Parametrisering | Genom externa löpare | Inbyggt via XML eller @DataProvider |
Sammanfattningsvis, TestNG föredras för automatiseringstestning på företagsnivå och integration med verktyg som Selenium, medan JUnit är idealisk för enklare enhetstester.
4) Vad är TestNG anteckningar och hur är de användbara?
Anteckningar i TestNG definiera strukturen och beteendet hos testmetoderDe eliminerar behovet av komplex XML-konfiguration genom att tillhandahålla deklarativ testkontroll direkt i koden.
Vanligt förekommande annoteringar inkluderar:
@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod@Test@AfterMethod,@AfterClass,@AfterTest,@AfterSuite
Exempel:
@BeforeMethod
public void setup() {
System.out.println("Initializing browser...");
}
@Test
public void verifyLogin() {
System.out.println("Executing login test...");
}
Detta hjälper utvecklare att organisera testkörning logiskt, vilket säkerställer att installation, testkörning och nedmontering sker i en definierad ordning.
5) Förklara begreppet grouping in TestNG.
Grouping in TestNG möjliggör logisk kategorisering av tester i mindre, hanterbara mängder som "Rök", "Regression" eller "Förstånd".
Exempel:
@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }
Du kan konfigurera din XML-svit för att köra specifika grupper:
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
Fördelar:
- Underlättar selektiv exekvering av testfall.
- Ökar flexibiliteten i CI/CD-pipelines.
- Sparar körningstid under stegvisa byggen.
6) Hur kan parametrisering uppnås i TestNG?
Parameterisering möjliggör datadriven testning, vilket gör att tester kan köras med flera indatauppsättningar. TestNG stöder två primära metoder:
- Använda
@Parametersannotering med XML: - Använda
@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) { ... }
Denna flexibilitet gör det enklare att underhålla och köra stora testuppsättningar över olika miljöer eller konfigurationer.
7) Vad är beroenden i TestNG och hur hanteras de?
Beroenden i TestNG styr ordningen för testkörningen baserat på andra testresultat med hjälp av dependsOnMethods or dependsOnGroups attribut.
Exempel:
@Test
public void loginTest() { ... }
@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }
Om den beroende metoden misslyckas hoppas det efterföljande testet över automatiskt.
Denna mekanism förhindrar ogiltig testkörning och hjälper till att upprätthålla logisk testintegritetDet är särskilt användbart för funktionella flöden i flera steg som inloggning → utför åtgärd → verifiera resultat.
8) Vilka olika sätt att utföra TestNG tester?
TestNG Tester kan utföras på flera flexibla sätt beroende på testuppställningen:
- Från IDE (Eclipse/IntelliJ): Högerklicka på klassen eller
XML file→Run as→TestNG Test. - Från kommandoraden:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - Använda byggverktyg:
- Maven: Inställd
surefire-plugininpom.xml. - Gradle: Använda
testngberoende och uppgiftskonfiguration.
- Maven: Inställd
- Genom CI/CD-pipelines: Integrerad med Jenkins eller GitHub-åtgärder för automatiserad körning.
Denna variation säkerställer kompatibilitet mellan utvecklings-, test- och produktionsmiljöer.
9) Vad är TestNG lyssnare och varför är de viktiga?
Lyssnare in TestNG tillhandahålla hooks för att anpassa testbeteende genom att övervaka testkörningshändelser som start, lyckades, misslyckades eller hoppades över.
Vanliga lyssnare:
ITestListener: Tracks-testmetodnivåhändelser.ISuiteListener: Observerar händelser på svitnivå.IReporterGenererar anpassade rapporter.
Exempel:
public class CustomListener implements ITestListener {
public void onTestFailure(ITestResult result) {
System.out.println("Test Failed: " + result.getName());
}
}
Lyssnare används ofta för att ta skärmdumpar vid misslyckande, generera anpassade loggar, eller integrering med rapporteringsverktyg som Allure eller ExtentReports.
10) Vilka är fördelarna och nackdelarna med att använda TestNG?
| Aspect | Fördelar | Nackdelar |
|---|---|---|
| Flexibilitet | Stödjer grouping, beroende och parallell exekvering | Komplex XML-installation för stora sviter |
| Rapportering | Tillhandahåller detaljerade HTML- och XML-rapporter | Begränsad anpassning utan lyssnare |
| Integration | Fungerar sömlöst med Selenium och CI/CD-verktyg | Något högre inlärningskurva |
| Parametrisering | Inbyggt stöd för datadriven testning | Kräver underhåll för stora datamängder |
Sammantaget, TestNG är ett robust och flexibelt ramverk som är lämpligt för moderna automatiserade testmiljöer trots dess låga konfigurationskostnader.
11) Hur kan du prioritera testfall i TestNG?
TestNG ger priority attribut i @Test annotering för att definiera ordningen i vilken testmetoder ska köras. Tester med lägre prioritetsvärden körs först.
Exempel:
@Test(priority = 1)
public void loginTest() { ... }
@Test(priority = 2)
public void dashboardTest() { ... }
Om ingen prioritet anges är standardvärdet 0, och metoderna exekveras alfabetiskt.
Bästa praxis: Använd prioritetsvärden sparsamt. Överanvändning av dem kan göra testordningen stel. För komplexa flöden, beroendehantering (dependsOnMethods) är mer underhållbart än strikt prioritering.
12) Förklara konceptet och användningen av parallell exekvering i TestNG.
Parallell exekvering i TestNG tillåter att flera tester, klasser eller metoder körs samtidigt, vilket avsevärt minskar den totala körningstiden.
Du kan aktivera den här funktionen i testng.xml fil:
<suite name="ParallelSuite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> </suite>
Parallella lägen som stöds:
testsclassesmethodsinstances
fördelar:
- Snabbare återkopplingscykel.
- Effektiv användning av flerkärniga processorer.
- Skalbarhet för stora automationssviter.
Se dock till trådsäkerhet när man använder delade resurser som WebDriver eller databasanslutningar.
13) Vad är dataleverantörer i TestNGHur skiljer de sig från parametrar?
@DataProvider möjliggör datadrivna tester genom att tillhandahålla testmetoder med flera datamängder.
Exempel:
@DataProvider(name="credentials")
public Object[][] data() {
return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}
@Test(dataProvider="credentials")
public void login(String username, String password) { ... }
Skillnaden mellan @Parameters och @DataProvider:
| Leverans | @Parameters |
@DataProvider |
|---|---|---|
| Datakälla | XML-fil | Java metod |
| Data typ | Enskild datamängd | Flera datamängder |
| Flexibilitet | Less | Hög |
| Användningsfall | Miljövariabler | Upprepade datadrivna tester |
Därav, @DataProvider är att föredra när man kör ett enda test med flera datauppsättningar, till exempel verifierar inloggning med flera autentiseringsuppgifter.
14) Hur kan man inaktivera eller hoppa över ett test i TestNG?
Du kan inaktivera ett test i TestNG med enabled attribut eller genom att programmatiskt hoppa överping det.
1. Använder sig av enabled = false:
@Test(enabled = false)
public void skipTest() {
System.out.println("This test will not run.");
}
2. Hoppa överping under körning med hjälp av SkipException:
@Test
public void conditionalSkip() {
throw new SkipException("Skipping this test due to condition.");
}
Att inaktivera är användbart för tillfälligt avaktiverande instabila eller ofullständiga tester utan att radera dem. Hoppa överping är värdefullt för körtidsvillkor, som att hoppa överping tester för webbläsare som inte stöds.
15) Vilken roll har testng.xml-filen och vilka är dess huvudkomponenter?
Ocuco-landskapet testng.xml filen är konfigurationsryggraden för TestNGDen definierar testsviter, testgrupper, parametrar och inställningar för parallell exekvering.
Strukturexempel:
<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>
Huvudkomponenter:
<suite>– Definierar hela sviten.<test>– Representerar ett testblock.<classes>– Listar testklasser.<methods>– Filtrerar specifika testmetoder.<parameter>– Tillhandahåller globala parametrar eller parametrar på testnivå.
XML-filen tillhandahåller centraliserad kontroll överkörning utan att ändra koden.
16) Hur kan du generera rapporter i TestNG?
TestNG genererar automatiskt två typer av rapporter:
- HTML-rapport (
test-output/index.html) – Sammanfattar godkända, misslyckade och hoppade över prov. - XML-rapport – Används för integration med CI/CD-verktyg.
För avancerad rapportering, TestNG integreras med:
- Omfattningsrapporter – Erbjuder grafiska instrumentpaneler och detaljerade loggar.
- Allure-rapporter – Ger visuell analys med teststeg, skärmdumpar och loggar.
Exempelintegration:
ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();
Dessa rapporter är viktiga för trackungliga trender och identifiera svaga områden i testtäckningen.
17) Vad finns fabriker i? TestNG, och hur fungerar de?
Fabriker i TestNG används för att skapa dynamiska instanser av testklasserDe tillåter parametriserad instansiering av klasser innan tester körs.
Exempel:
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);
}
}
fördelar:
- möjliggör skapande av parametriserade objekt.
- perfekt för testning över webbläsare och körning i flera miljöer.
Fabriker kompletterar DataProviders när du behöver olika objektkonfigurationer snarare än bara datavariationer på metodnivå.
18) Hur kan man använda påståenden i TestNG?
Påståenden används för att validera förväntade kontra faktiska resultat inom testmetoder.
Typer av påståenden:
- Hårda påståenden (Assert-klassen):
Stoppar testkörningen omedelbart vid fel. - Mjuka påståenden (SoftAssert-klassen):
Fortsätter körningen även efter fel och rapporterar alla problem i slutet. - När du ska använda:
- Använd hårda påståenden för kritisk validering som lyckad inloggning.
- Använd mjuka påståenden för flera verifieringar inom en enda testmetod.
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
19) Förklara skillnaden mellan @BeforeMethod och @BeforeClass i TestNG.
| Aspect | @BeforeMethod |
@BeforeClass |
|---|---|---|
| Utförande | Körs före varje testmetod | Körs En gång förut vilken metod som helst i klassen |
| Omfattning | Per testmetod | Per testklass |
| Allmänt bruk | Initierar webbläsaren före varje test | Laddar konfiguration eller webbläsarinställningar en gång |
Exempel:
@BeforeClass
public void setupClass() {
System.out.println("Executed once per class");
}
@BeforeMethod
public void setupMethod() {
System.out.println("Executed before each method");
}
Använda @BeforeMethod när varje test behöver en ren miljö, och @BeforeClass för tunga initialiseringsuppgifter som kan återanvändas.
20) Hur gör TestNG stöd för beroendeinjektion och vilka är dess användningsfall?
TestNG stöder beroende injektion genom inbyggd injektion av kontext- och konfigurationsobjekt som ITestContext, XmlTest, eller Method.
Exempel:
@Test
public void testContextExample(ITestContext context) {
System.out.println("Suite Name: " + context.getSuite().getName());
}
Använd fall:
- Hämtar testparametrar dynamiskt.
- Åtkomst till konfigurationsinformation som svitnamn eller inställningar för parallell körning.
- Ökad testflexibilitet utan hårdkodningsberoenden.
Beroendeinjektion gör det möjligt för utvecklare att skriva modulära, kontextmedvetna tester som anpassar sig dynamiskt till miljöförändringar.
21) Vad är skillnaden mellan @Factory och @DataProvider i TestNG?
Både @Factory och @DataProvider hjälp med parametrisering, men de arbetar vid olika nivåer i testarkitekturen.
| Leverans | @Factory |
@DataProvider |
|---|---|---|
| Omfattning | Klassnivå | Metodnivå |
| Syfte | Skapar flera instanser av en klass med olika data | Levererar data till en enda testmetod |
| Utförande | Kör hela klassen för varje instans | Kör en metod flera gånger |
| Idealisk användningsfall | Testning över flera webbläsare eller i olika miljöer | Datadriven funktionell testning |
Exempel:
- Factory: Kör hela klassen per webbläsartyp.
- Dataleverantör: Kör en testmetod med flera datamängder.
Använda @Factory när själva objektinstansieringen varierar, och @DataProvider för funktionell inmatningsvariation inom samma objektinstans.
22) Hur kan man automatiskt försöka om misslyckade testfall i TestNG?
TestNG tillhandahåller en mekanism för att kör om misslyckade testfall med IRetryAnalyzer gränssnitt.
Exempel på implementering:
public class RetryAnalyzer implements IRetryAnalyzer {
int count = 0;
int maxTry = 2;
public boolean retry(ITestResult result) {
if (count < maxTry) {
count++;
return true;
}
return false;
}
}
Användning:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
Assert.fail("Intentional Failure");
}
Fördelar:
- Minskar flagnande egenskaper i CI-rörledningar.
- Hanterar tillfälliga nätverks- eller miljöproblem.
Bästa praxis: Kombinera logik för återförsök med korrekt loggning och skärmdumpar för att felsöka intermittenta fel.
23) Vad används ITestContext till i TestNG?
ITestContext ger kontextuell information om testkörningen, inklusive svitens namn, testnamn, utdatakatalog och parametrar.
Exempel:
@Test
public void contextExample(ITestContext context) {
System.out.println("Suite: " + context.getSuite().getName());
}
Viktiga metoder:
getSuite()– Hämtar information på svitnivå.getName()– Returnerar testnamnet.setAttribute()/getAttribute()– Dela data mellan tester.
Det möjliggör datadelning mellan testmetoder eller klasser och underlättar dynamisk rapportering och loggning.
24) Hur kan man skapa beroenden mellan testgrupper i TestNG?
Du kan definiera beroenden mellan grupper med hjälp av dependsOnGroups attribut i @Test anteckning.
Exempel:
@Test(groups = "Login")
public void login() { ... }
@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }
Detta säkerställer att verifyProfile gruppen körs endast om alla tester i Login gruppgodkännande framgångsrikt.
Det är särskilt användbart i integrationstest, där moduler är beroende av att andra körs framgångsrikt (t.ex. inloggning → profil → utloggningsflöde).
25) Hur kan man ignorera vissa testmetoder i en TestNG XML-fil?
Du kan uttryckligen exkludera metoder inom en klass i XML-svitfilen med hjälp av <exclude> taggar.
Exempel:
<class name="com.test.LoginTests">
<methods>
<exclude name="verifyLogout"/>
</methods>
</class>
Detta gör det möjligt för testare att inaktivera specifika metoder tillfälligt utan att modifiera Java källkod — användbar i stora programsviter där dynamisk inkludering eller exkludering behövs baserat på releasecykler eller sprintprioriteringar.
26) Hur kan TestNG vara integrerad med Selenium WebDriver?
TestNG och Selenium bildar en kraftfull kombination för UI-automation.
En typisk integrationsuppsättning innebär att organisera tester med hjälp av annoteringar, hantera installation/nedmontering och köra tester via XML- eller CI-verktyg.
Exempel:
@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();
}
Integrationsfördelar:
- möjliggör parallell webbläsartestning.
- Förenklar testgruppping och rapportering.
- Fungerar sömlöst med CI / CD-rörledningar tycka om Jenkins eller GitHub-åtgärder.
27) Vilka är några bästa metoder när man använder TestNG i stora automatiseringsramverk?
Bästa metoder:
- Använda Descriptfem namngivningar: Namnge tester baserat på beteende, inte implementering.
- Leverage Groupping: Skapa logiska testgrupper (Rök, Regression).
- Undvik hårdkodning: Använd parametrar eller egenskapsfiler för testdata.
- Minimera beroenden: Håll testfallen oberoende där det är möjligt.
- Centralisera konfigurationen: Använda
testng.xmlför svitinredning. - Integrera rapportering: Använd lyssnare eller tredjepartsverktyg som ExtentReports.
- Använd logiken för återförsök försiktigt: Undvik att maskera verkliga defekter.
Att följa dessa säkerställer skalbarhet, underhållbarhet och läsbarhet inom automatisering på företagsnivå.
28) Vad är skillnaden mellan @BeforeTest och @BeforeSuite i TestNG?
| Leverans | @BeforeTest |
@BeforeSuite |
|---|---|---|
| Omfattning | Körs före varje <test> tagg i XML |
Körs en gång före hela sviten |
| Frekvens | Flera gånger (om flera <test> block) |
Endast en gång per svit |
| Allmänt bruk | Initiera konfiguration på testnivå | Konfigurera globala resurser |
Exempel:
@BeforeSuite
public void setupSuite() {
System.out.println("Global setup for suite.");
}
@BeforeTest
public void setupTest() {
System.out.println("Setup for each <test> tag.");
}
Använda @BeforeSuite för globala konfigurationer (t.ex. databasanslutning) och @BeforeTest för testspecifika initialiseringar.
29) Kan TestNG användas för API-testning? Hur?
Ja. TestNG kan effektivt användas för API-testning genom att integrera med HTTP-klientbibliotek som RestAssured or Http-klient.
Exempel:
@Test
public void verifyApiResponse() {
Response response = RestAssured.get("https://api.example.com/users");
Assert.assertEquals(response.getStatusCode(), 200);
}
fördelar:
- möjliggör påståendebaserad validering av svar.
- Stöder parametrisering och datadrivna tester för flera slutpunkter.
- skapar strukturerade rapporter för REST API-valideringar.
Genom att kombinera TestNG och RestAssured kan testare upprätthålla ett enhetligt automatiseringsramverk för både UI- och API-testning.
30) Hur skickar man parametrar från kommandoraden i TestNG?
Du kan åsidosätta XML-parametrar vid körning genom att skicka systemegenskaper med hjälp av -D flagga.
Kommandoexempel:
mvn test -Dbrowser=chrome -Denv=staging
Code Exempel:
@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
System.out.println("Running on: " + browser);
}
Detta möjliggör dynamiskt miljöval i CI/CD-pipelines utan att ändra konfigurationsfiler, vilket förbättrar testflexibiliteten.
31) Hur kan man kontrollera testkörningsordningen i TestNG utan att använda prioriteringar?
Istället för att använda priority, TestNG möjliggör kontroll genom beroenden och XML-metodordning.
Metoder:
- Använda
dependsOnMethods: - Använda XML-metodsekvens:
@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>
Bästa praxis: Föredra logiska beroenden för komplexa flöden istället för statiska prioriteringar, vilket säkerställer robusta och underhållbara testsviter.
32) Hur kan man köra specifika testmetoder från kommandoraden i TestNG?
TestNG tillåter testkörning på metodnivå direkt från kommandoraden med hjälp av XML- eller Maven Surefire-konfigurationer.
Alternativ 1: Använda XML-fil
<class name="com.test.LoginTests">
<methods>
<include name="verifyLogin"/>
</methods>
</class>
Alternativ 2: Maven-kommandot
mvn test -Dtest=com.test.LoginTests#verifyLogin
Detta tillvägagångssätt tillåter selektiv utförande, användbart för att felsöka enskilda metoder eller validera kritiska funktioner under snabba byggen.
33) Hur parametriserar man tester med hjälp av en extern Excel-fil i TestNG?
Excel-driven parametrisering är vanligt i datadrivna ramverk där testdata ändras ofta.
Implementeringssteg:
- Använda Apache IP or JExcel att läsa Excel-data.
- Mata den in i en
@DataProvidermetod.
Exempel:
@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;
}
Detta gör det möjligt att köra samma testmetod med flera verkliga datamängder från Excel, vilket ökar flexibiliteten och täckningen.
34) Hur kan du springa TestNG tester i Jenkins eller CI/CD-pipelines?
TestNG integreras sömlöst med Jenkins, GitLab CI, eller GitHub-åtgärder genom Maven eller Gradle bygger.
Kliver in Jenkins:
- installera Maven-integrationsplugin.
- Skapa en Freestyle- eller pipelinejobb.
- Lägg till
mvn clean testsom ett byggsteg. - Konfigurera HTML-rapporter efter byggandet:
- Rapportkatalog:
test-output - Indexfil:
index.html
- Rapportkatalog:
Fördelar:
- Möjliggör automatiserad regressionstestning.
- Tillhandahåller schemalagda testkörningar och trender trackung.
- Säkerställer konsekvent testkörning i olika miljöer.
35) Vad är syftet med @Parameters och hur skiljer det sig från @Optional?
Båda annoteringarna handlar om parametrisering men tjänar olika syften.
| Leverans | @Parameters |
@Optional |
|---|---|---|
| Syfte | Skicka parametrar från XML-fil | Anger standardvärde om parameter saknas |
| Förklaring | Används med XML <parameter> |
Används inomhustestmetod |
| Beteende | Ger ett fel om värde saknas | Använder reservvärde |
Exempel:
@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
System.out.println("Running on: " + browser);
}
Använda @Optional säkerställer teststabilitet när XML-konfigurationerna är ofullständiga.
36) Hur hanterar du testberoenden mellan olika klasser i TestNG?
För att skapa beroenden mellan klasser, TestNG tillåter användning av dependsOnGroups attribut.
Exempel:
@Test(groups = "Login")
public void loginTest() { ... }
@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }
Denna metod hjälper till att hantera beroenden mellan flera moduler där varje klass representerar en modul (inloggning, instrumentpanel, betalning, etc.).
Det säkerställer att beroende moduler endast körs om nödvändiga tester lyckas, vilket bibehåller testintegriteten.
37) Vad är konfigurationsfel i TestNG, och hur kan de hanteras?
Konfigurationsfel uppstår när installations- eller nedmonteringsmetoder kommenteras med @Before* or @After* misslyckas.
De kan orsaka beroende tester att hoppa över, även om dessa tester är korrekta.
Vanliga orsaker:
- Felaktig WebDriver-initiering.
- Problem med databas- eller miljöinstallation.
- Felaktig parameterkonfiguration.
Lösningar:
- Använda försök fånga block i installationsmetoder.
- Ansök
alwaysRun = trueför att säkerställa att saneringen fortsätter trots misslyckanden.
Exempel:
@BeforeMethod(alwaysRun = true)
public void setup() {
// Setup logic
}
Detta säkerställer att dina nedmonteringsmetoder fortfarande körs, vilket bibehåller testmiljöns stabilitet.
38) Vad används attributen invocationCount och threadPoolSize till i TestNG?
Dessa attribut tillåter upprepad och parallell testkörning av samma metod.
Exempel:
@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
System.out.println("Running load test...");
}
| Attribut | BESKRIVNING |
|---|---|
invocationCount |
Antal gånger en metod körs |
threadPoolSize |
Antal samtidiga trådar |
Användningsfall: Prestandatestning, stabilitetsverifiering eller reproduktion av ojämnt beteende under flera körningar.
39) Hur kör man bara misslyckade testfall i TestNG?
Efter en svitens löprunda, TestNG genererar en fil med namnet testng-failed.xml i test-output katalog.
Du kan bara köra om misslyckade tester genom att köra:
java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml
fördelar:
- Sparar tid genom att hoppa överping lyckade tester.
- Underlättar felsökning i stora sviter.
- Vanligtvis används i CI-pipelines för snabba omtester.
Du kan också integrera detta med Jenkins använder ett post-build-skript för repriser.
40) Vilka är några begränsningar med TestNG och hur kan de mildras?
Trots sin robusthet, TestNG har några begränsningar.
| Begränsning | Begränsningsstrategi |
|---|---|
| XML-konfigurationens komplexitet | Använd annoteringsbaserad konfiguration och byggare |
| Begränsad rapportering om native-status | Integrera ExtentReports eller Allure |
| Ingen inbyggd kontroll för återförsök | Implementera IRetryAnalyzer |
| Trådsäkerhetsproblem vid parallella körningar | Använd trådlokala WebDriver-instanser |
| Inlärningskurva för nybörjare | Underhåll mallbaserade projektstrukturer |
Med korrekt ramverksdesign och bästa praxis kan dessa begränsningar minimeras, vilket säkerställer stabila och underhållbara automatiseringslösningar.
41) Hur använder du lyssnare för att logga och ta skärmdumpar i Selenium-TestNG?
Lyssnare in TestNG hjälpa till att övervaka testkörning och utföra åtgärder som loggning, ta skärmdumpar eller rapportera resultat dynamiskt.
Exempel på implementering:
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"));
}
}
Användning:
@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }
Fördelar:
- Registrerar fel automatiskt.
- Förbättrar felsökning genom visuella bevis.
- Minskar manuell ansträngning vid underhåll av loggar.
Den här tekniken är avgörande i CI/CD-automatiseringspipelines, särskilt vid fjärrdiagnostisering av misslyckade byggen.
42) Vad är skillnaden mellan iReporter och ITestListener i TestNG?
| Leverans | IReporter |
ITestListener |
|---|---|---|
| Syfte | Genererar anpassade rapporter efter testkörning | Tracks och reagerar på händelser under körningstest |
| Åkallan | Efter att alla tester är klara | Under testets livscykel (start, framgång, misslyckande) |
| Produktion | HTML/XML/JSON-rapporter | Loggfiler, skärmdumpar, live-instrumentpaneler |
| Allmänt bruk | ExtentReports, Allure-integration | Loggning, felhantering, mekanismer för återförsök |
Exempel:
- Använda
IReporterför byggnad omfattande rapporter efter avslutat test. - Använda
ITestListenerför realtidsloggning eller skärmdumpar.
Det kan de också vara kombinerad att bygga heltäckande automatiseringsanalyssystem.
43) Hur utför du tester över flera webbläsare med hjälp av TestNG XML-konfiguration?
Testning mellan webbläsare säkerställer att samma funktionalitet fungerar i olika webbläsare.
Exempelkonfiguration:
<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 Code:
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
if(browser.equalsIgnoreCase("chrome"))
driver = new ChromeDriver();
else if(browser.equalsIgnoreCase("firefox"))
driver = new FirefoxDriver();
}
Denna metod möjliggör parallell körning av flera webbläsare, vilket accelererar testtäckningen över olika plattformar.
44) Hur integrerar man TestNG med Docker eller Selenium Rutnät?
TestNG integreras sömlöst med Dockeriserad Selenium Rutnät för att möjliggöra distribuerad parallell testning.
Steg:
- Montera myggnät för luckor Selenium Rutnät i Docker med hjälp av tjänstemannen Selenium bild:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- Uppdatering TestNG inställning:
- Utför din svit via Jenkins eller CI-pipeline.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
Fördelar:
- möjliggör skalbar parallell testning.
- Minskar omkostnader för miljöinstallation.
- Ger konsekvent testkörning över distribuerade containrar.
45) Vad är skillnaden mellan parallell exekvering på svit-, test- och metodnivå i TestNG?
| Nivå | Parallellt attribut | Exekveringsbeteende |
|---|---|---|
| Suite | parallel="suites" |
Kör flera sviter samtidigt |
| Testa | parallel="tests" |
Körs <test> blockerar samtidigt |
| Klass | parallel="classes" |
Kör testklasser parallellt |
| Metod | parallel="methods" |
Utför enskilda testmetoder parallellt |
Exempel:
<suite name="ParallelTests" parallel="methods" thread-count="3">
<test name="SampleTest">
<classes><class name="com.test.ParallelExample"/></classes>
</test>
</suite>
Bästa praxis:Använda parallel="classes" för stabilitet i Selenium tester för att undvika konflikter mellan delade drivrutiner.
46) Hur kan man dela data mellan tester utan att använda globala variabler i TestNG?
TestNG ger ITestContext och beroende injektion att dela data dynamiskt.
Exempel:
@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);
}
Detta undviker statiska variabler, upprätthåller trådsäkerhet och säkerställer dataisolering mellan tester.
47) Hur registrerar och loggar man missade tester TestNG?
Du kan spara missade tester med hjälp av onTestSkipped() i ITestListener gränssnitt.
Exempel:
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Skipped Test: " + result.getName());
}
Skäl till hoppping:
- Misslyckande med beroende test.
- Villkorlig överhoppningping via
SkipException. - Miljön är otillgänglig.
Bästa praxis:
Orsaker till loggöverhopp och stack traces för traceffektivitet i CI-rapporter eller dashboards.
48) Förklara hur man parametriserar REST API-tester med hjälp av TestNG och RestAssured.
TestNGÄr @DataProvider integreras elegant med RestAssured för API-parametrisering.
Exempel:
@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);
}
fördelar:
- Kör samma API-anrop för flera slutpunkter eller nyttolaster.
- Förenklar regressionstestning för API:er med varierande indatauppsättningar.
- Integreras sömlöst med CI-verktyg och rapporter.
49) Hur skapar man anpassade anteckningar i TestNG för återanvändbara testmönster?
Anpassade annoteringar kan standardisera upprepade testkonfigurationer eller valideringar.
Exempel:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
String description() default "Smoke Test";
}
Användning:
@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }
Kombinerat med reflektion kan du dynamiskt läsa dessa anteckningar för att gruppera tester eller driva villkorlig körning.
Denna teknik används flitigt i ramverksmetaprogrammering att bygga självdokumenterande tester.
50) Hur kan man kombinera Cucumber och TestNG för hybrida testramverk?
TestNG kan agera som testlöpare för Cucumber BDD-scenarier, som erbjuder kraftfull rapportering och parallellisering.
Exempellöpare:
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }
fördelar:
- utnyttjar TestNGÄr annoteringar, lyssnare och rapportering.
- Stöder parallell funktionskörning.
- Integrerar med Locka och Omfattningsrapporter lätt.
Denna hybridmetod slås samman BDD-läsbarhet med TestNG flexibilitet, perfekt för ramverk i företagsklass.
🔍 Topp TestNG Intervjufrågor med verkliga scenarier och strategiska svar
Nedan följer 10 realistiska, domänrelevanta TestNG intervjufrågor tillsammans med tydliga förväntningar och starka exempel på svar.
1) Kan du förklara de viktigaste fördelarna med att använda TestNG jämfört med JUnit?
Förväntat från kandidaten: Visa förståelse för TestNGs förbättrade funktioner och varför det ofta föredras för företagsautomation.
Exempel på svar: "TestNG ger flera fördelar såsom flexibel testkonfiguration, stöd för parallell exekvering, beroende testmetoder, datadriven testning med DataProviders och inbyggd rapportering. Dessa funktioner gör TestNG kraftfullare för komplexa automatiseringsramverk som kräver skalbarhet.”
2) Hur använder du TestNG annoteringar för att styra testkörningsflödet?
Förväntat från kandidaten: Kunskap om annoteringarnas syfte och ordning.
Exempel på svar: "TestNG erbjuder annoteringar som @BeforeSuite, @BeforeClass, @BeforeMethod, @Test och motsvarande nedmonteringsannoteringar. Dessa möjliggör strukturerad organisation av testuppsättning och rensning. Till exempel körs @BeforeMethod före varje testmetod, vilket är användbart för att initiera webbläsarens tillstånd.
3) Beskriv ett utmanande automationsprojekt där TestNG spelade en nyckelroll.
Förväntat från kandidaten: Verklig projekterfarenhet och förmåga att formulera problemlösningar.
Exempel på svar: ”I min tidigare roll arbetade jag med ett projekt som krävde omfattande regressionstestning i flera miljöer.” TestNGs parallella utförande och grouping Funktionerna gjorde det möjligt för teamet att köra kritiska programsviter samtidigt, vilket minskade körtiden avsevärt samtidigt som tillförlitligheten bibehölls.”
4) Hur gör TestNG Hjälper grupper till att organisera och genomföra tester effektivt?
Förväntat från kandidaten: Förståelse för grouping, inklusive mekanismer för att inkludera/exkludera.
Exempel på svar: "Grupper i TestNG möjliggör kategorisering av testfall som rök, regression och integration. Genom att använda testng.xml kan jag selektivt köra grupper, exkludera instabila tester och hantera olika testsviter utan att modifiera själva koden.”
5) Beskriv en situation där du var tvungen att felsöka vid fel TestNG tester. Vilken var din metod?
Förväntat från kandidaten: Kritiskt tänkande och felsökningsförmåga.
Exempel på svar: "På en tidigare position stötte jag på en rad misslyckanden" TestNG tester som verkade klara lokalt men misslyckades i CI. Jag aktiverade detaljerad loggning, granskade exekveringsordningen och upptäckte att en delad resurs inte återställdes mellan tester. Sedan implementerade jag lämpliga nedmonteringssteg med @AfterMethod för att säkerställa testisolering.
6) Hur implementerar du datadriven testning med hjälp av TestNG?
Förväntat från kandidaten: Förståelse för DataProviders och användningsfall.
Exempel på svar: "Jag skapar en @DataProvider-metod som returnerar data i objektarrayer och binder den sedan till en @Test-metod med hjälp av dataProvider-attributet. Detta möjliggör flera iterationer av samma test med olika indatauppsättningar, vilket är användbart för att validera formulärinlämningar eller API-nyttolastervariationer."
7) Hur hanterar du testberoenden i TestNG?
Förväntat från kandidaten: Korrekt användning av dependsOnMethods eller dependsOnGroups.
Exempel på svar: "TestNG tillåter testberoenden genom attributen dependsOnMethods och dependsOnGroups. Jag använder beroenden när ett test bara måste köras efter att ett annat har slutförts, till exempel att verifiera en order först efter att den har skapats.”
8) Beskriv hur du har använt TestNG med verktyg för kontinuerlig integration.
Förväntat från kandidaten: Erfarenhet av automatiseringspipelines i verkligheten.
Exempel på svar: "På mitt tidigare jobb integrerade jag TestNG med Jenkins genom att konfigurera Maven-bygget för att generera TestNG HTML- och XML-rapporter. Jenkins arkiverade sedan rapporterna och visade resultaten efter varje byggcykel. Denna integration hjälpte teamet track-fel snabbt och bibehåller frisättningsstabilitet.”
9) Berätta om en gång när du var tvungen att arbeta under snäva deadlines samtidigt som du hanterade flera automatiserade uppgifter.
Förväntat från kandidaten: Tidshantering och förmåga att prioritera.
Exempel på svar: "I min senaste roll behövde jag uppdatera befintliga TestNG testsviter samtidigt som jag skapade nya för en kommande release. Jag prioriterade uppgifter baserat på affärspåverkan, automatiserade de områden med högst risk först och använde TestNG grouping att isolera färdiga avsnitt för tidig granskning. Detta säkerställde snabb leverans utan att kompromissa med kvaliteten.”
10) Hur skulle du designa en skalbar TestNG Ramverk för en stor applikation?
Förväntat från kandidaten: ArchiTeknikförståelse, mönster och bästa praxis.
Exempel på svar: "Jag skulle designa ett modulärt ramverk med hjälp av Page Object Model, integrera TestNG för exekveringshantering och använda DataProviders för datadrivna scenarier. Jag skulle också konfigurera parallell exekvering, centralisera verktyg och externalisera konfigurationsinställningar så att ramverket förblir skalbart och underhållbart allt eftersom applikationen växer.”
