Selenium WebDriver: TestNG pentru gestionarea cazurilor de testare și generarea de rapoarte



Acest tutorial Selenium WebDriver vă va ajuta să înțelegeți necesitatea utilizării TestNG cu Selenium pentru gestionarea cazurilor de testare și generarea rapoartelor de testare detaliate.

În blogul anterior, v-am învățat cum să efectuați primul test Selenium WebDriver. În acest blog, voi acoperi concepte avansate Selenium WebDriver. Am menționat deja de câteva ori că Selenium WebDriver are limitări în ceea ce privește gestionarea cazurilor de testare și generarea de rapoarte de testare. Deci, care este alternativa? Un instrument la fel de popular precum Selenium trebuie să aibă cu siguranță o soluție corectă, nu? Bineînțeles că da! Putem folosi o combinație de seleniu și TestNG pentru a depăși această limitare și acesta va fi subiectul discuției acestui blog.

ce este un fir de demon

În cazul în care sunteți nou în Selenium și doriți o introducere în conceptele de bază, vă puteți începe călătoria de aici: ? Cu toate acestea, ceilalți pot începe cu TestNG pentru Selenium de pe acest blog.De asemenea, trebuie să știți că organizațiile caută în mod activ profesioniști cu , făcându-l o abilitate importantă de stăpânit de testerii de software.





Dezvoltatorii de software din întreaga lume vor fi de acord în unanimitate că scrierea codului în cazurile de testare economisește o bună parte din timpul de depanare. De ce? Asta deoarece cazurile de testare ajută la crearea unui cod robust și fără erori. Cum se face asta? Prin divizarea întregului cod în cazuri de testare mai mici și apoi prin evaluarea fiecăruia dintre aceste cazuri de testare pentru a trece / eșua condiții, putem crea cod fără erori. Deoarece Selenium nu acceptă executarea codului în cazurile de testare, trebuie să folosim TestNG pentru același lucru. Aici TestNG se încadrează în cadrul Selenium.

TestNG înseamnă Testați următoarea generație și este un cadru de automatizare a testelor open-source inspirat de JUnit și NUnit. Ei bine, nu doar inspirat, ci un upgrade la aceste două cadre. Așadar, puteți întreba ce este actualizarea aici?Actualizarea cu TestNG este că oferă funcționalități suplimentare, cum ar fi: adnotări de testare, grupare, prioritizare, parametrizare și tehnici de secvențiere în cod, ceea ce nu a fost posibil anterior.



Pe lângă gestionarea cazurilor de testare, chiar și rapoarte detaliate ale testelor pot fi obținute folosind TestNG. Va exista un rezumat care afișează cazul de testare care nu a reușit, împreună cu grupul din care a făcut parte și clasa în care face parte. Când bug-urile pot fi localizate cu precizie astfel, ele pot fi remediate imediat spre ușurarea dezvoltatorilor. Imaginea de mai jos descrie funcționarea TestNG.

testng - seleniu webdriver

Deci, cum face TestNG treaba? La această întrebare se va răspunde înurmătoarea secțiune a acestui blog tutorial Selenium WebDriver, unde voi discuta despre cum să gestionez diferite cazuri de testare folosind TestNG.



Selenium WebDriver cu TestNG

Testele pot fi definite și gestionate prin unul dintre următoarele moduri:

  1. Adnotări de testare
  2. Prioritizare
  3. Dezactivarea cazurilor de testare
  4. Dependența metodei
  5. Gruparea
  6. Afirmații
  7. Generarea raportului

Lasă-mă să încep să explicfiecare dintre aceste funcționalități.

Adnotări de testare

În primul rând, să ne punem această întrebare: De ce trebuie să folosim adnotări? Când le putem folosi? Adnotările în seleniu sunt folosite pentru a controla următoarea metodă de executat. Adnotările de testare sunt definite înainte de fiecare metodă din codul de testare. În cazul în care orice metodă nu este prefixată cu adnotări, atunci metoda respectivă va fi ignorată și nu va fi executată ca parte a codului de testare. Pentru a le defini, metodele trebuie să fie pur și simplu adnotate cu „ @Test ‘. Uitați-vă la fragmentul de cod de mai jos, de exemplu.

