Top 50 TestNG Intervjuspørsmål og svar (2026)
Forbereder seg på a TestNG intervju? Det er på tide å vurdere spørsmålene som viser frem dine styrker. En solid TestNG Intervjugrunnlaget avslører dybde, selvtillit og beredskap som ansettelsesteam verdsetter.
Mulighetene i dette domenet spenner over automatiseringsvekst, utviklende rammeverk og praktiske testapplikasjoner som krever teknisk og profesjonell erfaring. Å jobbe i feltet krever domeneekspertise, analyseferdigheter og et fleksibelt ferdighetssett som hjelper nyutdannede, mellomnivå og seniorer med å løse vanlige spørsmål og svar på tvers av tekniske, grunnleggende og avanserte fagområder. Les mer ...
👉 Gratis PDF-nedlasting: TestNG Intervjuspørsmål og svar
God TestNG Intervju spørsmål og svar
1) Hva er TestNG og hvorfor brukes det i automatisert testing?
TestNG (Test Next Generation) er et testrammeverk inspirert av JUnit og NUnit, men forbedret med avanserte funksjoner som grouping, sekvensering, parameterisering og avhengighetshåndtering. Det brukes primært i automatiseringstesting for å effektivisere testutførelse, forbedre testorganisering og generere detaljerte HTML- og XML-rapporter.
Viktige fordeler ved TestNG inkluderer:
- Støtter parallell testutførelse, noe som reduserer den totale kjøretiden.
- Gir merknader som kontrollerer testflyten effektivt.
- Tilbud datadrevet testing via
@DataProvidermerknad. - genererer tilpassbare rapporter for bedre feilsøking.
For eksempel, TestNG lar deg kjøre røyk-, regresjons- og integrasjonstestgrupper uavhengig uten å endre testkode, noe som gir fleksibilitet og skalerbarhet i store automatiseringspakker.
2) Forklar TestNG livssyklus med annoteringer og deres utførelsesrekkefølge.
Ocuco TestNG Livssyklusen definerer hvordan tester initialiseres, utføres og avsluttes. Dette kontrolleres gjennom annoteringer som gir struktur og klarhet til testflyten.
| merknad | Tekniske beskrivelser | Utførelsesordre |
|---|---|---|
@BeforeSuite |
Kjører før alle tester i suiten | 1 |
@BeforeTest |
Utføres før <test> tag i XML |
2 |
@BeforeClass |
Kjører før den første metoden i gjeldende klasse | 3 |
@BeforeMethod |
Utføres før hver testmetode | 4 |
@Test |
Inneholder faktisk testlogikk | 5 |
@AfterMethod |
Kjører etter hver testmetode | 6 |
@AfterClass |
Kjører etter alle metodene i klassen | 7 |
@AfterTest |
Løper etter <test> tag i XML |
8 |
@AfterSuite |
Utføres etter alle tester i suiten | 9 |
Denne strukturerte rekkefølgen sikrer forutsigbar testoppsett og -nedbryting, noe som er avgjørende for å opprettholde testuavhengighet.
3) Hvordan er TestNG forskjellig fra JUnit?
Selv om begge rammeverkene brukes til enhetstesting, TestNG gir mer robust konfigurasjon og parallelle utførelsesmuligheter.
| Trekk | JUnit | TestNG |
|---|---|---|
| Parallell utførelse | Begrenset støtte | Full støtte |
| Merknader | Færre (@Before, @After) |
Rikere (@BeforeSuite, @DataProvider) |
| Avhengighetsstyring | Ikke tilgjengelig | Tilgjengelig ved bruk av dependsOnMethods |
| Grouping | Støttes ikke | Støttet bruk av groups |
| Parametrisering | Gjennom eksterne løpere | Innebygd via XML eller @DataProvider |
Oppsummert, TestNG er foretrukket for automatiseringstesting på bedriftsnivå og integrasjon med verktøy som Selenium, mens JUnit er ideell for enklere enhetstester.
4) Hva er TestNG annoteringer og hvordan er de nyttige?
Merknader i TestNG definere strukturen og oppførselen til testmetoderDe eliminerer behovet for kompleks XML-konfigurasjon ved å tilby deklarativ testkontroll direkte i koden.
Vanlig brukte 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 hjelper utviklere med å organisere testkjøring logisk, og sikrer at oppsett, testkjøring og nedbryting skjer i en definert rekkefølge.
5) Forklar konseptet med grouping in TestNG.
Grouping in TestNG tillater logisk kategorisering av tester i mindre, håndterbare sett som «Røyk», «Regresjon» eller «Forstand».
Eksempel:
@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }
Du kan konfigurere XML-pakken din til å kjøre bestemte grupper:
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
Fordeler:
- Gjør det lettere å utføre selektiv testtilfeller.
- Forbedrer fleksibiliteten i CI/CD-pipelines.
- Sparer utførelsestid under trinnvise bygginger.
6) Hvordan kan parameterisering oppnås i TestNG?
Parameterisering muliggjør datadrevet testing, slik at tester kan kjøres med flere inndatasett. TestNG støtter to primære metoder:
- Ved hjelp av
@Parametersannotering med XML: - Ved hjelp av
@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 fleksibiliteten gjør det enklere å vedlikeholde og kjøre store testsett på tvers av miljøer eller konfigurasjoner.
7) Hva er avhengigheter i TestNG og hvordan håndteres de?
Avhengigheter i TestNG kontrollere rekkefølgen av testutførelsen basert på andre testresultater ved hjelp av dependsOnMethods or dependsOnGroups egenskaper.
Eksempel:
@Test
public void loginTest() { ... }
@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }
Hvis den avhengige metoden mislykkes, hoppes den påfølgende testen automatisk over.
Denne mekanismen forhindrer ugyldig testutførelse og bidrar til å opprettholde logisk testintegritetDet er spesielt nyttig for flertrinns funksjonelle flyter som innlogging → utfør handling → verifiser resultat.
8) Hva er de forskjellige måtene å utføre på TestNG tester?
TestNG Tester kan utføres på flere fleksible måter, avhengig av testoppsettet:
- Fra IDE (Eclipse/IntelliJ): Høyreklikk på klassen eller
XML file→Run as→TestNG Test. - Fra kommandolinjen:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - Bruk av byggeverktøy:
- Maven: Konfigurer
surefire-plugininpom.xml. - Gradle: Bruk
testngavhengighet og oppgavekonfigurasjon.
- Maven: Konfigurer
- Gjennom CI/CD-rørledninger: Integrert med Jenkins eller GitHub-handlinger for automatisert utførelse.
Denne variasjonen sikrer kompatibilitet på tvers av utviklings-, test- og produksjonsmiljøer.
9) Hva er TestNG lyttere og hvorfor er de viktige?
Lyttere inn TestNG tilby kroker for å tilpasse testatferd ved å overvåke testutførelseshendelser som start, suksess, feil eller hopp over.
Vanlige lyttere:
ITestListener: Tracks-hendelser på testmetodenivå.ISuiteListener: Observerer hendelser på suite-nivå.IReporterGenererer tilpassede rapporter.
Eksempel:
public class CustomListener implements ITestListener {
public void onTestFailure(ITestResult result) {
System.out.println("Test Failed: " + result.getName());
}
}
Lyttere brukes ofte til å ta skjermbilder ved feil, genererer tilpassede loggereller integrering med rapporteringsverktøy som Allure eller ExtentReports.
10) Hva er fordelene og ulempene ved å bruke TestNG?
| Aspekt | Fordeler | Ulemper |
|---|---|---|
| Fleksibilitet | Støtter grouping, avhengighet og parallell utførelse | Komplekst XML-oppsett for store pakker |
| Rapportering | Gir detaljerte HTML- og XML-rapporter | Begrenset tilpasning uten lyttere |
| Integrasjon | Fungerer sømløst med Selenium og CI/CD-verktøy | Litt høyere læringskurve |
| Parametrisering | Innebygd støtte for datadrevet testing | Krever vedlikehold for store datasett |
Samlet, TestNG er et robust og fleksibelt rammeverk som er egnet for moderne automatiserte testmiljøer til tross for den lave konfigurasjonskostnaden.
11) Hvordan kan du prioritere testtilfeller i TestNG?
TestNG gir priority attributt i @Test annotering for å definere rekkefølgen testmetoder skal kjøres i. Tester med lavere prioritetsverdier kjøres først.
Eksempel:
@Test(priority = 1)
public void loginTest() { ... }
@Test(priority = 2)
public void dashboardTest() { ... }
Hvis ingen prioritet er angitt, er standardverdien 0, og metodene kjøres alfabetisk.
Beste praksis: Bruk prioritetsverdier sparsomt. For mye bruk av dem kan gjøre testrekkefølgen rigid. For komplekse flyter, avhengighetshåndtering (dependsOnMethods) er mer vedlikeholdbar enn streng prioritering.
12) Forklar konseptet og bruken av parallell utførelse i TestNG.
Parallell utførelse i TestNG tillater at flere tester, klasser eller metoder kjører samtidig, noe som reduserer den totale utførelsestiden betydelig.
Du kan aktivere denne funksjonen i testng.xml file:
<suite name="ParallelSuite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> </suite>
Parallelle moduser som støttes:
testsclassesmethodsinstances
Fordeler:
- Raskere tilbakemeldingssyklus.
- Effektiv utnyttelse av flerkjerneprosessorer.
- Skalerbarhet for store automatiseringssuiter.
Sørg imidlertid for trådsikkerhet når du bruker delte ressurser som WebDriver eller databasetilkoblinger.
13) Hva er dataleverandører i TestNGHvordan skiller de seg fra parametere?
@DataProvider muliggjør datadrevet testing ved å levere testmetoder med flere datasett.
Eksempel:
@DataProvider(name="credentials")
public Object[][] data() {
return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}
@Test(dataProvider="credentials")
public void login(String username, String password) { ... }
Forskjellen mellom @Parameters og @DataProvider:
| Trekk | @Parameters |
@DataProvider |
|---|---|---|
| Datakilde | XML-fil | Java metode |
| Data-type | Enkelt datasett | Flere datasett |
| Fleksibilitet | Less | Høyt |
| Bruk sak | Miljøvariabler | Gjentatte datadrevne tester |
Derfor @DataProvider er foretrukket når man kjører én test med flere datasett, for eksempel når man verifiserer pålogging med flere påloggingsinformasjoner.
14) Hvordan kan du deaktivere eller hoppe over en test i TestNG?
Du kan deaktivere en test i TestNG bruker enabled attributt eller ved å hoppe over programmatiskping det.
1. Ved hjelp av enabled = false:
@Test(enabled = false)
public void skipTest() {
System.out.println("This test will not run.");
}
2. Hopp overping under kjøretid ved bruk av SkipException:
@Test
public void conditionalSkip() {
throw new SkipException("Skipping this test due to condition.");
}
Deaktivering er nyttig for midlertidig deaktivering ustabile eller ufullstendige tester uten å slette dem. Hopp overping er verdifull for kjøretidsbetingelser, som å hoppe overping tester for nettlesere som ikke støttes.
15) Hva er rollen til testng.xml-filen, og hva er dens viktigste komponenter?
Ocuco testng.xml filen er konfigurasjonsryggraden til TestNGDen definerer testsuiter, testgrupper, parametere og oppsett for parallell utfø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>– Representerer en testblokk.<classes>– Viser en liste over testklasser.<methods>– Filtrerer spesifikke testmetoder.<parameter>– Gir globale parametere eller parametere på testnivå.
XML-filen gir sentralisert kontroll overkjøring uten å endre koden.
16) Hvordan kan du generere rapporter i TestNG?
TestNG genererer automatisk to typer rapporter:
- HTML-rapport (
test-output/index.html) – Oppsummerer beståtte, ikke-beståtte og utelatte prøver. - XML-rapport – Brukes for integrasjon med CI/CD-verktøy.
For avansert rapportering, TestNG integreres med:
- Omfangsrapporter – Tilbyr grafiske dashbord og detaljerte logger.
- Allure-rapporter – Gir visuell analyse med testtrinn, skjermbilder og logger.
Eksempelintegrasjon:
ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();
Disse rapportene er viktige for trackongelige trender og identifisering av svake områder i testdekningen.
17) Hva er fabrikker i TestNG, og hvordan fungerer de?
Fabrikker i TestNG brukes til å lage dynamiske forekomster av testklasserDe tillater parameterisert instansiering av klasser før tester kjøres.
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);
}
}
Fordeler:
- muliggjør opprettelse av parameteriserte objekter.
- Ideell for tester på tvers av nettlesere og utførelse i flere miljøer.
Fabrikker utfyller DataProviders når du trenger forskjellige objektkonfigurasjoner i stedet for bare datavariasjon på metodenivå.
18) Hvordan kan du bruke påstander i TestNG?
Påstander brukes til å validere forventede kontra faktiske resultater innenfor testmetoder.
Typer påstander:
- Harde påstander (Assert-klassen):
Stopper testkjøringen umiddelbart ved feil. - Myke påstander (SoftAssert-klasse):
Fortsetter kjøringen selv etter feil, og rapporterer alle problemer på slutten. - Når skal du bruke:
- Bruk harde påstander for kritisk validering som vellykket pålogging.
- Bruk myke påstander for flere verifiseringer innenfor én enkelt testmetode.
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
19) Forklar forskjellen mellom @BeforeMethod og @BeforeClass i TestNG.
| Aspekt | @BeforeMethod |
@BeforeClass |
|---|---|---|
| Gjennomføring | Kjører før hver testmetode | Kjører en gang før hvilken som helst metode i klassen |
| Omfang | Per testmetode | Per testklasse |
| Vanlig bruk | Initialiserer nettleseren før hver test | Laster inn konfigurasjon eller nettleseroppsett é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");
}
Bruk @BeforeMethod når hver test trenger et rent miljø, og @BeforeClass for tunge initialiseringsoppgaver som kan brukes om igjen.
20) Hvordan TestNG støtter avhengighetsinjeksjon og hva er bruksområdene?
TestNG støtter avhengighetsinjeksjon gjennom innebygd injeksjon av kontekst og konfigurasjonsobjekter som ITestContext, XmlTesteller Method.
Eksempel:
@Test
public void testContextExample(ITestContext context) {
System.out.println("Suite Name: " + context.getSuite().getName());
}
Bruk tilfeller:
- Henter testparametere dynamisk.
- Tilgang til konfigurasjonsinformasjon som suitenavn eller innstillinger for parallell utførelse.
- Forbedret testfleksibilitet uten hardkodingsavhengigheter.
Avhengighetsinjeksjon lar utviklere skrive modulære, kontekstbevisste tester som tilpasser seg dynamisk til endringer i miljøet.
21) Hva er forskjellen mellom @Factory og @DataProvider i TestNG?
Begge @Factory og @DataProvider hjelp med parameterisering, men de opererer på forskjellige nivåer i testarkitekturen.
| Trekk | @Factory |
@DataProvider |
|---|---|---|
| Omfang | Klassenivå | Metodenivå |
| Formål | Oppretter flere instanser av en klasse med forskjellige data | Leverer data til én enkelt testmetode |
| Gjennomføring | Utfører hele klassen for hver instans | Utfører én metode flere ganger |
| Ideell bruksak | Testing på tvers av nettlesere eller miljøer | Datadrevet funksjonstesting |
Eksempel:
- Fabrikk: Kjører hele klassen per nettlesertype.
- Dataleverandør: Kjører én testmetode med flere datasett.
Bruk @Factory når selve objektinstansieringen varierer, og @DataProvider for funksjonell variasjon i input innenfor samme objektinstans.
22) Hvordan kan du automatisk prøve mislykkede testtilfeller på nytt i TestNG?
TestNG gir en mekanisme for å kjør mislykkede testtilfeller på nytt bruker IRetryAnalyzer grensesnitt.
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;
}
}
Bruk:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
Assert.fail("Intentional Failure");
}
Fordeler:
- Reduserer flak i CI-rørledninger.
- Håndterer forbigående nettverks- eller miljøproblemer.
Beste praksis: Kombiner logikk for nye forsøk med riktig logging og skjermbilder for feilsøking av periodiske feil.
23) Hva er bruken av ITestContext i TestNG?
ITestContext gir kontekstuell informasjon om testkjøringen, inkludert suitenavn, testnavn, utdatakatalog og parametere.
Eksempel:
@Test
public void contextExample(ITestContext context) {
System.out.println("Suite: " + context.getSuite().getName());
}
Nøkkelmetoder:
getSuite()– Henter informasjon på suite-nivå.getName()– Returnerer testnavnet.setAttribute()/getAttribute()– Del data mellom tester.
Det gjør det mulig datadeling på tvers av testmetoder eller klasser og forenkler dynamisk rapportering og logging.
24) Hvordan kan du opprette avhengighet mellom testgrupper i TestNG?
Du kan definere avhengigheter mellom grupper ved hjelp av dependsOnGroups attributt i @Test merknad.
Eksempel:
@Test(groups = "Login")
public void login() { ... }
@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }
Dette sikrer at verifyProfile gruppen kjører bare hvis alle testene i Login gruppen har bestått.
Det er spesielt nyttig i integrasjonstesting, der moduler er avhengige av at andre utføres på en vellykket måte (f.eks. innlogging → profil → utloggingsflyt).
25) Hvordan kan du ignorere visse testmetoder i en TestNG XML-fil?
Du kan eksplisitt ekskluderingsmetoder i en klasse i XML-suitefilen ved hjelp av <exclude> tags.
Eksempel:
<class name="com.test.LoginTests">
<methods>
<exclude name="verifyLogout"/>
</methods>
</class>
Dette lar testerne deaktiver spesifikke metoder midlertidig uten å endre Java kildekode – nyttig i store programpakker der dynamisk inkludering eller ekskludering er nødvendig basert på utgivelsessykluser eller sprintprioriteringer.
26) Hvordan kan TestNG være integrert med Selenium WebDriver?
TestNG og Selenium danner en kraftig kombinasjon for UI-automatisering.
Et typisk integrasjonsoppsett innebærer å organisere tester ved hjelp av annoteringer, administrere oppsett/nedbryting og kjøre tester via XML- eller CI-verktøy.
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();
}
Integrasjonsfordeler:
- muliggjør parallell nettlesertesting.
- Forenkler testgruppeping og rapportering.
- Fungerer sømløst med CI / CD-rørledninger i likhet med Jenkins eller GitHub-handlinger.
27) Hva er noen beste fremgangsmåter når du bruker TestNG i store automatiseringsrammeverk?
Beste praksis:
- Bruk Descriptfem navn: Navngi tester basert på atferd, ikke implementering.
- Leverage Groupping: Opprett logiske testgrupper (røyk, regresjon).
- Unngå hardkoding: Bruk parametere eller egenskapsfiler for testdata.
- Minimer avhengigheter: Hold testtilfeller uavhengige der det er mulig.
- Sentraliser konfigurasjon: Bruk
testng.xmlfor oppsett av suite. - Integrer rapportering: Bruk lyttere eller tredjepartsverktøy som ExtentReports.
- Bruk gjentakelseslogikk forsiktig: Unngå å maskere ekte feil.
Å følge disse sikrer skalerbarhet, vedlikeholdbarhet og lesbarhet innen automatisering på bedriftsnivå.
28) Hva er forskjellen mellom @BeforeTest og @BeforeSuite i TestNG?
| Trekk | @BeforeTest |
@BeforeSuite |
|---|---|---|
| Omfang | Kjører før hver <test> tag i XML |
Kjører én gang før hele suiten |
| Frekvens | Flere ganger (hvis flere <test> blokker) |
Kun én gang per suite |
| Vanlig bruk | Initialisere konfigurasjon på testnivå | Sett opp globale ressurser |
Eksempel:
@BeforeSuite
public void setupSuite() {
System.out.println("Global setup for suite.");
}
@BeforeTest
public void setupTest() {
System.out.println("Setup for each <test> tag.");
}
Bruk @BeforeSuite forum globale konfigurasjoner (f.eks. databasetilkobling) og @BeforeTest forum testspesifikke initialiseringer.
29) Kan TestNG brukes til API-testing? Hvordan?
Ja. TestNG kan effektivt brukes til API-testing ved å integrere med HTTP-klientbiblioteker som RestAssured or Http-klient.
Eksempel:
@Test
public void verifyApiResponse() {
Response response = RestAssured.get("https://api.example.com/users");
Assert.assertEquals(response.getStatusCode(), 200);
}
Fordeler:
- muliggjør påstandsbasert validering av svar.
- Støtter parameterisering og datadrevet testing for flere endepunkter.
- genererer strukturerte rapporter for REST API-valideringer.
Ved å kombinere TestNG og RestAssured, kan testere opprettholde et enhetlig automatiseringsrammeverk for både UI- og API-testing.
30) Hvordan sender du parametere fra kommandolinjen i TestNG?
Du kan overstyre XML-parametere under kjøring ved å sende systemegenskaper ved hjelp av -D flagg.
Kommandoeksempel:
mvn test -Dbrowser=chrome -Denv=staging
Code Eksempel:
@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
System.out.println("Running on: " + browser);
}
Dette muliggjør dynamisk miljøvalg i CI/CD-pipelines uten å endre konfigurasjonsfiler, noe som forbedrer testfleksibiliteten.
31) Hvordan kan du kontrollere rekkefølgen på testkjøring i TestNG uten å bruke prioriteringer?
I stedet for å bruke priority, TestNG tillater kontroll gjennom avhengig og XML-metoderekkefølge.
Metoder:
- Ved hjelp av
dependsOnMethods: - Bruk av 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>
Beste praksis: Foretrekk logiske avhengigheter for komplekse flyter i stedet for statiske prioriteringer, og sørg for robuste og vedlikeholdbare testsuiter.
32) Hvordan kan du kjøre spesifikke testmetoder fra kommandolinjen i TestNG?
TestNG tillater utførelse av test på metodenivå direkte fra kommandolinjen ved hjelp av XML- eller Maven Surefire-konfigurasjoner.
Alternativ 1: Bruk av XML-fil
<class name="com.test.LoginTests">
<methods>
<include name="verifyLogin"/>
</methods>
</class>
Alternativ 2: Maven-kommando
mvn test -Dtest=com.test.LoginTests#verifyLogin
Denne tilnærmingen tillater selektiv utførelse, nyttig for feilsøking av individuelle metoder eller validering av kritiske funksjoner under hurtigbygg.
33) Hvordan parameteriserer du tester ved hjelp av en ekstern Excel-fil i TestNG?
Excel-drevet parameterisering er vanlig i datadrevne rammeverk der testdata endres ofte.
Implementeringstrinn:
- Bruk Apache POI or JExcel å lese Excel-data.
- Mat den inn i en
@DataProvidermetoden.
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 gjør det mulig å kjøre den samme testmetoden med flere virkelige datasett fra Excel, noe som øker fleksibiliteten og dekningen.
34) Hvordan kan du løpe TestNG tester i Jenkins eller CI/CD-pipelines?
TestNG integreres sømløst med Jenkins, GitLab CIeller GitHub-handlinger gjennom Maven eller Gradle bygger.
Trer inn Jenkins:
- Install Maven-integrasjonsplugin.
- Lag en Freestyle- eller rørledningsjobb.
- Legg til
mvn clean testsom et byggetrinn. - Konfigurer HTML-rapporter etter bygging:
- Rapportkatalog:
test-output - Indeksfil:
index.html
- Rapportkatalog:
Fordeler:
- Aktiverer automatisert regresjonstesting.
- Gir planlagte testkjøringer og trender trackonge.
- Sikrer konsistent testutførelse på tvers av miljøer.
35) Hva er formålet med @Parameters, og hvordan er det forskjellig fra @Optional?
Begge annotasjonene omhandler parameterisering, men tjener forskjellige formål.
| Trekk | @Parameters |
@Optional |
|---|---|---|
| Formål | Sender parametere fra XML-fil | Gir standardverdi hvis parameter mangler |
| Erklæring | Brukes med XML <parameter> |
Brukt intern testmetode |
| Behavior | Kaster feil hvis verdi mangler | Bruker reserveverdi |
Eksempel:
@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
System.out.println("Running on: " + browser);
}
Ved hjelp av @Optional sikrer teststabilitet når XML-konfigurasjonene er ufullstendige.
36) Hvordan håndterer du testavhengigheter på tvers av ulike klasser i TestNG?
For å opprette avhengigheter mellom klasser, TestNG tillater bruk av dependsOnGroups attributt.
Eksempel:
@Test(groups = "Login")
public void loginTest() { ... }
@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }
Denne tilnærmingen bidrar til å håndtere flermodulavhengigheter der hver klasse representerer en modul (innlogging, dashbord, betaling osv.).
Det sikrer at avhengige moduler bare kjøres hvis nødvendige tester lykkes, og opprettholder testintegriteten.
37) Hva er konfigurasjonsfeil i TestNG, og hvordan kan de håndteres?
Konfigurasjonsfeil oppstår når oppsett- eller nedbrytningsmetoder er merket med @Before* or @After* mislykkes.
De kan forårsake avhengige tester å hoppe over, selv om disse testene er riktige.
Vanlige årsaker:
- Feil initialisering av WebDriver.
- Problemer med oppsett av database eller miljø.
- Feilkonfigurasjon av parametere.
Løsninger:
- Bruk prøvefangst blokker i oppsettmetoder.
- Påfør
alwaysRun = truefor å sikre at oppryddingen fortsetter til tross for feil.
Eksempel:
@BeforeMethod(alwaysRun = true)
public void setup() {
// Setup logic
}
Dette sikrer at nedbrytningsmetodene dine fortsatt kjører, og opprettholder testmiljøets stabilitet.
38) Hva er bruken av attributtene invocationCount og threadPoolSize i TestNG?
Disse attributtene tillater gjentatt og parallell testutførelse av samme metode.
Eksempel:
@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
System.out.println("Running load test...");
}
| Egenskap | Tekniske beskrivelser |
|---|---|
invocationCount |
Antall ganger en metode kjøres |
threadPoolSize |
Antall samtidige tråder |
Bruk sak: Ytelsestesting, stabilitetsverifisering eller reproduksjon av ustabil oppførsel under flere kjøringer.
39) Hvordan kjører du bare mislykkede testtilfeller i TestNG?
Etter en tur til suiten, TestNG genererer en fil med navnet testng-failed.xml i test-output katalogen.
Du kan bare kjøre mislykkede tester på nytt ved å utføre:
java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml
Fordeler:
- Sparer tid ved å hoppe overping vellykkede tester.
- Forenkler feilsøking i store pakker.
- Vanligvis brukt i CI-pipelines for raske tester på nytt.
Du kan også integrere dette med Jenkins bruker et post-build-skript for repriser.
40) Hva er noen begrensninger ved TestNG og hvordan kan de reduseres?
Til tross for dens robusthet, TestNG har noen begrensninger.
| begrensning | Begrensningsstrategi |
|---|---|
| XML-konfigurasjonskompleksitet | Bruk annotasjonsbasert konfigurasjon og byggere |
| Begrenset rapportering om native elementer | Integrer ExtentReports eller Allure |
| Ingen innebygd kontroll for nye forsøk | Implementere IRetryAnalyzer |
| Bekymringer om trådsikkerhet i parallelle kjøringer | Bruk trådlokale WebDriver-forekomster |
| Læringskurve for nybegynnere | Vedlikehold malbaserte prosjektstrukturer |
Med riktig rammeverksdesign og beste praksis kan disse begrensningene minimeres, noe som sikrer stabile og vedlikeholdbare automatiseringsløsninger.
41) Hvordan bruker du lyttere til logging og skjermbilder i Selenium-TestNG?
Lyttere inn TestNG bidra til å overvåke testutførelse og utføre handlinger som logging, ta skjermbilder eller rapportere resultater dynamisk.
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"));
}
}
Bruk:
@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }
Fordeler:
- Registrerer feil automatisk.
- Forbedrer feilsøking gjennom visuelle bevis.
- Reduserer manuell innsats ved vedlikehold av logger.
Denne teknikken er avgjørende i CI/CD-automatiseringsrørledninger, spesielt når man skal diagnostisere mislykkede bygg eksternt.
42) Hva er forskjellen mellom iReporter og ITestListener i TestNG?
| Trekk | IReporter |
ITestListener |
|---|---|---|
| Formål | Genererer tilpassede rapporter etter testkjøring | Tracks og reagerer på kjøretidstesthendelser |
| påkallelse | Etter at alle testene er fullført | I løpet av testsyklusen (start, suksess, feil) |
| Produksjon | HTML/XML/JSON-rapporter | Loggfiler, skjermbilder, live dashboards |
| Vanlig bruk | ExtentReports, Allure-integrasjon | Logging, feilhåndtering, mekanismer for nye forsøk |
Eksempel:
- Bruk
IReporterfor bygging omfattende rapporter etter at testen er fullført. - Bruk
ITestListenerforum sanntidslogging eller skjermbilder.
Det kan de også være kombinert å bygge komplette automatiseringsanalysesystemer.
43) Hvordan utfører du testing på tvers av nettlesere ved hjelp av TestNG XML-konfigurasjon?
Testing på tvers av nettlesere sikrer at den samme funksjonaliteten fungerer på tvers av forskjellige nettlesere.
Eksempel på konfigurasjon:
<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();
}
Denne tilnærmingen muliggjør parallell utførelse av flere nettlesere, noe som akselererer testdekningen på tvers av plattformer.
44) Hvordan integrerer du TestNG med Docker eller Selenium Nett?
TestNG integreres sømløst med Dockerisert Selenium Grid for å muliggjøre distribuert parallell testing.
Fremgangsmåte:
- Sett opp Selenium Rutenett i Docker bruker den offisielle Selenium bilde:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- Oppdater TestNG oppsett:
- Utfør suiten din via Jenkins eller CI-rørledning.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
Fordeler:
- muliggjør skalerbar parallell testing.
- Reduserer kostnader for oppsett av miljøet.
- Gir konsekvent testutførelse på tvers av distribuerte containere.
45) Hva er forskjellen mellom parallell utførelse på suite-, test- og metodenivå i TestNG?
| Nivå | Parallell attributt | Utførelsesatferd |
|---|---|---|
| Suite | parallel="suites" |
Kjører flere suiter samtidig |
| Test | parallel="tests" |
Kjører <test> blokkerer samtidig |
| Klasse | parallel="classes" |
Kjører testklasser parallelt |
| Metode | parallel="methods" |
Utfø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>
Beste praksis:Bruk parallel="classes" for stabilitet i Selenium tester for å unngå konflikter mellom delte drivere.
46) Hvordan kan du dele data mellom tester uten å bruke globale variabler i TestNG?
TestNG gir ITestContext og avhengighetsinjeksjon å 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 unngår statiske variabler, opprettholder trådsikkerheten og sikrer dataisolering på tvers av tester.
47) Hvordan registrerer og logger du utelatte tester TestNG?
Du kan fange opp hoppede tester ved hjelp av onTestSkipped() i ITestListener grensesnitt.
Eksempel:
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Skipped Test: " + result.getName());
}
Årsaker til å hoppe overping:
- Avhengig testfeil.
- Betinget hoppping av
SkipException. - Miljøet er utilgjengelig.
Beste praksis:
Årsaker til logghopp og stakk traces for traceffektivitet i CI-rapporter eller dashbord.
48) Forklar hvordan man parameteriserer REST API-tester ved hjelp av TestNG og RestAssured.
TestNG'S @DataProvider integreres elegant med RestAssured for API-parameterisering.
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);
}
Fordeler:
- Utfører samme API-kall for flere endepunkter eller nyttelaster.
- Forenkler regresjonstesting for API-er med varierende inndatasett.
- Integreres sømløst med CI-verktøy og -rapporter.
49) Hvordan lager du tilpassede merknader i TestNG for gjenbrukbare testmønstre?
Tilpassede merknader kan standardisere repeterende testkonfigurasjoner eller valideringer.
Eksempel:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
String description() default "Smoke Test";
}
Bruk:
@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }
Kombinert med refleksjon kan du dynamisk lese disse annotasjonene for å gruppere tester eller drive betinget utførelse.
Denne teknikken er mye brukt i rammeverksmetaprogrammering å bygge selvdokumenterende tester.
50) Hvordan kan du kombinere Cucumber og TestNG for hybride testrammeverk?
TestNG kan fungere som testløper forum Cucumber BDD-scenarier, som tilbyr kraftig rapportering og parallellisering.
Eksempelløper:
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }
Fordeler:
- Utnytter TestNG'S annoteringer, lyttere og rapportering.
- Støtter parallell funksjonsutførelse.
- Integreres med Allure og Omfangsrapporter enkelt.
Denne hybride tilnærmingen slår seg sammen BDD-lesbarhet med TestNG fleksibilitet, ideelt for rammeverk i bedriftsklassen.
🔍 Topp TestNG Intervjuspørsmål med virkelige scenarioer og strategiske svar
Nedenfor er 10 realistiske, domene-relevante TestNG intervjuspørsmål sammen med klare forventninger og sterke eksempelsvar.
1) Kan du forklare de viktigste fordelene ved å bruke TestNG sammenlignet med JUnit?
Forventet fra kandidaten: Demonstrer forståelse av TestNGs forbedrede funksjoner og hvorfor det ofte foretrekkes for bedriftsautomatisering.
Eksempel på svar: "TestNG gir flere fordeler, som fleksibel testkonfigurasjon, støtte for parallell utførelse, avhengige testmetoder, datadrevet testing med DataProviders og innebygd rapportering. Disse funksjonene gjør TestNG kraftigere for komplekse automatiseringsrammeverk som krever skalerbarhet.»
2) Hvordan bruker du TestNG annoteringer for å kontrollere testutførelsesflyten?
Forventet fra kandidaten: Kunnskap om formålet med og rekkefølgen på annoteringene.
Eksempel på svar: "TestNG tilbyr annoteringer som @BeforeSuite, @BeforeClass, @BeforeMethod, @Test og deres tilhørende nedbrytningsannoteringer. Disse tillater strukturert organisering av testoppsett og opprydding. For eksempel kjøres @BeforeMethod før hver testmetode, noe som er nyttig for å initialisere nettleserens tilstand.
3) Beskriv et utfordrende automatiseringsprosjekt der TestNG spilte en nøkkelrolle.
Forventet fra kandidaten: Reell prosjekterfaring og evne til å formulere problemløsning.
Eksempel på svar: «I min forrige rolle jobbet jeg med et prosjekt som krevde omfattende regresjonstesting på tvers av flere miljøer.» TestNGparallell utførelse og gruppeping funksjonene tillot teamet å kjøre kritiske pakker samtidig, noe som reduserte utførelsestiden betydelig samtidig som påliteligheten ble opprettholdt.»
4) Hvordan TestNG Hjelper gruppene med å organisere og gjennomføre tester effektivt?
Forventet fra kandidaten: Forståelse av grouping, inkludert inkluderings-/ekskluderingsmekanismer.
Eksempel på svar: «Grupper i TestNG tillate kategorisering av testtilfeller som røyk, regresjon og integrasjon. Ved å bruke testng.xml kan jeg selektivt kjøre grupper, ekskludere ustabile tester og administrere forskjellige testpakker uten å endre selve koden.
5) Beskriv en situasjon der du måtte feilsøke ved feil TestNG tester. Hva var din tilnærming?
Forventet fra kandidaten: Kritisk tenkning og feilsøkingsevner.
Eksempel på svar: «I en tidligere stilling møtte jeg på en rekke feil TestNG tester som så ut til å bestå lokalt, men som mislyktes i CI. Jeg aktiverte detaljert logging, gjennomgikk utførelsesrekkefølgen og oppdaget at en delt ressurs ikke ble tilbakestilt mellom tester. Deretter implementerte jeg riktige nedbrytningstrinn ved hjelp av @AfterMethod for å sikre testisolering.
6) Hvordan implementerer du datadrevet testing ved hjelp av TestNG?
Forventet fra kandidaten: Forståelse av DataProviders og brukstilfeller.
Eksempel på svar: «Jeg oppretter en @DataProvider-metode som returnerer data i objektarrayer, og binder den deretter til en @Test-metode ved hjelp av dataProvider-attributtet. Dette tillater flere iterasjoner av samme test med forskjellige inputsett, noe som er nyttig for å validere skjemainnsendinger eller API-nyttelastvariasjoner.»
7) Hvordan håndterer du testavhengigheter i TestNG?
Forventet fra kandidaten: Riktig bruk av dependsOnMethods eller dependsOnGroups.
Eksempel på svar: "TestNG tillater testavhengigheter gjennom attributtene dependsOnMethods og dependsOnGroups. Jeg bruker avhengigheter når en test bare må kjøres etter at en annen er fullført, for eksempel å bekrefte en ordre bare etter at den er opprettet.
8) Beskriv hvordan du har brukt TestNG med verktøy for kontinuerlig integrasjon.
Forventet fra kandidaten: Erfaring med automatiseringspipelines i den virkelige verden.
Eksempel på svar: «I min forrige jobb integrerte jeg TestNG med Jenkins ved å konfigurere Maven-bygget til å generere TestNG HTML- og XML-rapporter. Jenkins arkiverte deretter rapportene og viste resultatene etter hver byggesyklus. Denne integrasjonen hjalp teamet track-feil raskt og opprettholder frigjøringsstabilitet.»
9) Fortell meg om en gang du måtte jobbe under stramme tidsfrister samtidig som du håndterte flere automatiseringsoppgaver.
Forventet fra kandidaten: Tidsstyring og evne til å prioritere.
Eksempel på svar: «I min forrige rolle trengte jeg å oppdatere eksisterende TestNG testpakker samtidig som jeg opprettet nye for en kommende utgivelse. Jeg prioriterte oppgaver basert på forretningsmessig innvirkning, automatiserte områdene med høyest risiko først og brukte TestNG kranping å isolere fullførte seksjoner for tidlig gjennomgang. Dette sikret rettidig levering uten at det gikk på bekostning av kvaliteten.»
10) Hvordan ville du designe en skalerbar TestNG Rammeverk for en stor applikasjon?
Forventet fra kandidaten: ArchiTekturforståelse, mønstre og beste praksis.
Eksempel på svar: «Jeg ville designe et modulært rammeverk ved hjelp av Page Object Model, integrere TestNG for utførelsesstyring, og bruke DataProviders for datadrevne scenarier. Jeg ville også konfigurere parallell utførelse, sentralisere verktøy og eksternalisere konfigurasjonsinnstillinger slik at rammeverket forblir skalerbart og vedlikeholdbart etter hvert som applikasjonen vokser.»

