testng annotations listeners
Denna handledning förklarar de olika typerna av TestNG-anteckningar och lyssnare. Du lär dig också hur du använder TestNG-anteckningar och lyssnare med exempel:
Här kommer vi att köra ett grundläggande TestNG-program med hjälp av TestNG-anteckningar och även se rollen som TestNG-lyssnare och hur man använder dem vid testning.
=> Läs igenom Easy TestNG Training Series.
Vad du kommer att lära dig:
Vad är TestNG-kommentarer?
Det här är programmet eller affärslogiken som används för att kontrollera flödet av metoder. De spelar en mycket viktig roll i TestNG. Dessa anteckningar skiljer sig åt i varje projekt enligt kraven. Flödet av anteckningar förblir detsamma i varje program trots de olika kraven.
Det finns olika typer av TestNG-anteckningar som gör TestNG enklare och bättre än JUnit. Var och en av dessa kommentarer kommer att köras vid en specifik händelse i TestNG.
Typer av anteckningar i TestNG
Nedan följer listorna över anteckningar och deras attribut som används i TestNG. Låt oss utforska dem och deras användning i detalj.
Innan
- @BeforeSuite: Denna metod kommer att köras innan alla tester i sviten körs.
- @BeforeTest: Denna metod kommer att köras innan varje testavsnitt deklareras i sviten.
- @Innan lektionen: Denna metod körs före den första testmetoden i den aktuella klassen.
- @BeforeMethod: Denna metod kommer att köras före varje testmetod.
- @BeforeGroups: Denna metod kommer att köras innan någon testmetod för den angivna gruppen nämns.
- @Testa : Markerar en klass eller en metod som en del av testet. Eller så kan vi säga att det gör en metod som testmetod.
Efter
- @AfterSuite: Denna metod kommer att köras efter att alla tester i sviten har körts.
- @AfterTest: Den här metoden kommer att köras efter att varje testavsnitt har förklarats i sviten.
- @Efter lektionen: Denna metod kommer att köras efter klassens sista testmetod.
- @AfterMethod: Denna metod kommer att köras efter att varje testmetod har körts.
- @AfterGroups: Den här metoden körs efter att den sista testmetoden för den angivna gruppen har körts.
Arbetsflöde av kommentarer
När vi kör TestNG.xml-filen körs TestNG-anteckningarna i följande ordning:
Före svit-> Före test-> Före klass-> Före metod-> @Test -> Efter metod-> Efter lektion-> Efter test-> Efter svit
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@Testa har många andra attribut som hjälper oss att genomföra våra testfall mer effektivt.
Nedan följer typ av attribut och deras beskrivningar med exempel.
# 1) AlwaysRun: När den är inställd på true kommer den här metoden att köras även om den beror på en metod som har misslyckats.
Exempel: Testa (alltid kör = sant)
# 2) dataProvider : Detta visar namnet på dataleverantören för denna metod. Det har bara attribut dvs namn. Vi kan använda den när vi testar vår programvara med flera datauppsättningar vid inmatningstid eller körtid. Detta kallas också datadriven testning. Vi kan göra datadriven testning med detta attribut.
Exempel: @dataProvider (namn = ”TestData”)
# 3) dataProviderClass : Detta attribut låter dig ange vilken dataleverantörsklass som ska innehålla den dataleverantör som @Test-metoden ska använda.
Exempel: @Test (dataProvider = “Client Data Test”, dataProviderClass = ClientDetailsTest.class)
# 4) beror på grupper : Detta attribut beror på listan över grupper, dvs testmetoden startar exekveringen först efter att de beroende grupperna har körts.
Notera : Om något av testerna i grupperna som är beroende av misslyckas, hoppar det över det testet.
Nedan följer exemplet:
@Test(groups= “homepage”) public void homepageTest(){ System.out.println('Home Page displayed successfully'); } @Test(groups= “transactionspage”) Public void transactionpageTest(){ System.out.println(“Transaction Page displayed successfully”); } @Test(dependsOnGroups={“homepage”, “transactionspage”}) public void dependOnGroupTest1(){ System.out.println(“dependency tested successful”);
# 5) dependsOnMethods : Denna kommentar beror på listan över metoder. Detta innebär att testmetoden börjar köras först efter att de beroende metoderna har körts.
Notera : Om något av testerna i metoder som är beroende misslyckas hoppar det över det testet.
Exempel:
@Test public void loginTest() { System.out.println(“Login Tested Successfully”); } @Test public void homepageTest() { System.out.println(“Home Page Tested Successfully”); } @Test(dependsOnMethods={“ loginTest”, “homepageTest”}) public void smokeTest() { System.out.println(“Smoke Tests were done successfully”);
# 6) alwaysRun = true: Vi kan ställa in attributen för en testmetod till sant, och detta kommer att tvinga testet att utföras även om några av testerna i gruppen beror på misslyckande.
Till exempel:
@Test public void launchAppTest() { System.out.println(“Application launched Successfully”); } @Test public void loginAppTest() { System.out.println(“Application logged in Successfully”); } @Test(dependsOnMethods={“launchAppTest”, “loginAppTest”}, alwaysRun=true) public void smokeTest() { System.out.println(“Smoke Test were done successfully”); }
# 7) beskrivning : Detta ger en beskrivning av metoden. Generellt innehåller den en sammanfattning av en rad.
Exempel:
@Test(description = “Regression Test Summary”)
# 8) aktiverad : Detta attribut hjälper till att ange om vi vill köra / köra den specifika testmetoden i den aktuella sviten / klassen eller inte. Ibland vill vi inte köra några tester på grund av några anledningar, eftersom kravet / funktionen ofta förändras och vi vill inte störa den aktuella körningen för just den funktionen.
I dessa fall kan vi helt enkelt ignorera / inaktivera det specifika testet genom att ställa in den här funktionen som @Test (aktiverad = falsk).
Exempel:
@Test(enabled = false) public void imageTest() {//We have disabled this test by giving enabled=false System.out.println(“Image was tested successfully()”); }
# 9) förväntade undantag : Detta attribut visar listan över undantag som testmetoden kommer att kasta under körtiden. Om inga undantag eller något annat undantag kastas för metoden markeras testet som ett misslyckande.
Exempel:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }
# 10) grupper : Detta attribut används för att specificera de grupper som testmetoden tillhör.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); }
# 11) prioritet : Detta hjälper till att prioritera testmetoderna, medan standardprioriteten börjar med 0 och testerna utförs i stigande ordning.
Exempel:
@Test Public void launchApp(){ System.out.println(“Application was launched successfully”): } @Test (priority = 1) Public void loginApp(){ System.out.println(“Application logged in successfully”); } @Test (priority = 2) Public void checkTrans(){s System.out.println(“Checked Transactions successfully”); }
Resultat: Nedan visas resultaten enligt prioritet, även om inget nummer tilldelades det första testet, det tog sin prioritet som standard 0 och körningen gjordes i stigande ordning.
Godkänd: launchApp
Godkänd: loginApp
Godkänd: checkTrans
# 12) timeout : Detta attribut hjälper till att ange ett timeoutvärde för testet (vanligtvis används som millisekunder). Om testet tar mer än det angivna timeout-värdet markeras testet som misslyckat. Vi kan använda denna timeout för att göra ett prestandatest, för att se till att metoden återvänder inom rimlig tid.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) invocationCount : Detta attribut hjälper till att bestämma hur många gånger en testmetod ska åberopas.
@Test(invocationCount = 5) public void loginTest() { WebDriver driver = new FirefoxDriver(); driver.get('http://www.google.com'); System.out.println('Page Title is ' + driver.getTitle()); driver.quit();
Produktion:
Sidans titel är Google
Sidans titel är Google
Sidans titel är Google
Sidans titel är Google
Sidans titel är Google
# 14) invocationTimeOut: Detta är den maximala tid (antal millisekunder) som detta test ska ta för alla anropsräkningar. Denna metod måste användas tillsammans med anropsräkningsmetoden, annars skulle den ignoreras.
Exempel:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Ovanstående exempel visar att det tar totalt 4 sekunder att utföra detta test och varje gång testet anropas / körs tar det 1 sekund att utföra.
# 15) @DataProvider : Den här metoden hjälper till att leverera data för en testmetod. Först måste vi deklarera en metod som antecknats av @DataProvider och sedan använda den här metoden i den testmetod som krävs med attributet 'DataProvider' i @Test-anteckningen.
En dataleverantör returnerar en uppsättning objekt, särskilt en tvådimensionell objektmatris () (). Den första matrisen representerar en datamängd och den andra matrisen innehåller parametrarna.
@DataProvider (name = “Test”) - Här representerar namnet dataleverantörens namn. Om namnet inte ges, kommer DataProvider-namnet automatiskt att sättas till metodnamnet.
Exempel:
@DataProvider(name = “Name”) public object()() credentials(){ return new object ()() { { “Mohan”, “23”}, { “Shikhar”, “30”} }; } //Now we are calling the Data Provider object by its name @Test(DataProvider = “Name”) Public void testData(String sName, int age) { System.out.println(“Data is: (Name, age)”); }
# 16) @Fabrik : Detta används för att ange en metod som en fabrik för att tillhandahålla objekt som ska användas av TestNG för dess testklasser. Genom att använda @Factory kan vi skapa dynamiska tester vid körning och det ska returnera ett arrayobjekt.
Exempel:
Låt oss ta ett exempel för att förstå det bättre. Vi skapar två klasser, dvs FactorySample.Java och FactoryTest.Java
FactorySample.Java
public class FactorySample { @Test public void googleTest() { System.out.println(“Google was launched successfully”); } @Test public void gmailLogin() { System.out.println(“Gmail logged in successfully”); }
FactoryTest.Java
public class FactoryTest { @Factory() public Object() testFact() { FactorySample fs = new FactorySample(2); fs(0) = new googleTest(); fs(1) = new gmailLogin(); return fs; } }
Produktion : Google lanserades framgångsrikt
Gmail loggade in framgångsrikt
Skillnaden mellan @Factory och @DataProvider Anmärkningar
Det finns en grundläggande skillnad mellan båda anteckningarna. Det finns mycket förvirring angående dessa två anteckningar, som var att använda dessa och varför?
Låt oss hitta svaren.
@DataProvider: Denna kommentar parametrar den specifika testmetoden och utför testet i ett specifikt nr. gånger baserat på de uppgifter som tillhandahålls med denna metod.
Till exempel, om det finns två parametrar kommer testmetoden att utföras två gånger. Om vi till exempel vill logga in på en webbplats med olika uppsättningar användarnamn och lösenord varje gång, är det användbart eftersom vi måste ange parametrarna för att testa.
@Fabrik : Detta kör alla testmetoder som finns i testklassfilen medan du använder en separat instans av den klassen. Detta är användbart om vi vill köra testklassen ett antal gånger.
Till exempel , om vi måste testa inloggningsfunktionen för någon applikation eller webbplats och eftersom vi måste köra testet flera gånger, är det bättre att använda @ Factory där vi kan skapa flera instanser av test och köra testerna.
Låt oss ta en titt på dessa exempel för att känna till skillnaden.
@DataProvider Exempel :
@DataProvider public Object()() message(){ return new Object ()(){{“Mihir” , new Integer (145632)}, {“Kumar”, new Integer (28242)}}; } @Test (dataProvider=”message”) public void PrintMsg(String name, Integer id){ System.out.println(“Names are: “+name+” “+id); }
Notera : I ovanstående program har vi tillhandahållit två data och programresultatet skulle vara:
Namnen är: Mihir 145632
Namnen är: Kumar 28242
Detta visar att om vi ökar antalet data i meddelandemetoden, kommer utskriftsmetoden att utföra samma antal gånger.
@ Factory Exempel :
TestNG Factory är mycket användbart när vi måste köra flera testklasser med en enda testklass.
Låt oss se ett exempel.
För detta måste vi skapa två testklasser med få testmetoder inuti dem.
TestData 1:
public class TestData1 { @Test public void testData1() { System.out.println('Test data 1 successfully tested'); } }
TestData 2:
public class TestData2 { @Test public void testData2() { System.out.println('Test data 2 successfully tested'); } }
Nu måste vi definiera metoden @ Factory som returnerar en objektmatris av de ovan definierade klasserna.
Fabriksprogram:
public class TestNGFactory { @Factory() public Object() getTestClass() { Object() tests = new Object(2); tests(0) = new Test Data 1(); tests(1) = new Test Data 2(); return tests; } }
Produktion:
Test1 testmetod
Test2 testmetod
GÅNG: test1
GÅNG: test2
TestNG-lyssnare med typer
Enkelt uttryckt lyssnar lyssnarna på händelsen som definieras i Selenium-skriptet och beter sig i enlighet med det. Huvudsyftet är att skapa loggar och anpassa TestNG-rapporterna.
Det finns många typer av lyssnare tillgängliga i TestNG.
Till exempel , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListener,
Men när det gäller testning använder vi bara några av dem som diskuteras nedan:
# 1) ISuiteListener
Detta är en lyssnare för testsviter. Den består av två metoder, dvs. onStart () och onFinish () .
När vi implementerar denna lyssnare garanterar det att slutanvändaren kommer att anropa metoderna onStart () och onFinish () före och efter att ha kört en TestNG-svit.
Metoddetaljer:
ogiltigt onStart (ISuite-svit) : Denna metod åberopas innan Suite Runner startar.
void onFinish (ISuite-svit) : Denna metod åberopas efter att Suite Runner har kört alla testsviter.
Exempel:
@Override public void onStart(ISuite suite) { System.out.println(“TestNG Suite Starts”); } @Override public void onFinish(ISuite suite) { System.out.println(“TestNG Suite Finishes”); }
# 2) ITestListener
Den här lyssnaren fungerar precis som ISuiteListener. Den enda skillnaden är dock att det gör samtalet före och efter testet och inte sviten. Det är en lyssnare för testkörning och den här lyssnaren har sju metoder i sig.
(i) onStart () :Denna metod åberopas efter att testklassen har startats och innan någon konfigurationsmetod anropas.
Exempel:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ii) onFinish () :Denna metod åberopas när alla tester har körts och alla konfigurationsmetoder anropas.
Exempel:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(iii) onTestStart () :Denna metod åberopas varje gång innan ett test åberopas. ITestResult är endast delvis fylld med referenser till klass, metod, start millis och status.
Metod: ogiltigt onTestStart (ITestResult-resultat)
Exempel:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(iv) onTestSuccess () :Denna metod åberopas varje gång ett test lyckas.
Metod: ogiltigt onTestSuccess (ITestResult resultat)
Exempel:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(v) onTestFailure () :Denna metod åberopas varje gång ett test misslyckas.
Metod: ogiltigt onTestFailure (ITestResult-resultat)
Exempel:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(vi) onTestSkipped () :Denna metod åberopas varje gång ett test hoppas över.
Metod: ogiltigt onTestSkipped (ITestResult-resultat)
Exempel:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(vii) onTestFailedButWithinSuccessPercentage :Denna metod åberopas varje gång en metod misslyckas men har antecknats med framgångsprocent och felet håller den inom framgångsprocenten.
Metod: ogiltigt onTestFailedButWithinSuccessPercentage (ITestResult resultat)
Exempel:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); }
# 3) IExecutionListener
Det är en lyssnare som övervakar början och slutet av en TestNG-körning. Den har två metoder, dvs. onExecutionStart () och onExecutionFinish () .
onExecutionStart () -metoden anropas innan TestNG börjar köra sviterna och metoden onExecutionFinish () anropas efter att TestNG är klar med körning av alla testsviter.
Metod:
ogiltigt onExecutionStart ()
ogiltigt påExecutionFinish ()
Exempel:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }
# 4) IInvokedMethodListener
Det är en lyssnare som åberopas före och efter att en metod åberopas av TestNG. Den här lyssnaren anropas endast för konfigurationer och testmetoder. Det har bara två metoder i det, dvs. efterInvocation och föreInvocation.
- före anrop: Anropa före varje metod.
- afterInvocation: Anropa efter varje metod.
Metod:
void beforeInvocation (IInvokedMethod method, ITestResult testResult)
ogiltig efterInvocation (IInvokedMethod-metod, ITestResult testResult)
Exempel:
@Override public void beforeInvocation(IInvokedMethod method, ITestResult testResult) { System.out.println('before invocation of ' + method.getTestMethod().getMethodName()); } @Override public void afterInvocation(IInvokedMethod method, ITestResult testResult) { System.out.println('after invocation of ' + method.getTestMethod().getMethodName()); }
# 5) IMethodInterceptor
Denna klass används för att ändra listan över testmetoder som TestNG ska köras. Genom att använda denna metod kan vi ordna om listan över testmetoder.
Det är endast tillämpligt på de metoder som inte har något beroende och de metoder som inte beror på andra testmetoder skickas i parametrar. Detta gränssnitt returnerar en lista över testmetoder som måste köras men på ett annat sorterat sätt.
Metod:
programvarutestning intervjufrågor med svar
java.util.List intercept (java.util.List metoder, ITestContext sammanhang)
Exempel:
@Override public Listintercept(Listmethods, ITestContext context) { List result = new ArrayList(); for (IMethodInstance m : methods) { Test test = m.getMethod().getMethod().getAnnotation(Test.class); Setgroups = new HashSet(); for (String group : test.groups()) { groups.add(group); } if (groups.contains('sanity')) { result.add(m); } else { String testMethod = m.getMethod().getMethodName(); System.out.println(testMethod + ' not a SANITY test so not included'); } } return result; }
# 6) IRrapporter
Detta implementeras av klienterna för att generera en rapport. Denna metod kommer att anropas när alla sviter har körts och parametrarna ger alla testresultat som hände under den körningen.
Metod:
void genereraReport (java.util.List xmlSuites, java.util.List sviter, java.lang.String outputDirectory)
Exempel:
@Override public void generateReport(List xmlSuites, List suites, String outdir) { try { writer = createWriter(outdir); } catch (IOException e) { System.err.println('Unable to create output file'); e.printStackTrace(); return; } startHtml(writer); writeReportTitle(reportTitle); generateSuiteSummaryReport(suites); generateMethodSummaryReport(suites); generateMethodDetailReport(suites); endHtml(writer); writer.flush(); writer.close(); }
Slutsats
I den här artikeln har vi sett hur TestNG-anteckningar kan vara användbara för att göra vår programlogik enklare. Kommentarer används efter behov.
Du kan skicka parametrarna till anteckningarna och göra datadriven testning också. Du kan köra testfallet i grupper och spara tid. Med lyssnare kan du till och med skapa rapporter. Tycker du inte att det här är underbart?
TestNG.xml kommer att förklaras i detalj i vår kommande handledning. Denna XML-fil är ryggraden i TestNG-ramverket och den hjälper oss att utföra våra testfall.
=> Kolla in den perfekta TestNG-träningsguiden här.
Rekommenderad läsning
- Lär dig hur du använder TestNG-anteckningar i selen (med exempel)
- Påståenden i selen med Junit och TestNG Frameworks
- Introduktion till JUnit Framework and Its Use in Selenium Script - Selenium Tutorial # 11
- 30+ bästa selen-självstudier: Lär dig selen med riktiga exempel
- TestNG Exempel: Hur man skapar och använder TestNG.xml-fil
- JMeter-lyssnare: Analysera resultat med olika lyssnare
- Hur man använder TestNG Framework för att skapa Selen-skript - TestNG Selen Tutorial # 12
- Eclipse Tutorial: Integrera TestNG i Eclipse Java IDE