package testng import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.annotations.AfterClass import org.testng.annotations.AfterMethod import org.testng.annotations.BeforeClass import org.testng.annot .BeforeMethod import org.testng.annotations.Test public class TestAnnotations {@Test public void myTestMethod () {System.out.println ('Inside method: - myTestMethod') WebDriver driver = new FirefoxDriver () driver.get ('http: //www.seleniumframework.com/Practiceform/ ') String title = driver.getTitle () System.out.println (title) driver.quit ()} @BeforeMethod public void beforeMethod () {System.out.println (' This bucată de cod este executată înainte de metodă: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod public void afterMethod () {System.out.println (' Această piesă de cod este executat după metoda: - myTestMethod ')} @BeforeClass public void beforeClass () {Syste m.out.println ('Această bucată de cod este executată înainte de executarea clasei')} @AfterClass public void afterClass () {System.out.println ('Această bucată de cod este executată după executarea clasei')} }

În codul de mai sus, ați fi observat că nu am definit o metodă „principală”. Cu toate acestea, am definite alte 5 metode. Acestea sunt „myTestMethod”, „beforeMethod”, „afterMethod”, „beforeClass” și „afterClass”. De asemenea, rețineți ordinea de definire a metodelor din cod deoarece acestea nu vor fi executate în aceeași ordine.

Metoda „myTestMethod” este adnotată cu @Test , și este principala metodă sau bucată de cod care trebuie executată. Alte metode adnotate vor fi executate înainte și după executarea acestei metode. Deoarece „beforeMethod” este adnotat cu @BeforeMethod , va fi executat înainte de executarea ‘myTestMethod’. În mod similar, „afterMethod” este adnotat cu @AfterMethod , și astfel va fi executat după ‘myTestMethod’.

Cu toate acestea, „beforeClass” este adnotat cu @Înainte de curs , ceea ce înseamnă că va fi executat chiar înainte de executarea clasei în sine. Numele clasei noastre este aici TestAnnotații , și astfel, înainte ca clasa să înceapă să fie executată, va fi executat fragmentul de cod din „beforeClass”. În mod similar, „afterClass” este adnotat cu @AfterMethod , și astfel vor fi executate după curs TestAnnotații este executat.

Dacă aveți în continuare confuzie cu privire la ordinea de execuție, atunci fragmentul de mai jos vă va ajuta cu siguranță.

1. BeforeSuite 2. BeforeTest 3. BeforeClass 4. BeforeMethod 5. Test 6. AfterMethod 7. AfterClass 8. AfterTest 9. AfterSuite

Ieșirea codului de mai sus va fi:

Această bucată de cod este executată înainte ca clasa să fie executată Această bucată de cod este executată înainte de metoda: - myTestMethod Metodă Inside: - myTestMethod 1493192682118 geckodriver INFO Ascultare pe 127.0.0.1:13676 1493192682713 mozprofile :: profile INFO Folosind calea profilului C: UsersVardhanAppDataLocalTemp ust_moz .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO Pornirea browserului C: Fișiere de program (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO Conectarea la Marionette pe localhost: 59792 [GPU 6152] AVERTISMENT: eroare pipe: 109: /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, linia 346 1493192688316 Marionetă INFO Ascultare pe port 59792 26 aprilie 2017 1:14:49 PM org. openqa.selenium.remote.ProtocolHhandhake createSession INFO: Dialect detectat: Eroare W3C JavaScript: http://t.dtscout.com/i/?l=http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j=, line 1: TypeError: document.getElementsByTagNa eu (...) [0] este nedefinit Selenium Framework | Practiceform 1493192695134 Marionette INFO Noi conexiuni nu vor mai fi acceptate 26 aprilie 2017 13:14:57 org.openqa.selenium.os.UnixProcess destroy SEVERE: Imposibil de a ucide procesul cu PID 6724 Această bucată de cod este executată după metoda: - myTestMethod Această bucată de cod este executată după ce se execută clasa PASSED: myTestMethod =================================== ============ Testare implicită Testele rulate: 1, Eșecuri: 0, Omite: 0 ======================== ======================= ============================ ==================== Suita implicită Total teste efectuate: 1, Eșecuri: 0, Omite: 0 =============== =================================

După cum puteți vedea din rezultatul de mai sus, numărul de teste efectuate este 1 și nu a reușit 0. Aceasta înseamnă că codul are succes. Chiar și ordinea de execuție a metodelor va fi în ordineEumentionat mai devreme.

Când executați acest cod în mașina dvs., Selenium WebDriver vă va instanția browserul Firefox, va naviga la formularul de practică Selenium Framework, va închide instanța browserului și va afișa aceeași ieșire ca în imaginea dvs. Eclipse IDE.

Am folosit doar 5 adnotări diferite în codul meu. Dar există multe alte adnotări care pot fi folosite pentru a controla următoarea metodă de executat. Întreaga listă de adnotări este explicată înmasade mai jos:

@BeforeSuite - Metoda adnotată cu @BeforeSuite va rula înainte ca toate testele din suită să se execute.

@AfterSuite - Metoda adnotată cu @AfterSuite va rula după ce s-au executat toate testele din suită.

@BeforeTest - Metoda adnotată cu @BeforeTest va rula înainte de a rula orice metodă de testare aparținând unei clase.

@AfterTest - Metoda adnotată cu @AfterTest va rula după ce au rulat toate metodele de testare aparținând unei clase.

iso 9000 vs six sigma

@BeforeGroup - Metoda adnotată cu @BeforeGroup va rula înainte ca fiecare grup să fie rulat.

@AfterGroup - Metoda adnotată cu @AfterGroup va rula după ce fiecare grup este rulat.

@Înainte de curs - Metoda adnotată cu @Înainte de curs va rula o dată înainte de a fi invocată prima metodă de testare din clasa curentă.

@După clasa - Metoda adnotată cu @După clasa va rula o dată după ce toate metodele de testare din clasa curentă au rulat.

@BeforeMethod - Metoda adnotată cu @BeforeMethod va rula înainte de a rula orice metodă de testare în cadrul unei clase.

@AfterMethod - Metoda adnotată cu @AfterMethod va rula după ce se execută fiecare metodă de testare din cadrul unei clase.

@Test - Metoda adnotată cu @Test este principala metodă de testare în întregul program. Alte metode adnotate vor fi executate în jurul acestei metode.

Captura de ecran a raportului TestNG esteprezent mai jos: -

Prioritizare

Am vorbit despre modul în care diferite metode care pot fi definite astfel încât să fie executate în jurul @Test metodă. Dar, dacă ai mai multe @Test și doriți să definiți ordinea de execuție între ele?

În acest caz, putemPrioritizați-le atribuind un număr cazurilor de test adnotate. Numărul este mai mic, cu atât prioritatea este mai mare. Prioritatea poate fi atribuită ca parametri în timpul definirii cazurilor de testare. Dar, dacă nu este alocată nicio prioritate, atunci metodele de testare adnotate vor fi executate conform ordinii alfabetice a testelor. Uitați-vă la parametrii adnotărilor de test din partea de mai jos acod.

@Test (Prioritate = 2) public static void FirstTest () {system.out.println ('Acesta este numărul cazului de testare doi din cauza priorității # 2')} @Test (Prioritate = 1) public static void SecondTest () { system.out.println („Acesta este testul numărul unu din cauza priorității nr. 1”)} @Test public static void FinalTest () {system.out.println („Acesta este cazul final al testului, deoarece nu există prioritate” )}}

Dezactivarea cazurilor de testare

Permiteți-mi să vă arăt ceva mai interesant. Ce se întâmplă dacă aveți un cod care acoperă un milion de linii, format din sute de cazuri de testare și doriți să dezactivați o singură metodă de testare? În schimb, nu trebuie să ștergeți nicio parte a codului, putem dezactiva pur și simplu acea metodă de testare.

Faptul de a dezactiva un caz de testare se face și prin intermediul parametrilor. Putem seta activat atribut „fals”. În mod implicit, toate cazurile de testare vor fi activate, prin urmare nu este nevoie să le definim de fiecare dată când scriem un test. Uitați-vă la parametrii celei de-a treia și a patra metode în partea de mai jos acod.

@Test (Prioritate = 2, activat = Adevărat) public static void FirstTest () {system.out.println („Acesta este numărul cazului de testare doi din cauza priorității # 2”)} @Test (Prioritate = 1, activat = Adevărat ) public static void SecondTest () {system.out.println ('Acesta este numărul cazului de testare unu din cauza priorității # 1')} @Test (activat = fals) public static void SkippedTest () {system.out.println ( „Acesta este cazul de test omis, deoarece acesta a fost dezactivat”)} @Test (enabled = True) public static void FinalTest () {system.out.println („Acesta este cazul de test final, care este activat și nu are prioritate ')}

Dependența metodei

Acum, în cazul în care aveți o situație în care doriți ca o bucată de cod să fie executată numai dacă îndeplinește o condiție sau numai dacă o anumită metodă se execută cu succes, atunci putem face acest lucru folosind depindeOnMetodă (). Aceasta este practic o condiție de dependență a metodei în care o metodă va fi executată în funcție de o altă metodă. Dacă stabilim suplimentar întotdeauna aleargă atributul lui true, atunci metoda va fi executată indiferent de condiția fail / pass a metodei în funcție. Uitați-vă la codul din fragmentul de cod de mai jos.

@Test public static void FirstTest () {system.out.println ('Acesta este primul caz de test care se execută')} @Test (depindeOnMetoduri = {'FirstTest'}) public static void SecondTest () {system.out. println ('Acesta este al doilea caz de test care trebuie executat Aceasta este o metodă dependentă')} @Test (DepindeOnMetoduri = {'SecondTest'}) public static void FinalTest () {system.out.println ('Acesta este testul final Cazul va fi executat oricum. ')}

Acum, acest lucru ne duce la un alt aspect important în testadnotări care este Gruparea .

Gruparea

Până acum trebuie să știți că vor exista o serie de metode ca parte a cazului nostru de testare în cod. Să presupunem că există 100 de cazuri de testare, dar vrem să executăm doar 20 de cazuri de testare în următorul nostru test. Crezi că putem face asta? Sigur putem.

Putem folosi grupuri atribut în acest scop. Putem atribui un nume de grup unui număr de cazuri de testare și ulterior alegem să executăm grupul în locul întregului cod. Uitați-vă la fragmentul de cod de mai jos pentru a înțelegecum se creează grupuri.

@Test (groups = {'MyGroup'}) public static void FirstTest () {system.out.println ('Aceasta este o parte a grupului: MyGroup')} @Test (groups = {'MyGroup'}) public static void SecondTest () {system.out.println ('Aceasta este, de asemenea, o parte a grupului: MyGroup')} @Test public static void ThirdTest () {system.out.println ('Dar, aceasta nu face parte din Grup: Grupul meu ')}

Afirmații TestNG

Acest lucru ne duce acum la următorul subiect din TestNG, care este afirmațiile. După cum sugerează și numele, afirmațiile pot fi utilizate în metodele de testare pentru a determina condiția de trecere / eșec a unui test. Pe baza condiției adevărate / false a unei declarații, testele vor trece / eșua.

În codul de mai jos am inclus 3 metode de testare, în care prima și a treia metodă au o condiție de trecere, iar a doua metodă va avea o condiție de eșec. Vedeți codul pentru dvs.

package testng import org.testng.annotations.Test import org.testng.annotations.BeforeMethod import org.openqa.selenium.WebDriver import org.openqa.selenium.firefox.FirefoxDriver import org.testng.Assert import org.testng.annotations.AfterMethod public class Assertions {@BeforeMethod public void beforeMethod () {System.setProperty ('webdriver.gecko.driver', 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} public boolean isEqual (int a, int b) {if (a == b ) {return true} else {return false}} @Test public void testEquality1 () {Assert.assertEquals (true, isEqual (10, 10)) System.out.println ('This is a pass condition')} @Test public void testEquality2 () {Assert.assertEquals (true, isEqual (10, 11)) System.out.println ('This is a fail condition')} @Test public void getTitle () {WebDriver driver = new FirefoxDriver () driver. get ('https://www.gmail.com') String title = driver.getTitle () Assert.assertEquals (title, 'Gmail') System.out.println ('Aceasta este din nou o condiție de trecere')} }

Când priviți raportul generat după această execuție, atunci veți observa că din cele trei teste, unul nu a reușit și două au trecut. Un alt punct important de remarcat este că, atunci când o afirmație eșuează, alte comenzi / linii de cod din testul respectiv vor fi omise. Numai când afirmația este un succes, următoarea linie de cod va fi executată în testul respectiv. Verificați ieșirea de mai jos unde system.out.println a executat numai pentru prima și a treia metodă.

1493277977348 geckodriver INFO Ascultare la 127.0.0.1:47035 1493277977993 mozprofile :: profile INFO Utilizarea căii profilului C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionette INFO x86fox Firefox7 Conectarea la Marionette pe localhost: 50758 [GPU 6920] AVERTISMENT: eroare de țeavă: 109: fișier c: / builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc, linia 346 1493277981742 Marionetă INFO Ascultare pe port 50758 27 apr. 2017 12:56:22 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Dialect detectat: W3C Aceasta este din nou o condiție de trecere Aceasta este o condiție de trecere PASSED: getTitle PASSED: testEquality1 FAILED: testEquality2 java.lang.AssertionError: expected [false] dar găsit [true] la org.testng.Assert.fail (Assert.java:93) la org.testng.Assert.failNotEquals (Assert.java: 512) la org.testng.Assert.assertE qualsImpl (Assert.java:134) la org.testng.Assert.assertEquals (Assert.java:115) la org.testng.Assert.assertEquals (Assert.java:304) la org.testng.Assert.assertEquals (Assert.java : 314) la testng.Assertions.testEquality2 (Assertions.java:38) la sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) la sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) la sun.reflect.DelegatingMethod (Unknown) Sursă) la java.lang.reflect.Method.invoke (Sursă necunoscută) la org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) la org.testng.internal.Invoker.invokeMethod (Invoker.java:661) la org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) la org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) la org.testng.internal.TestMethodWorker.invokeTestMethods (Test) ) la org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) la org.testng.TestRunner.privateRun (TestRunner.java:744) la org.testng.TestRu nner.run (TestRunner.java:602) la org.testng.SuiteRunner.runTest (SuiteRunner.java:380) la org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) la org.testng.SuiteRunner.privateRun (SuiteRunner .java: 340) la org.testng.SuiteRunner.run (SuiteRunner.java:289) la org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) la org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) la org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) la org.testng.TestNG.runSuitesLocally (TestNG.java:1226) la org.testng.TestNG.runSuites (TestNG.java:1144) la org.test. TestNG.run (TestNG.java:1115) la org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) la org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) la org.test .RemoteTestNG.main (RemoteTestNG.java:76) ======================================= ======== Test implicit Testele rulate: 3, Eșecuri: 1, Salturi: 0 ============================= =================== ================================ ================ Set implicit Total teste rulate: 3, Eșecuri: 1, Omite: 0 =================================== ============

