testng annotations listeners
Acest tutorial explică diferitele tipuri de adnotări și ascultători TestNG. Veți afla, de asemenea, cum să utilizați adnotările și ascultătorii TestNG cu exemple:
Aici vom rula un program de bază TestNG folosind adnotări TestNG și vom vedea, de asemenea, rolul ascultătorilor TestNG și cum să le folosim în testare.
=> Citiți seria de testare Easy TestNG.
Ce veți învăța:
Ce sunt adnotările TestNG?
Acestea sunt programul sau logica de afaceri care sunt utilizate în controlul fluxului de metode. Acestea joacă un rol foarte important în TestNG. Aceste adnotări diferă în fiecare proiect conform cerințelor. Fluxul de adnotări rămâne același în fiecare program, în ciuda cerințelor diferite.
Există diferite tipuri de adnotări TestNG care fac TestNG mai ușor și mai bun decât JUnit. Fiecare dintre aceste adnotări va rula la un anumit eveniment din TestNG.
Tipuri de adnotări în TestNG
Mai jos sunt listele de adnotări și atributele lor care sunt utilizate în TestNG. Să le explorăm în detaliu și utilizările lor.
Inainte de
- @BeforeSuite: Această metodă va fi executată înainte de a rula toate testele din suită.
- @BeforeTest: Această metodă va fi executată înainte ca fiecare secțiune de testare să fie declarată în suită.
- @Înainte de curs: Această metodă va fi executată înainte de prima metodă de testare din clasa curentă.
- @BeforeMethod: Această metodă va fi executată înainte de fiecare metodă de testare.
- @BeforeGroups: Această metodă va fi executată înainte de menționarea oricărei metode de testare a grupului specificat.
- @Test : Marchează o clasă sau o metodă ca parte a testului. Sau putem spune că face o metodă ca metodă de testare.
După
- @AfterSuite: Această metodă va fi executată după executarea tuturor testelor din suită.
- @AfterTest: Această metodă va fi executată după ce fiecare secțiune de testare este declarată în suită.
- @După clasa: Această metodă va fi executată după ultima metodă de testare a clasei.
- @AfterMethod: Această metodă va fi executată după executarea fiecărei metode de testare.
- @AfterGroups: Această metodă va fi executată după ce se execută ultima metodă de testare a grupului specificat.
Fluxul de lucru al adnotărilor
Când executăm fișierul TestNG.xml, adnotările TestNG vor fi executate în următoarea ordine:
Before Suite-> Before Test-> Before Class-> Before Method-> @Test -> After Method-> After Class-> After Test-> After Suite
@BeforeSuite @BeforeTest @BeforeClass @BeforeMethod @Test @AfterMethod @AfterClass @AfterTest @AfterSuite
@Test are o mulțime de alte atribute care ne ajută să executăm cazurile noastre de testare mai eficient.
Mai jos sunt tipurile de atribute și descrierile acestora cu exemple.
# 1) întotdeauna Run: Când este setată la adevărat, această metodă va rula chiar dacă depinde de o metodă care a eșuat.
Exemplu: Test (alwaysRun = true)
# 2) dataProvider : Aceasta arată numele furnizorului de date pentru această metodă. Are atribute numai adică nume. Îl putem folosi atunci când testăm software-ul nostru cu mai multe seturi de date la momentul de intrare sau timpul de rulare. Acest lucru este cunoscut și sub numele de testare bazată pe date. Putem face teste bazate pe date folosind acest atribut.
Exemplu: @dataProvider (name = ”TestData”)
# 3) dataProviderClass : Acest atribut vă va permite să specificați clasa furnizorului de date care va conține furnizorul de date pe care îl va folosi metoda @Test.
Exemplu: @Test (dataProvider = „Test de date client”, dataProviderClass = ClientDetailsTest.class)
# 4) depinde de grupuri : Acest atribut depinde de lista grupurilor, adică metoda de testare va începe executarea numai după ce grupurile dependente sunt executate.
Notă : Dacă oricare dintre testele din grupurile care depind de eșuează, atunci va trece peste testul respectiv.
Mai jos este exemplul:
@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) depinde de metode : Această adnotare depinde de lista metodelor. Aceasta înseamnă că metoda de testare va începe executarea numai după ce metodele dependente sunt executate.
Notă : Dacă oricare dintre testele din metodele dependente eșuează, acesta va sări peste testul respectiv.
Exemplu:
@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: Putem seta atributele unei metode de testare la adevărat, iar acest lucru va forța executarea testului chiar dacă unele dintre testele din grup depind de eșec.
De exemplu:
@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) descriere : Aceasta oferă descrierea metodei. În general, conține un rezumat pe o linie.
Exemplu:
@Test(description = “Regression Test Summary”)
# 8) activat : Acest atribut ajută la specificarea dacă vrem să rulăm / executăm metoda de testare specifică în suita / clasa curentă sau nu. Uneori nu vrem să efectuăm câteva teste din anumite motive, cum ar fi cerința / funcția se schimbă frecvent și nu vrem să deranjăm curgerea curentă pentru acea funcție anume.
În aceste cazuri, putem ignora / dezactiva testul respectiv setând această caracteristică ca @Test (activat = fals).
Exemplu:
@Test(enabled = false) public void imageTest() {//We have disabled this test by giving enabled=false System.out.println(“Image was tested successfully()”); }
# 9) Excepții așteptate : Acest atribut arată lista de excepții pe care metoda de testare le va arunca în timpul rulării. Dacă nu sunt aruncate excepții sau orice altă excepție pentru metodă, testul este marcat ca un eșec.
Exemplu:
@Test(expectedExceptions = ArithmeticException.class) public void numericTest() { int i = 1 / 0; }
# 10) grupuri : Acest atribut este utilizat pentru a specifica grupurile de care aparține metoda de testare.
@Test(groups = {“Regression”}) Public void runRegressionTest(){ System.out.println(“test runs were successful”); }
# 11) prioritate : Acest lucru ajută la prioritizarea metodelor de testare, în timp ce prioritatea implicită începe cu 0, iar testele sunt executate în ordine crescătoare.
Exemplu:
@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”); }
Rezultate: Mai jos sunt rezultatele în funcție de prioritate, chiar dacă nu a fost atribuit niciun număr la primul test, acesta și-a luat prioritatea în mod implicit ca 0 și execuția a fost făcută în ordine crescătoare.
Aprobat: launchApp
A trecut: loginApp
Trecut: verificați Trans
# 12) timeout : Acest atribut ajută la specificarea unei valori de expirare pentru test (utilizată în general ca milisecunde). Dacă testul durează mai mult decât valoarea de expirare specificată, testul este marcat ca eșuat. Putem folosi acest timeout pentru a efectua un test de performanță, pentru a ne asigura că metoda revine într-un timp rezonabil.
@Test(timeOut = 500) public void timeTest() throws InterruptedException { Thread.sleep(400); System.out.println(“Time test method successfully tested”); }
# 13) invocationCount : Acest atribut ajută la determinarea de câte ori ar trebui invocată o metodă de testare.
@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();
Ieșire:
Titlul paginii este Google
Titlul paginii este Google
Titlul paginii este Google
Titlul paginii este Google
Titlul paginii este Google
# 14) invocationTimeOut: Acesta este timpul maxim (numărul de milisecunde) pe care ar trebui să-l ia acest test pentru toate conturile de invocații. Această metodă trebuie utilizată împreună cu metoda numărării invocațiilor, altfel ar fi ignorată.
Exemplu:
@Test(invocationCount=4, invocationTimeOut=4000) public void loginTest(){ Thread.sleep(1000); System.Out.println(“login Test”); }
Exemplul de mai sus arată că acest test va dura în total 4 secunde pentru a fi executat și de fiecare dată când testul este invocat / rulat, ar dura 1 secundă pentru a fi executat.
# 15) @DataProvider : Această metodă ajută la furnizarea de date pentru o metodă de testare. Mai întâi, trebuie să declarăm o metodă adnotată de @DataProvider și apoi să folosim această metodă în metoda de testare necesară folosind atributul „DataProvider” din adnotarea @Test.
Un furnizor de date returnează o matrice de obiecte, în special o matrice de obiecte bidimensionale () (). Prima matrice reprezintă un set de date, iar a doua matrice conține parametrii.
@DataProvider (nume = „Test”) - Aici, numele reprezintă numele furnizorului de date. Dacă numele nu este dat, atunci numele furnizorului de date se va seta automat la numele metodei.
Exemplu:
@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) @Factory : Aceasta este utilizată pentru a specifica o metodă ca fabrică pentru furnizarea de obiecte care urmează să fie utilizate de TestNG pentru clasele sale de testare. Folosind @Factory, putem crea teste dinamice în timpul rulării și ar trebui să returneze un obiect matrice.
Exemplu:
Să luăm un exemplu pentru a-l înțelege mai bine. Vom crea două clase, adică FactorySample.Java și 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; } }
Ieșire : Google a fost lansat cu succes
Gmail s-a conectat cu succes
Diferența dintre adnotările @Factory și @DataProvider
Există o diferență de bază între ambele adnotări. Există o mulțime de confuzie cu privire la aceste două adnotări, cum ar fi unde să le utilizați și de ce?
Să găsim răspunsurile.
@DataProvider: Această adnotare va parametrica metoda de testare particulară și va executa testul într-un nr. de ori pe baza datelor furnizate de această metodă.
De exemplu, dacă există doi parametri, atunci metoda de testare va fi executată de două ori. De exemplu, dacă vrem să ne conectăm la un site cu seturi diferite de nume de utilizator și parole de fiecare dată, atunci acest lucru este util deoarece trebuie să furnizăm parametrii de testat.
@Fabrică : Aceasta va executa toate metodele de testare prezente în fișierul clasei de test în timp ce se utilizează o instanță separată a acelei clase. Acest lucru este util dacă vrem să rulăm clasa de testare de câte ori.
De exemplu , dacă trebuie să testăm funcția de conectare a oricărei aplicații sau site-uri web și întrucât trebuie să rulăm acest test de mai multe ori, este mai bine să folosim @Factory unde putem crea mai multe instanțe de testare și pot rula testele.
Să aruncăm o privire la aceste exemple pentru a cunoaște diferența.
Exemplu @DataProvider :
@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); }
Notă : În programul de mai sus am furnizat două date și rezultatul programului ar fi:
Numele sunt: Mihir 145632
Numele sunt: Kumar 28242
Acest lucru arată că, dacă creștem numărul de date în metoda mesajului, atunci metoda de imprimare va executa același număr de ori.
@Exemplu de fabrică :
TestNG Factory este foarte util atunci când trebuie să rulăm mai multe clase de testare folosind o singură clasă de testare.
Să vedem un exemplu.
Pentru aceasta, trebuie să creăm două clase de testare cu puține metode de testare în interiorul lor.
Date de test 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'); } }
Acum trebuie să definim metoda @Factory care returnează o matrice de obiecte din clasele definite mai sus.
Programul fabricii:
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; } }
Ieșire:
Metoda de testare Test1
Metoda de testare Test2
TRECUT: test1
TRECUT: test2
Ascultători TestNG cu tipuri
În termeni simpli, ascultătorii ascultă evenimentul definit în scriptul Selenium și se comportă în conformitate cu acesta. Scopul principal este de a crea jurnale și de a personaliza rapoartele TestNG.
Există multe tipuri de ascultători disponibili în TestNG.
De exemplu , IAnnotationTransformer, IAnnotationTransformer2, IConfigurable, IConfigurationListener, IConfigurationListener2, IExecutionListener, IHookable, IInvokedMethodListener, IInvokedMethodListener2, IMethodInterceptor, IReporter, ISuiteListener
Cu toate acestea, când vine vorba de testare, folosim doar câteva dintre ele, după cum se discută mai jos:
# 1) ISuiteListener
Acesta este un ascultător pentru suitele de testare. Acesta constă din două metode, adică onStart () și onFinish () .
Ori de câte ori implementăm acest ascultător, acesta va garanta că utilizatorul final va invoca metodele onStart () și onFinish () înainte și după rularea unei suite TestNG.
Detalii despre metodă:
void onStart (suite ISuite) : Această metodă este invocată înainte de începerea Suite Runner.
void onFinish (suite ISuite) : Această metodă este invocată după ce Suite Runner a rulat toate suitele de testare.
Exemplu:
@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
Acest ascultător funcționează la fel ca ISuiteListener. Cu toate acestea, singura diferență este că face apelul înainte și după test și nu Suite. Este un ascultător pentru testare și acest ascultător are șapte metode.
(i) onStart () :Această metodă este invocată după instanțarea clasei de testare și înainte de apelarea oricărei metode de configurare.
Exemplu:
@Override public void onStart(ITestContext context) { System.out.println(“Context Name = ” + context.getName()); }
(ii) onFinish() :Această metodă este invocată după executarea tuturor testelor și apelarea tuturor metodelor de configurare.
Exemplu:
public void onFinish(ITestContext context) { System.out.println(context.getPassedTests()); }
(iii) onTestStart () :Această metodă este invocată de fiecare dată înainte de a fi invocat un test. ITestResult este completat doar parțial cu referințe la clasă, metodă, start millis și status.
Metodă: void onTestStart (rezultatul ITestResult)
Exemplu:
@Override public void onTestStart(ITestResult result) { System.out.println('Test Started…'+result.getStartMillis()); }
(iv) onTestSuccess () :Această metodă este invocată de fiecare dată când un test reușește.
Metodă: void onTestSuccess (rezultatul ITestResult)
Exemplu:
@Override public void onTestSuccess(ITestResult result) { System.out.println('Test Success. '+result.getEndMillis()); }
(v) onTestFailure () :Această metodă este invocată de fiecare dată când un test eșuează.
Metodă: void onTestFailure (rezultatul ITestResult)
Exemplu:
@Override public void onTestFailure(ITestResult result) { System.out.println('Test Failed. '+result.getTestName()); }
(vi) onTestSkipped () :Această metodă este invocată de fiecare dată când un test este omis.
Metodă: void onTestSkipped (rezultatul ITestResult)
Exemplu:
@Override public void onTestSkipped(ITestResult result) { System.out.println('Test Skipped. '+result.getTestName()); }
(vii) onTestFailedButWithinSuccessPercentage :Această metodă este invocată de fiecare dată când o metodă eșuează, dar a fost adnotată cu procent de succes, iar eșecul o menține în procentul de succes.
Metodă: void onTestFailedButWithinSuccessPercentage (rezultatul ITestResult)
Exemplu:
@Override public void onTestFailedButWithinSuccessPercentage(ITestResult iTestResult) { System.out.println('Test failed but it is in defined success ratio ' + getTestMethodName(iTestResult)); }
# 3) IExecutionListener
Este un ascultător care monitorizează începutul și sfârșitul unei rulări TestNG. Are două metode, adică onExecutionStart () și onExecutionFinish () .
metoda onExecutionStart () este apelată înainte ca TestNG să înceapă să ruleze suitele și metoda onExecutionFinish () este apelată după ce TestNG se finalizează cu rularea tuturor suitelor de testare.
Metodă:
void onExecutionStart ()
void onExecutionFinish ()
Exemplu:
@Override public void onExecutionStart() { System.out.println('TestNG is going to start'); } @Override public void onExecutionFinish() { System.out.println('TestNG is finished'); }
# 4) IInvokedMethodListener
Este un ascultător care este invocat înainte și după ce o metodă este invocată de TestNG. Acest ascultător este invocat numai pentru configurații și metode de testare. Conține doar două metode, adică afterInvocation și beforeInvocation.
- înainte de invocare: Invocați înainte de fiecare metodă.
- afterInvocation: Invocați după fiecare metodă.
Metodă:
void beforeInvocation (metoda IInvokedMethod, ITestResult testResult)
void afterInvocation (metoda IInvokedMethod, ITestResult testResult)
Exemplu:
@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
Această clasă este utilizată pentru a modifica lista metodelor de testare pe care TestNG le va rula. Prin utilizarea acestei metode putem reordona lista metodelor de testare.
Se aplică numai acelor metode care nu au dependenți și acele metode care nu depind de alte metode de testare vor fi trecute în parametri. Această interfață va returna o listă de metode de testare care trebuie executate, dar într-un mod diferit sortat.
Metodă:
care este cel mai bun blocator de anunțuri gratuit pentru Chrome
interceptare java.util.List (metode java.util.List, context ITestContext)
Exemplu:
@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) IReporter
Acest lucru este implementat de clienți pentru a genera un raport. Această metodă va fi invocată odată ce toată suita a rulat și parametrii oferă toate rezultatele testelor care s-au întâmplat în timpul acelei rulări.
Metodă:
void generateReport (java.util.List xmlSuites, java.util.List suite, java.lang.String outputDirectory)
Exemplu:
@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(); }
Concluzie
În acest articol, am văzut cum adnotările TestNG pot fi utile pentru a ne ușura logica programului. Adnotările sunt utilizate după cum este necesar.
Puteți trece parametrii adnotărilor și puteți efectua și teste bazate pe date. Puteți rula cazurile de testare în grupuri și puteți economisi timp. Cu ascultătorii, puteți genera chiar rapoarte. Nu crezi că este minunat?
TestNG.xml va fi explicat în detaliu în viitorul nostru tutorial. Acest fișier XML este coloana vertebrală a cadrului TestNG și ne va ajuta în executarea cazurilor noastre de testare.
=> Consultați aici ghidul perfect de formare TestNG.
Lectură recomandată
- Aflați cum să utilizați adnotările TestNG în seleniu (cu exemple)
- Afirmații în seleniu folosind cadrele Junit și TestNG
- Introducere în JUnit Framework și utilizarea sa în Selenium Script - Selenium Tutorial # 11
- 30+ Cele mai bune tutoriale despre seleniu: învățați seleniul cu exemple reale
- Exemplu TestNG: Cum să creați și să utilizați fișierul TestNG.xml
- Ascultători JMeter: analizarea rezultatelor cu diferiți ascultători
- Cum se folosește TestNG Framework pentru crearea de scripturi Selenium - TestNG Selenium Tutorial # 12
- Tutorial Eclipse: Integrarea TestNG în Eclipse Java IDE