Top 50 TestNG Interviewspørgsmål og svar (2026)

Forberedelse til en TestNG interview? Det er tid til at overveje de spørgsmål, der viser dine styrker. En solid TestNG Interviewgrundlaget afslører dybde, selvtillid og parathed, som ansættelsesteams værdsætter.
Mulighederne inden for dette domæne spænder over automatiseringsvækst, udviklende frameworks og praktiske testapplikationer, der kræver teknisk og professionel erfaring. At arbejde i feltet kræver domæneekspertise, analysefærdigheder og et fleksibelt færdighedssæt, der hjælper nyuddannede, mellemledere og seniorer med at løse almindelige spørgsmål og svare på tværs af tekniske, grundlæggende og avancerede fag. Læs mere…
👉 Gratis PDF-download: TestNG Interview spørgsmål og svar
Top TestNG Interviewspørgsmål og svar
1) Hvad er TestNG og hvorfor bruges det i automatiseret testning?
TestNG (Test Next Generation) er et testframework inspireret af JUnit og NUnit, men forbedret med avancerede funktioner såsom gruppering, sekventering, parametrisering og afhængighedsstyring. Det bruges primært i automatiseringstest til at strømline testudførelse, forbedre testorganisering og generere detaljerede HTML- og XML-rapporter.
Vigtigste fordele ved TestNG omfatte:
- Understøtter parallel testudførelse, hvilket reducerer den samlede køretid.
- Giver anmærkninger der effektivt styrer testflowet.
- Tilbud datadrevet test gennem
@DataProvideranmærkning. - genererer tilpassede rapporter for bedre fejlfinding.
For eksempel: TestNG giver dig mulighed for at udføre røg-, regressions- og integrationstestgrupper uafhængigt uden at ændre testkode, hvilket giver fleksibilitet og skalerbarhed i store automatiseringssuiter.
2) Forklar TestNG livscyklus med annotationer og deres udførelsesrækkefølge.
TestNG Livscyklussen definerer, hvordan test initialiseres, udføres og afsluttes. Dette styres gennem annotationer, der giver struktur og klarhed til testflowet.
| Annotation | Produktbeskrivelse | Udførelsesordre |
|---|---|---|
@BeforeSuite |
Kører før alle tests i pakken | 1 |
@BeforeTest |
Udføres før <test> tag i XML |
2 |
@BeforeClass |
Kører før den første metode i den aktuelle klasse | 3 |
@BeforeMethod |
Udføres før hver testmetode | 4 |
@Test |
Indeholder faktisk testlogik | 5 |
@AfterMethod |
Kører efter hver testmetode | 6 |
@AfterClass |
Kører efter alle metoder i klassen | 7 |
@AfterTest |
Løber efter <test> tag i XML |
8 |
@AfterSuite |
Udfører efter alle test i suiten | 9 |
Denne strukturerede rækkefølge sikrer forudsigelig testopsætning og -nedtagning, hvilket er afgørende for at opretholde testuafhængighed.
3) Hvordan er TestNG forskellig fra JUnit?
Selvom begge frameworks bruges til enhedstestning, TestNG giver mere robust konfiguration og parallelle udførelsesmuligheder.
| Feature | JUnit | TestNG |
|---|---|---|
| Parallel udførelse | Begrænset support | Fuld støtte |
| Annotationer | Færre (@Before, @After) |
Rigere (@BeforeSuite, @DataProvider) |
| Afhængighedsstyring | Ikke tilgængelig | Tilgængelig ved brug af dependsOnMethods |
| Gruppering | Ikke understøttet | Understøttet ved hjælp af groups |
| Parametrisering | Gennem eksterne løbere | Indbygget via XML eller @DataProvider |
Sammenfattende TestNG foretrækkes til automatiseringstest på virksomhedsniveau og integration med værktøjer som f.eks. Selenium, mens JUnit er ideel til enklere enhedstests.
4) Hvad er TestNG annotationer, og hvordan er de nyttige?
Anmærkninger i TestNG definere strukturen og opførslen af testmetoderDe eliminerer behovet for kompleks XML-konfiguration ved at levere deklarativ testkontrol direkte i koden.
Almindeligt anvendte annoteringer inkluderer:
@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod@Test@AfterMethod,@AfterClass,@AfterTest,@AfterSuite
Eksempel:
@BeforeMethod
public void setup() {
System.out.println("Initializing browser...");
}
@Test
public void verifyLogin() {
System.out.println("Executing login test...");
}
Dette hjælper udviklere med at organisere testudførelsen logisk og sikre, at opsætning, testudførelse og nedtagning sker i en defineret rækkefølge.
5) Forklar konceptet gruppering i TestNG.
Gruppering i TestNG tillader logisk kategorisering af tests i mindre, håndterbare sæt såsom "Røg", "Regression" eller "Fornuft".
Eksempel:
@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }
Du kan konfigurere din XML-pakke til at køre bestemte grupper:
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
Fordele:
- Letter selektiv udførelse af testcases.
- Forbedrer fleksibiliteten i CI/CD-pipelines.
- Sparer udførelsestid under inkrementelle builds.
6) Hvordan kan parametrisering opnås i TestNG?
Parameterisering muliggør datadrevet testning, hvilket gør det muligt at køre tests med flere inputdatasæt. TestNG understøtter to primære metoder:
- Ved brug af
@Parametersannotering med XML: - Ved brug af
@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) { ... }
Denne fleksibilitet gør det nemmere at vedligeholde og udføre store testsæt på tværs af miljøer eller konfigurationer.
7) Hvad er afhængigheder i TestNG og hvordan administreres de?
Afhængigheder i TestNG styr rækkefølgen af testens udførelse baseret på andre testresultater ved hjælp af dependsOnMethods or dependsOnGroups attributter.
Eksempel:
@Test
public void loginTest() { ... }
@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }
Hvis den afhængige metode fejler, springes den efterfølgende test automatisk over.
Denne mekanisme forhindrer ugyldig testudførelse og hjælper med at vedligeholde logisk testintegritetDet er især nyttigt til funktionelle flows med flere trin som login → udfør handling → verificer resultat.
8) Hvad er de forskellige måder at udføre det på TestNG tests?
TestNG Test kan udføres på flere fleksible måder afhængigt af testopsætningen:
- Fra IDE (Eclipse/IntelliJ): Højreklik på klassen eller
XML file→Run as→TestNG Test. - Fra kommandolinjen:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - Brug af byggeværktøjer:
- Maven: Konfigurer
surefire-plugininpom.xml. - Gradle: Brug
testngafhængighed og opgavekonfiguration.
- Maven: Konfigurer
- Gennem CI/CD-rørledninger: Integreret med Jenkins eller GitHub Actions for automatiseret udførelse.
Denne variation sikrer kompatibilitet på tværs af udviklings-, test- og produktionsmiljøer.
9) Hvad er TestNG lyttere, og hvorfor er de vigtige?
Lyttere ind TestNG Lever hooks til at tilpasse testadfærd ved at overvåge testudførelseshændelser såsom start, succes, fiasko eller overspring.
Almindelige lyttere:
ITestListenerSporer hændelser på testmetodeniveau.ISuiteListener: Observerer begivenheder på suite-niveau.IReporterGenererer brugerdefinerede rapporter.
Eksempel:
public class CustomListener implements ITestListener {
public void onTestFailure(ITestResult result) {
System.out.println("Test Failed: " + result.getName());
}
}
Lyttere bruges ofte til at tage skærmbilleder ved fejl, genererer brugerdefinerede logfiler eller integration med rapporteringsværktøjer som Allure eller ExtentReports.
10) Hvad er fordelene og ulemperne ved at bruge TestNG?
| Aspect | Fordele | Ulemper |
|---|---|---|
| Fleksibilitet | Understøtter gruppering, afhængighed og parallel udførelse | Kompleks XML-opsætning til store pakker |
| Rapportering | Leverer detaljerede HTML- og XML-rapporter | Begrænset tilpasning uden lyttere |
| Integration | Fungerer problemfrit med Selenium og CI/CD-værktøjer | Lidt højere indlæringskurve |
| Parametrisering | Indbygget understøttelse af datadrevet testning | Kræver vedligeholdelse for store datasæt |
Alt i alt, TestNG er et robust og fleksibelt framework, der er egnet til moderne automatiseringstestmiljøer på trods af dets mindre konfigurationsoverhead.
11) Hvordan kan du prioritere testcases i TestNG?
TestNG giver priority attribut i @Test annotation til at definere den rækkefølge, som testmetoder skal udføres i. Test med lavere prioritetsværdier kører først.
Eksempel:
@Test(priority = 1)
public void loginTest() { ... }
@Test(priority = 2)
public void dashboardTest() { ... }
Hvis der ikke er angivet nogen prioritet, er standardværdien 0, og metoder udføres alfabetisk.
Bedste praksis: Brug prioritetsværdier sparsomt. Overforbrug kan gøre testordren rigid. For komplekse flows, afhængighedsstyring (dependsOnMethods) er mere vedligeholdelig end streng prioritering.
12) Forklar konceptet og brugen af parallel udførelse i TestNG.
Parallel udførelse i TestNG tillader flere tests, klasser eller metoder at køre samtidigt, hvilket reducerer den samlede udførelsestid betydeligt.
Du kan aktivere denne funktion i testng.xml fil:
<suite name="ParallelSuite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> </suite>
Understøttede parallelle tilstande:
testsclassesmethodsinstances
fordele:
- Hurtigere feedbackcyklus.
- Effektiv udnyttelse af multi-core processorer.
- Skalerbarhed til store automatiseringspakker.
Sørg dog for gevindsikkerhed når du bruger delte ressourcer som WebDriver eller databaseforbindelser.
13) Hvad er dataudbydere i TestNGHvordan adskiller de sig fra parametre?
@DataProvider muliggør datadrevet test ved at levere testmetoder med flere datasæt.
Eksempel:
@DataProvider(name="credentials")
public Object[][] data() {
return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}
@Test(dataProvider="credentials")
public void login(String username, String password) { ... }
Forskellen mellem @Parameters og @DataProvider:
| Feature | @Parameters |
@DataProvider |
|---|---|---|
| Datakilde | XML-fil | Java metode |
| Datatype | Enkelt datasæt | Flere datasæt |
| Fleksibilitet | Less | Høj |
| Use Case | Miljøvariabler | Gentagne datadrevne tests |
derfor @DataProvider foretrækkes, når der udføres en enkelt test med flere datasæt, f.eks. verifikation af login med flere legitimationsoplysninger.
14) Hvordan kan du deaktivere eller springe en test over i TestNG?
Du kan deaktivere en test i TestNG ved hjælp af enabled attribut eller ved at springe den over programmatisk.
1. Ved brug af enabled = false:
@Test(enabled = false)
public void skipTest() {
System.out.println("This test will not run.");
}
2. Spring over under kørsel ved hjælp af SkipException:
@Test
public void conditionalSkip() {
throw new SkipException("Skipping this test due to condition.");
}
Deaktivering er nyttigt for midlertidig deaktivering ustabile eller ufuldstændige tests uden at slette dem. Det er værdifuldt at springe dem over kørselsbetingelser, som at springe tests over for ikke-understøttede browsere.
15) Hvad er rollen af testng.xml-filen, og hvad er dens hovedkomponenter?
testng.xml filen er konfigurationsrygraden for TestNGDen definerer testsuiter, testgrupper, parametre og opsætning af parallel udførelse.
Struktureksempel:
<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>
Hovedkomponenter:
<suite>– Definerer hele suiten.<test>– Repræsenterer en testblok.<classes>– Viser en liste over testklasser.<methods>– Filtrerer specifikke testmetoder.<parameter>– Angiver globale parametre eller parametre på testniveau.
XML-filen leverer centraliseret kontrol overudførelse uden at ændre koden.
16) Hvordan kan du generere rapporter i TestNG?
TestNG genererer automatisk to typer rapporter:
- HTML-rapport (
test-output/index.html) – Opsummerer beståede, ikke-beståede og sprungne prøver. - XML-rapport – Bruges til integration med CI/CD-værktøjer.
For avanceret rapportering, TestNG integreres med:
- Omfangsrapporter – Tilbyder grafiske dashboards og detaljerede logfiler.
- Allure-rapporter – Giver visuel analyse med testtrin, skærmbilleder og logfiler.
Eksempel på integration:
ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();
Disse rapporter er afgørende for at spore tendenser og identificere svage områder i testdækningen.
17) Hvad er fabrikker i TestNG, og hvordan fungerer de?
Fabrikker i TestNG bruges til at skabe dynamiske instanser af testklasserDe tillader parameteriseret instantiering af klasser før kørsel af tests.
Eksempel:
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);
}
}
fordele:
- gør det muligt for oprettelse af parametriseret objekt.
- Ideel til test på tværs af browsere og udførelse i flere miljøer.
Fabrikker supplerer DataProviders, når du har brug for forskellige objektkonfigurationer i stedet for blot datavariationer på metodeniveau.
18) Hvordan kan du bruge påstande i TestNG?
Påstande bruges til at validere forventede versus faktiske resultater inden for testmetoder.
Typer af påstande:
- Hårde påstande (Assert-klasse):
Stopper testens udførelse øjeblikkeligt ved fejl. - Bløde påstande (SoftAssert-klasse):
Fortsætter udførelsen selv efter fejl, og rapporterer alle problemer til sidst. - Hvornår skal du bruge:
- Brug hårde påstande til kritisk validering som login succes.
- Brug bløde påstande til flere verifikationer inden for en enkelt testmetode.
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
19) Forklar forskellen mellem @BeforeMethod og @BeforeClass i TestNG.
| Aspect | @BeforeMethod |
@BeforeClass |
|---|---|---|
| Udførelse | Kører før hver testmetode | Kører en gang før enhver metode i klassen |
| Anvendelsesområde | Pr. testmetode | Pr. testklasse |
| Fælles brug | Initialiserer browseren før hver test | Indlæser konfiguration eller browseropsætning én gang |
Eksempel:
@BeforeClass
public void setupClass() {
System.out.println("Executed once per class");
}
@BeforeMethod
public void setupMethod() {
System.out.println("Executed before each method");
}
Brug @BeforeMethod når hver test kræver et rent miljø, og @BeforeClass til tunge initialiseringsopgaver, der kan genbruges.
20) Hvordan gør TestNG Support Dependency Injection, og hvad er dens anvendelsesscenarier?
TestNG understøtninger afhængighedsindsprøjtning gennem indbygget indsprøjtning af kontekst- og konfigurationsobjekter som f.eks. ITestContext, XmlTest eller Method.
Eksempel:
@Test
public void testContextExample(ITestContext context) {
System.out.println("Suite Name: " + context.getSuite().getName());
}
Brug sager:
- Henter testparametre dynamisk.
- Adgang til konfigurationsoplysninger som f.eks. suite-navne eller indstillinger for parallel udførelse.
- Forbedret testfleksibilitet uden hardcode-afhængigheder.
Afhængighedsinjektion giver udviklere mulighed for skriv modulære, kontekstbevidste tests som tilpasser sig dynamisk til miljøændringer.
21) Hvad er forskellen mellem @Factory og @DataProvider i TestNG?
Både @Factory og @DataProvider hjælp med parametrisering, men de opererer ved forskellige niveauer i testarkitekturen.
| Feature | @Factory |
@DataProvider |
|---|---|---|
| Anvendelsesområde | Klasseniveau | Metodeniveau |
| Formål | Opretter flere instanser af en klasse med forskellige data | Leverer data til en enkelt testmetode |
| Udførelse | Udfører hele klassen for hver instans | Udfører én metode flere gange |
| Ideel Brug Case | Test på tværs af browsere eller miljøer | Datadrevet funktionel testning |
Eksempel:
- Fabrik: Kører hele klassen pr. browsertype.
- Dataudbyder: Kører én testmetode med flere datasæt.
Brug @Factory når selve objektinstantieringen varierer, og @DataProvider for funktionel inputvariation inden for den samme objektinstans.
22) Hvordan kan du automatisk gentage mislykkede testcases i TestNG?
TestNG giver en mekanisme til gentag mislykkede testcases ved hjælp af IRetryAnalyzer interface.
Eksempel 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;
}
}
Anvendelse:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
Assert.fail("Intentional Failure");
}
Fordele:
- Reducerer afskalning i CI-rørledninger.
- Håndterer midlertidige netværks- eller miljøproblemer.
Bedste praksis: Kombiner gentagne forsøgslogik med korrekt logføring og skærmbilleder til fejlfinding af periodiske fejl.
23) Hvad er brugen af ITestContext i TestNG?
ITestContext giver kontekstuel information om testkørslen, herunder suitenavn, testnavn, outputmappe og parametre.
Eksempel:
@Test
public void contextExample(ITestContext context) {
System.out.println("Suite: " + context.getSuite().getName());
}
Nøglemetoder:
getSuite()– Henter oplysninger på suite-niveau.getName()– Returnerer testnavnet.setAttribute()/getAttribute()– Del data mellem tests.
Det muliggør datadeling på tværs af testmetoder eller klasser og muliggør dynamisk rapportering og logføring.
24) Hvordan kan man skabe afhængighed mellem testgrupper i TestNG?
Du kan definere afhængigheder mellem grupper ved hjælp af dependsOnGroups attribut i @Test anmærkning.
Eksempel:
@Test(groups = "Login")
public void login() { ... }
@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }
Dette sikrer, at verifyProfile gruppen kører kun, hvis alle tests i Login gruppebestået.
Det er særligt nyttigt i integrationstest, hvor moduler afhænger af den vellykkede udførelse af andre (f.eks. login → profil → logout-flow).
25) Hvordan kan man ignorere bestemte testmetoder i en TestNG XML-fil?
Du kan eksplicit ekskluderingsmetoder inden for en klasse i XML-suitefilen ved hjælp af <exclude> tags.
Eksempel:
<class name="com.test.LoginTests">
<methods>
<exclude name="verifyLogout"/>
</methods>
</class>
Dette giver testerne mulighed for deaktiver midlertidigt bestemte metoder uden at ændre Java kildekode — nyttig i store suiter, hvor dynamisk inkludering eller ekskludering er nødvendig baseret på udgivelsescyklusser eller sprintprioriteter.
26) Hvordan kan TestNG være integreret med Selenium WebDriver?
TestNG og Selenium danner en kraftfuld kombination til UI-automatisering.
En typisk integrationsopsætning involverer organisering af tests ved hjælp af annoteringer, administration af opsætning/nedtagning og kørsel af tests via XML- eller CI-værktøjer.
Eksempel:
@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();
}
Integrationsfordele:
- gør det muligt for parallel browsertestning.
- Forenkler testgruppering og rapportering.
- Fungerer problemfrit med CI / CD-rørledninger som Jenkins eller GitHub Actions.
27) Hvad er nogle bedste fremgangsmåder, når man bruger TestNG i store automatiseringsframeworks?
Bedste praksis:
- Brug DescriptFive navngivning: Navngiv tests baseret på adfærd, ikke implementering.
- Gearingsgruppering: Opret logiske testgrupper (Røg, Regression).
- Undgå hardkodning: Brug parametre eller egenskabsfiler til testdata.
- Minimer afhængigheder: Hold testcases uafhængige, hvor det er muligt.
- Centraliser konfiguration: Brug
testng.xmltil suiteopsætning. - Integrer rapportering: Brug lyttere eller tredjepartsværktøjer som ExtentReports.
- Brug gentagelseslogik forsigtigt: Undgå at maskere ægte fejl.
At følge disse sikrer skalerbarhed, vedligeholdelse og læsbarhed i automatisering på virksomhedsniveau.
28) Hvad er forskellen mellem @BeforeTest og @BeforeSuite i TestNG?
| Feature | @BeforeTest |
@BeforeSuite |
|---|---|---|
| Anvendelsesområde | Kører før hver <test> tag i XML |
Kører én gang før hele suiten |
| Frekvens | Flere gange (hvis flere <test> blokke) |
Kun én gang pr. suite |
| Fælles brug | Initialiser konfiguration på testniveau | Opsæt globale ressourcer |
Eksempel:
@BeforeSuite
public void setupSuite() {
System.out.println("Global setup for suite.");
}
@BeforeTest
public void setupTest() {
System.out.println("Setup for each <test> tag.");
}
Brug @BeforeSuite forum globale konfigurationer (f.eks. databaseforbindelse) og @BeforeTest forum testspecifikke initialiseringer.
29) Kan TestNG bruges til API-testning? Hvordan?
Ja. TestNG kan effektivt bruges til API-test ved at integrere med HTTP-klientbiblioteker som f.eks. RestAssured or Http-klient.
Eksempel:
@Test
public void verifyApiResponse() {
Response response = RestAssured.get("https://api.example.com/users");
Assert.assertEquals(response.getStatusCode(), 200);
}
fordele:
- gør det muligt for påstandsbaseret validering af svar.
- Understøtter parametrisering og datadrevet test for flere endepunkter.
- genererer strukturerede rapporter til REST API-valideringer.
Ved at kombinere TestNG og RestAssured, kan testere opretholde et samlet automatiseringsframework til både UI- og API-testning.
30) Hvordan sender du parametre fra kommandolinjen i TestNG?
Du kan tilsidesætte XML-parametre under kørsel ved at overføre systemegenskaber ved hjælp af -D flag.
Kommandoeksempel:
mvn test -Dbrowser=chrome -Denv=staging
Kode eksempel:
@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
System.out.println("Running on: " + browser);
}
Dette muliggør dynamisk miljøvalg i CI/CD-pipelines uden at ændre konfigurationsfiler, hvilket forbedrer testfleksibiliteten.
31) Hvordan kan du kontrollere rækkefølgen af testudførelse i TestNG uden at bruge prioriteter?
I stedet for at bruge priority, TestNG tillader kontrol gennem afhængigheder og XML-metoderækkefølge.
Metoder:
- Ved brug af
dependsOnMethods: - Brug af XML-metodesekvens:
@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>
Bedste praksis: Foretræk logiske afhængigheder til komplekse flows i stedet for statiske prioriteter, hvilket sikrer robuste og vedligeholdelsesvenlige testsuiter.
32) Hvordan kan du udføre specifikke testmetoder fra kommandolinjen i TestNG?
TestNG tillader udførelse af test på metodeniveau direkte fra kommandolinjen ved hjælp af XML- eller Maven Surefire-konfigurationer.
Mulighed 1: Brug af XML-fil
<class name="com.test.LoginTests">
<methods>
<include name="verifyLogin"/>
</methods>
</class>
Mulighed 2: Maven-kommando
mvn test -Dtest=com.test.LoginTests#verifyLogin
Denne tilgang tillader selektiv udførelse, nyttigt til fejlfinding af individuelle metoder eller validering af kritiske funktionaliteter under hurtige builds.
33) Hvordan parametriserer man tests ved hjælp af en ekstern Excel-fil i TestNG?
Excel-drevet parametrisering er almindelig i datadrevne frameworks, hvor testdata ændres ofte.
Implementeringstrin:
- Brug Apache POI or JExcel at læse Excel-data.
- Fod den ind i en
@DataProviderfremgangsmåde.
Eksempel:
@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;
}
Dette gør det muligt at køre den samme testmetode med flere virkelige datasæt fra Excel, hvilket øger fleksibiliteten og dækningen.
34) Hvordan kan du løbe TestNG test i Jenkins eller CI/CD pipelines?
TestNG integreres problemfrit med Jenkins, GitLab CI eller GitHub -handlinger gennem Maven eller Gradle bygger.
Trin i Jenkins:
- Installer Maven-integrationsplugin.
- Opret en Freestyle- eller pipeline-job.
- Tilføj
mvn clean testsom et byggeskridt. - Konfigurér HTML-rapporter efter opbygning:
- Rapportmappe:
test-output - Indeksfil:
index.html
- Rapportmappe:
Fordele:
- Aktiverer automatiseret regressionstest.
- Tilbyder planlagte testkørsler og trendsporing.
- Sikrer ensartet testudførelse på tværs af miljøer.
35) Hvad er formålet med @Parameters, og hvordan adskiller det sig fra @Optional?
Begge annotationer omhandler parametrisering, men tjener forskellige formål.
| Feature | @Parameters |
@Optional |
|---|---|---|
| Formål | Sender parametre fra XML-fil | Angiver standardværdi, hvis parameteren mangler |
| Erklæring | Bruges med XML <parameter> |
Brugt indvendig testmetode |
| Adfærd | Giver fejl, hvis værdien mangler | Bruger alternativ værdi |
Eksempel:
@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
System.out.println("Running on: " + browser);
}
Ved brug af @Optional sikrer teststabilitet når XML-konfigurationer er ufuldstændige.
36) Hvordan håndterer du testafhængigheder på tværs af forskellige klasser i TestNG?
For at oprette afhængigheder mellem klasser, TestNG tillader brug af dependsOnGroups attribut.
Eksempel:
@Test(groups = "Login")
public void loginTest() { ... }
@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }
Denne tilgang hjælper med at håndtere afhængigheder mellem flere moduler hvor hver klasse repræsenterer et modul (Login, Dashboard, Betaling osv.).
Det sikrer, at afhængige moduler kun udføres, hvis forudsatte tests lykkes, og opretholder dermed testintegriteten.
37) Hvad er konfigurationsfejl i TestNG, og hvordan kan de håndteres?
Konfigurationsfejl opstår, når opsætnings- eller nedtagningsmetoder er kommenteret med @Before* or @After* svigte.
De kan forårsage afhængige tests, der skal springes over, selvom disse tests er korrekte.
Almindelige årsager:
- Forkert WebDriver-initialisering.
- Problemer med opsætning af database eller miljø.
- Parameterfejlkonfiguration.
Løsninger:
- Brug prøve-fangst blokke i opsætningsmetoder.
- Ansøg
alwaysRun = truefor at sikre, at oprydningen fortsætter trods fejl.
Eksempel:
@BeforeMethod(alwaysRun = true)
public void setup() {
// Setup logic
}
Dette sikrer, at dine nedbrydningsmetoder stadig udføres, hvilket opretholder testmiljøets stabilitet.
38) Hvad er brugen af attributterne invocationCount og threadPoolSize i TestNG?
Disse egenskaber tillader gentagen og parallel testudførelse af samme metode.
Eksempel:
@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
System.out.println("Running load test...");
}
| Attribut | Produktbeskrivelse |
|---|---|
invocationCount |
Antal gange en metode køres |
threadPoolSize |
Antal samtidige tråde |
Brug Case: Ydelsestest, stabilitetsverifikation eller reproduktion af ustabil adfærd under flere kørsler.
39) Hvordan kører man kun mislykkede testcases i TestNG?
Efter en tur i suiten, TestNG genererer en fil med navnet testng-failed.xml i test-output mappe.
Du kan kun gentage mislykkede tests ved at udføre:
java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml
fordele:
- Sparer tid ved at springe vellykkede tests over.
- Letter fejlfinding i store suiter.
- Almindeligt anvendt i CI-pipelines til hurtige gentests.
Du kan også integrere dette med Jenkins ved hjælp af et post-build script til genkørsler.
40) Hvad er nogle begrænsninger ved TestNG og hvordan kan de afbødes?
Trods dens robusthed, TestNG har et par begrænsninger.
| Begrænsning | Afhjælpningsstrategi |
|---|---|
| XML-konfigurationskompleksitet | Brug annotationsbaseret konfiguration og builders |
| Begrænset native rapportering | Integrer ExtentReports eller Allure |
| Ingen indbygget kontrol over gentagne forsøg | Implement IRetryAnalyzer |
| Bekymringer om trådsikkerhed i parallelle kørsel | Brug tråd-lokale WebDriver-instanser |
| Læringskurve for begyndere | Vedligehold skabelonbaserede projektstrukturer |
Med korrekt frameworkdesign og bedste praksis kan disse begrænsninger minimeres, hvilket sikrer stabile og vedligeholdelsesvenlige automatiseringsløsninger.
41) Hvordan bruger du lyttere til at logge og optage skærmbilleder i Selenium-TestNG?
Lyttere ind TestNG hjælpe med at overvåge testudførelsen og udføre handlinger som logføring, skærmbilleder eller dynamisk rapportering af resultater.
Eksempel 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"));
}
}
Anvendelse:
@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }
Fordele:
- Registrerer fejl automatisk.
- Forbedrer fejlfinding gennem visuel bevisførelse.
- Reducerer manuel indsats i forbindelse med vedligeholdelse af logfiler.
Denne teknik er afgørende i CI/CD-automatiseringspipelines, især når man diagnosticerer fejlede builds eksternt.
42) Hvad er forskellen mellem iReporter og ITestListener i TestNG?
| Feature | IReporter |
ITestListener |
|---|---|---|
| Formål | Genererer brugerdefinerede rapporter efter testkørsel | Sporer og reagerer på testhændelser under kørsel |
| Indledningsbøn | Efter alle tests er afsluttet | Under testens livscyklus (start, succes, fiasko) |
| Produktion | HTML/XML/JSON-rapporter | Logfiler, skærmbilleder, live dashboards |
| Fælles brug | ExtentReports, Allure-integration | Logføring, fejlhåndtering, mekanismer til gentagne forsøg |
Eksempel:
- Brug
IReportertil bygning omfattende rapporter efter testens afslutning. - Brug
ITestListenerforum realtidslogning eller skærmbilleder.
Det kan de også være kombineret at bygge komplette automatiseringsanalysesystemer.
43) Hvordan udfører du cross-browser test ved hjælp af TestNG XML-konfiguration?
Cross-browser testning sikrer, at den samme funktionalitet fungerer på tværs af forskellige browsere.
Eksempel konfiguration:
<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 Kode:
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
if(browser.equalsIgnoreCase("chrome"))
driver = new ChromeDriver();
else if(browser.equalsIgnoreCase("firefox"))
driver = new FirefoxDriver();
}
Denne tilgang muliggør parallel udførelse af flere browsere, hvilket accelererer testdækningen på tværs af platforme.
44) Hvordan integrerer man TestNG med Docker eller Selenium Gitter?
TestNG integreres problemfrit med Dockeriseret Selenium Grid for at muliggøre distribueret parallel testning.
Trin:
- Opsætning Selenium Gitter i Docker ved hjælp af embedsmanden Selenium billede:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- Opdatering TestNG opsætning:
- Udfør din suite via Jenkins eller CI-pipeline.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
Fordele:
- gør det muligt for skalerbar parallel testning.
- Reducerer overhead for opsætning af miljøet.
- Giver konsistent testudførelse på tværs af distribuerede containere.
45) Hvad er forskellen mellem parallel udførelse på suite-, test- og metodeniveau i TestNG?
| Niveau | Parallel attribut | Udførelsesadfærd |
|---|---|---|
| Suite | parallel="suites" |
Udfører flere suiter samtidigt |
| Test | parallel="tests" |
Kører <test> blokke samtidigt |
| Klasse | parallel="classes" |
Kører testklasser parallelt |
| Metode | parallel="methods" |
Udfører individuelle testmetoder parallelt |
Eksempel:
<suite name="ParallelTests" parallel="methods" thread-count="3">
<test name="SampleTest">
<classes><class name="com.test.ParallelExample"/></classes>
</test>
</suite>
Bedste praksis:Brug parallel="classes" for stabilitet i Selenium test for at undgå konflikter mellem delte drivere.
46) Hvordan kan man dele data mellem tests uden at bruge globale variabler i TestNG?
TestNG giver ITestContext og afhængighedsindsprøjtning at dele data dynamisk.
Eksempel:
@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);
}
Dette undgår statiske variabler, opretholder trådsikkerhed og sikrer dataisolering på tværs af tests.
47) Hvordan registrerer og logger du sprungne tests i TestNG?
Du kan registrere sprungne tests ved hjælp af onTestSkipped() i ITestListener interface.
Eksempel:
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Skipped Test: " + result.getName());
}
Årsager til at springe over:
- Afhængig testfejl.
- Betinget springning via
SkipException. - Miljø utilgængelighed.
Bedste praksis:
Logfør årsager til overspring og stakspor for sporbarhed i CI-rapporter eller dashboards.
48) Forklar hvordan man parametriserer REST API-tests ved hjælp af TestNG og RestAssured.
TestNG's @DataProvider integreres elegant med RestAssured til API-parametrisering.
Eksempel:
@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);
}
fordele:
- Udfører det samme API-kald for flere slutpunkter eller nyttelast.
- Forenkler regressionstestning for API'er med varierende inputsæt.
- Integreres problemfrit med CI-værktøjer og -rapporter.
49) Hvordan opretter man brugerdefinerede annotationer i TestNG for genanvendelige testmønstre?
Brugerdefinerede annotationer kan standardisere gentagne testkonfigurationer eller valideringer.
Eksempel:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
String description() default "Smoke Test";
}
Anvendelse:
@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }
Kombineret med refleksion kan du dynamisk læse disse annoteringer for at gruppere tests eller drive betinget udførelse.
Denne teknik er meget anvendt i framework-metaprogrammering at opbygge selvdokumenterende tests.
50) Hvordan kan du kombinere Cucumber og TestNG til hybride testframeworks?
TestNG kan fungere som testløber forum Cucumber BDD-scenarier, der tilbyder effektiv rapportering og parallelisering.
Eksempel på løber:
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }
fordele:
- Udnytter TestNG's annoteringer, lyttere og rapportering.
- Understøtter parallel funktionsudførelse.
- Integreres med Se og Omfangsrapporter let.
Denne hybride tilgang smelter sammen BDD-læsbarhed med TestNG fleksibilitet, ideel til frameworks i virksomhedsklassen.
🔍 Top TestNG Interviewspørgsmål med virkelige scenarier og strategiske svar
Nedenfor er 10 realistiske, domænerelevante TestNG interviewspørgsmål sammen med klare forventninger og stærke eksempler på svar.
1) Kan du forklare de vigtigste fordele ved at bruge TestNG sammenlignet med JUnit?
Forventet af kandidaten: Demonstrer forståelse af TestNG's forbedrede funktioner og hvorfor det ofte foretrækkes til virksomhedsautomatisering.
Eksempel på svar: "TestNG giver adskillige fordele såsom fleksibel testkonfiguration, understøttelse af parallel udførelse, afhængige testmetoder, datadrevet testning med DataProviders og indbygget rapportering. Disse funktioner gør TestNG mere kraftfuld til komplekse automatiseringsrammer, der kræver skalerbarhed.”
2) Hvordan bruger du TestNG annotationer til at styre testudførelsesflowet?
Forventet af kandidaten: Kendskab til annotationers formål og rækkefølge.
Eksempel på svar: "TestNG tilbyder annotationer såsom @BeforeSuite, @BeforeClass, @BeforeMethod, @Test og deres tilsvarende nedtagningsannotationer. Disse muliggør struktureret organisering af testopsætning og oprydning. For eksempel udføres @BeforeMethod før hver testmetode, hvilket er nyttigt til initialisering af browsertilstand.
3) Beskriv et udfordrende automatiseringsprojekt, hvor TestNG spillede en nøglerolle.
Forventet af kandidaten: Reel projekterfaring og evne til at formulere problemløsning.
Eksempel på svar: "I min tidligere rolle arbejdede jeg på et projekt, der krævede omfattende regressionstest på tværs af flere miljøer." TestNG's parallelle udførelses- og grupperingsfunktioner gjorde det muligt for teamet at køre kritiske pakker samtidigt, hvilket reducerede udførelsestiden betydeligt og samtidig opretholdt pålideligheden.
4) Hvordan gør TestNG Hjælper grupper med at organisere og udføre tests effektivt?
Forventet af kandidaten: Forståelse af gruppering, herunder inkluderings-/ekskluderingsmekanismer.
Eksempel på svar: "Grupper i TestNG tillader kategorisering af testcases såsom smoke, regression og integration. Ved at bruge testng.xml kan jeg selektivt køre grupper, ekskludere ustabile tests og administrere forskellige testsuiter uden at ændre selve koden.”
5) Beskriv en situation, hvor du var nødt til at foretage fejlfinding ved fejl TestNG tests. Hvad var din fremgangsmåde?
Forventet af kandidaten: Kritisk tænkning og evner til fejlfinding.
Eksempel på svar: "I en tidligere stilling stødte jeg på en række fejltrin" TestNG tests, der tilsyneladende bestod lokalt, men mislykkedes i CI. Jeg aktiverede detaljeret logføring, gennemgik udførelsesrækkefølgen og opdagede, at en delt ressource ikke blev nulstillet mellem tests. Jeg implementerede derefter de korrekte nedtagningstrin ved hjælp af @AfterMethod for at sikre testens isolation.
6) Hvordan implementerer du datadrevet testning ved hjælp af TestNG?
Forventet af kandidaten: Forståelse af DataProviders og use cases.
Eksempel på svar: "Jeg opretter en @DataProvider-metode, der returnerer data i Object-arrays, og binder den derefter til en @Test-metode ved hjælp af dataProvider-attributten. Dette tillader flere iterationer af den samme test med forskellige inputsæt, hvilket er nyttigt til validering af formularindsendelser eller API-nyttelastvariationer."
7) Hvordan håndterer du testafhængigheder i TestNG?
Forventet af kandidaten: Korrekt brug af dependsOnMethods eller dependsOnGroups.
Eksempel på svar: "TestNG tillader testafhængigheder via attributterne dependsOnMethods og dependsOnGroups. Jeg bruger afhængigheder, når en test kun skal udføres, efter at en anden er fuldført, f.eks. når en ordre først skal verificeres efter oprettelse.”
8) Beskriv hvordan du har brugt TestNG med værktøjer til kontinuerlig integration.
Forventet af kandidaten: Erfaring med automatiseringspipelines i den virkelige verden.
Eksempel på svar: "På mit tidligere job integrerede jeg TestNG med Jenkins ved at konfigurere Maven-buildet til at generere TestNG HTML- og XML-rapporter. Jenkins arkiverede derefter rapporterne og viste resultaterne efter hver byggecyklus. Denne integration hjalp teamet med hurtigt at spore fejl og opretholde udgivelsens stabilitet.
9) Fortæl mig om en gang, hvor du var nødt til at arbejde under stramme deadlines, mens du håndterede flere automatiseringsopgaver.
Forventet af kandidaten: Tidsstyring og evne til at prioritere.
Eksempel på svar: "I min sidste rolle havde jeg brug for at opdatere eksisterende TestNG testpakker, samtidig med at jeg skabte nye til en kommende udgivelse. Jeg prioriterede opgaver baseret på forretningsmæssig indflydelse, automatiserede de områder med højest risiko først og brugte TestNG gruppering for at isolere færdige sektioner til tidlig gennemgang. Dette sikrede rettidig levering uden at gå på kompromis med kvaliteten.”
10) Hvordan ville du designe en skalerbar TestNG Framework til en stor applikation?
Forventet af kandidaten: ArchiTekturforståelse, mønstre og bedste praksis.
Eksempel på svar: "Jeg ville designe et modulært framework ved hjælp af Page Object Model, integrere TestNG til eksekveringsstyring og bruge DataProviders til datadrevne scenarier. Jeg ville også konfigurere parallel eksekvering, centralisere værktøjer og eksternalisere konfigurationsindstillinger, så frameworket forbliver skalerbart og vedligeholdelsesvenligt, efterhånden som applikationen vokser.”