Deci, acesta este sfârșitul conceptelor legate de testarea gestionării cazurilor. Ne-a rămas încă un subiect, și anume generarea de rapoarte. Generarea de rapoarte este ultimul subiect din acest tutorial Selenium WebDriver deoarece rapoartele pot fi generate numai după toatetestele sunt executate.

tutorial Microsoft SQL Server pentru începători

Generarea de rapoarte

Cel mai important lucru pe care trebuie să-l rețineți este că raportul va fi generat numai printr-un fișier .xml. Aceasta înseamnă, fie că este o metodă, fie că este o clasă, fie că este un grup pe care doriți să-l testați, toate trebuie specificate în fișierul .xml.

Așadar, mai întâi puteți crea un folder nou în cadrul proiectului dvs. și puteți crea un fișier nou în acel folder și dați un nume fișierului și salvați-l cu extensia .xml. Puteți crea noul dosar și fișier făcând clic dreapta pe exploratorul de pachete. După ce ați creat fișierul, accesați fila sursă din partea de jos a ferestrei și introduceți configurațiile așa cum se specifică în fragmentul de mai jos.

 

Prima linie este definiția tipului de document XML. Acest lucru este standard și obligatoriu pentru toate rapoartele de testare. Dar, celelalte linii sunt destul de explicative. Am folosit etichetele deschise pentru suită, test, clase și clasă. Eticheta de clase poate avea una sau mai multe clase în ea. Astfel, poate fi folosit dacă dorim să generăm un raport în care testăm mai multe clase. Acest lucru este util mai ales pentru dezvoltatorii care doresc să testeze o bucată lungă de cod.

Revenind oricum la raportul nostru, puteți denumi fiecare suită sau test sau clasă după deschiderea acelor etichete și nu uitați să închideți fiecare etichetă pe care o deschideți. Mi-am dat numele suitei ca TestNGs , numele testului ca Test Adnotări și numele clasei ca testng.TestAnnotations. Rețineți că numele clasei este în formatul ' pachet.nume.clasă ” .

Când rulați acest fișier ca suită TestNG, execuția va începe și veți primi rapoarte detaliate de testare. Veți obține rezultatul testului în fila consolă și rezultatul suitei de testare în fila următoare. Raportul pe care l-am generat pentru executarea codului meu esteîncaptura de ecran de mai jos. Veți observa că de data aceasta există un nume de suită, un nume de test, un nume de clasă, împreună cu timpul necesar pentru executarea fiecăruia dintre ele.

În cazul în care doriți să vizualizați raportul HTML (Raport index sau Raport trimis prin e-mail), puteți accesa test-ieșire folder din directorul proiectului din spațiul dvs. de lucru. Dând clic pe ele, puteți vizualiza rapoartele chiar și într-un moment ulterior. Mai jos sunt capturile de ecran ale acestora.

Raport index : -

Raport trimis prin e-mail : -

Deci, asta ne aduce la sfârșitul acestui blog tutorial Selenium WebDriver. Este timpul să configurați eclipsa la finalul dvs., să instalați diferitele pachete Selenium, să instalați TestNG și să începeți cu scrierea cazurilor de testare.

Puteți consulta videoclipul de mai jos pentru programul Selenium WebDriver pentru a asista la o demonstrație a diferitelor concepte explicate în acest blog.

Antrenament cu seleniu Cadrul TestNG pentru seleniu | Edureka

Acest videoclip Edureka Selenium Training vă va conduce prin detaliile detaliate ale Selenium WebDriver. Acest video tutorial Selenium este ideal atât pentru începători, cât și pentru profesioniștii care doresc să analizeze elementele de bază ale comenzilor WebDriver și să afle cum TestNG poate fi utilizat cu Selenium pentru gestionarea diferitelor cazuri de testare.

Dacă doriți să învățați seleniul și să construiți o carieră în domeniul testării, consultați interactivul nostru live-online aici, acesta vine cu suport 24 * 7 pentru a vă ghida pe toată perioada de învățare.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii și vă vom răspunde.