Selenium WebDriver: TestNG Para sa Pamamahala ng Kaso sa Pagsubok at Pagbuo ng Ulat



Ang tutorial ng Selenium WebDriver na ito ay makakatulong sa iyo na maunawaan ang pangangailangan na gamitin ang TestNG kasama ang Selenium para sa pamamahala ng mga kaso sa pagsubok at pagbuo ng detalyadong mga ulat sa pagsubok.

Sa nakaraang blog, itinuro ko sa iyo kung paano patakbuhin ang iyong unang pagsubok sa Selenium WebDriver. Sa blog na ito, sasakupin ko ang mga advanced na konsepto ng Selenium WebDriver. Nabanggit ko nang ilang beses na ang Selenium WebDriver ay may mga limitasyon na patungkol sa pagsubok ng pamamahala ng kaso at pagbuo ng ulat ng pagsubok. Kaya, ano ang kahalili? Ang isang kasangkapan na kasikatan ng Selenium ay dapat na mayroong isang pag-areglo di ba? Syempre ginagawa! Maaari naming gamitin ang isang kumbinasyon ng Selenium at TestNG upang talunin ang limitasyong ito at iyon ang magiging paksa ng talakayan ng blog na ito.

ang java na nagko-convert ng binary sa decimal

Kung sakali, bago ka sa Selenium, at nais ng pagpapakilala sa mga pangunahing konsepto, maaari mong simulan ang iyong paglalakbay mula rito: ? Gayunpaman, ang iba ay maaaring magsimula sa TestNG para sa Selenium mula sa blog na ito.Dapat mo ring malaman na ang mga samahan ay aktibong nangangaso para sa mga propesyonal , Ginagawa itong isang mahalagang kasanayan para sa master ng software testers.





Ang mga tagabuo ng software mula sa buong mundo ay lubos na nagkakasundo na ang pagsulat ng code sa mga kaso ng pagsubok ay nakakatipid ng isang mahusay na bahagi ng kanilang oras ng pag-debug. Bakit? Iyon ay dahil ang mga kaso ng pagsubok ay makakatulong sa paglikha ng matatag at walang error na code. Paano ito nagagawa? Sa pamamagitan ng paghiwa-hiwalay ng buong code sa mas maliit na mga kaso ng pagsubok, at pagkatapos ay sa pamamagitan ng pagsusuri ng bawat isa sa mga kaso ng pagsubok na ito upang pumasa / mabigo ang mga kundisyon, makakalikha kami ng code na walang error. Dahil hindi sinusuportahan ng Selenium ang pagpapatupad ng code sa mga kaso ng pagsubok, kailangan naming gamitin ang TestNG para sa pareho. Dito umaangkop ang TestNG sa balangkas ng Selenium.

PagsubokNG ibig sabihin Subukan ang Susunod na Henerasyon at ito ay isang open-source test automation framework na inspirasyon ng JUnit at NUnit. Sa gayon, hindi lamang inspirasyon, ngunit isang pag-upgrade sa dalawang balangkas na iyon. Kaya maaari mong tanungin kung ano ang pag-upgrade dito?Ang pag-upgrade sa TestNG ay, nagbibigay ito ng karagdagang pag-andar tulad ng: mga anotasyon sa pagsubok, pagpapangkat, pagpapasasa, parameterization at mga diskarte sa pagsunud-sunod sa code na kung saan ay hindi posible nang mas maaga.



Bukod sa pamamahala ng mga kaso sa pagsubok, kahit na ang detalyadong mga ulat ng mga pagsubok ay maaaring makuha sa pamamagitan ng paggamit ng TestNG. Magkakaroon ng isang buod na nagpapakita ng kaso ng pagsubok na nabigo, kasama ang pangkat kung saan ito bahagi, at ang klase na nahuhulog sa ilalim nito. Kapag ang mga bug ay maaaring tumpak na matatagpuan tulad nito, maaari silang maayos agad sa kaluwagan ng mga developer. Inilalarawan ng larawan sa ibaba ang pagtatrabaho ng TestNG.

testng - selenium webdriver

Kaya, paano nakukuha ng TestNG ang trabaho? Ang katanungang ito ay sasagutin saang susunod na seksyon ng Selenium WebDriver tutorial blog na ito, kung saan tatalakayin ko kung paano pamahalaan ang iba't ibang mga kaso ng pagsubok sa pamamagitan ng paggamit ng TestNG.



Selenium WebDriver Sa TestNG

Ang mga kaso ng pagsubok ay maaaring tukuyin at pamahalaan ng isa sa mga sumusunod na paraan:

  1. Pagsubok Mga Anotasyon
  2. Prioritization
  3. Hindi Pinapagana ang Mga Kaso sa Pagsubok
  4. Pagsalig sa Paraan
  5. Pagpapangkat
  6. Mga Pahayag
  7. Pag-uulat ng Henerasyon

Hayaan mo akong magsimulang magpaliwanagbawat isa sa mga pagpapaandar na ito.

Pagsubok Mga Anotasyon

Una sa lahat, tanungin natin ang ating sarili sa katanungang ito: Bakit kailangan nating gumamit ng mga anotasyon? Kailan natin magagamit ang mga ito? Ginagamit ang mga anotasyon sa Selenium upang makontrol ang susunod na pamamaraan na naisakatuparan. Ang mga anotasyon sa pagsubok ay tinukoy bago ang bawat pamamaraan sa test code. Kung sakaling ang anumang pamamaraan ay hindi pauna sa mga anotasyon, kung gayon ang pamamaraan na iyon ay hindi papansinin at hindi papatayin bilang bahagi ng test code. Upang tukuyin ang mga ito, ang mga pamamaraan ay kailangang simpleng i-annotate ng ‘ @Pagsusulit ‘. Tingnan ang snippet ng code sa ibaba halimbawa.

pag-import ng package ng pag-import ng org.openqa.selenium.WebDriver import org.openqa.selenium.fireox.FireoxDriver import org.testng.annotations. Pagkatapos ng ClassClass import org.testng.annotations. AfterMethod import org.testng.annotations.BeforeClass import org.testng.annotations .BagoMethod mag-import ng org.testng.annotations. Subukan ang pampublikong klase ng 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 ang piraso ng code ay naisakatuparan bago ang pamamaraan: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod publiko walang bisa pagkataposMethod () {System.out.println (' Ang piraso na ito ng code ay naisakatuparan pagkatapos ng pamamaraan: - myTestMethod ')} @BeforeClass publiko walang bisa bagoClass () {Syste m.out.println ('Ang piraso ng code na ito ay naisakatuparan bago ang klase ay naisakatuparan')} @AfterClass public void afterClass () {System.out.println ('Ang piraso ng code na ito ay naisakatuparan pagkatapos maipatupad ang klase')} }

Sa code sa itaas, mapapansin mo na hindi ko natukoy ang isang 'pangunahing' pamamaraan. Gayunpaman, mayroon akong 5 iba pang mga pamamaraan na tinukoy. Ang mga ito ay 'myTestMethod', 'beforeMethod', 'afterMethod', 'beforeClass' at 'afterClass'. Gayundin, tandaan ang pagkakasunud-sunod ng kahulugan ng mga pamamaraan sa code dahil hindi sila naisasagawa sa parehong pagkakasunud-sunod na ito.

Ang pamamaraang 'myTestMethod' ay na-annotate sa @Pagsusulit , at ito ang pangunahing pamamaraan o piraso ng code na kailangang maipatupad. Ang iba pang mga anotadong pamamaraan ay naisasagawa bago at pagkatapos ng pamamaraang ito ay naisakatuparan. Dahil ang ‘beforeMethod’ ay na-annotate sa @BeforeMethod , papatayin ito bago pa maisagawa ang ‘myTestMethod’. Katulad nito, ang 'afterMethod' ay na-annotate sa @AfterMethod , at sa gayon ito ay naisasagawa pagkatapos ng 'myTestMethod'.

Gayunpaman, ang 'bago angClass' ay na-annotate sa @Bago mag klase , na nangangahulugang ito ay papatayin bago pa man ang klase mismo ay maipatupad. Ang pangalan namin ng klase dito Mga Pagsusulit sa Pagsubok , at sa gayon bago magsimulang maipatupad ang klase, ang piraso ng code sa loob ng 'beforeClass' ay papatayin. Katulad nito, ang 'afterClass' ay na-annotate sa @AfterMethod , at sa gayon ay papatayin pagkatapos ng klase Mga Pagsusulit sa Pagsubok ay pinaandar.

Kung mayroon ka pa ring pagkalito tungkol sa pagkakasunud-sunod ng pagpapatupad, kung gayon ang snippet sa ibaba ay tiyak na makakatulong sa iyo.

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

Ang output ng code sa itaas ay magiging:

Ang piraso ng code na ito ay naisagawa bago ang klase ay naisagawa Ang piraso ng code na ito ay naisagawa bago ang pamamaraan: - myTestMethod Inside method: - myTestMethod 1493192682118 geckodriver INFO Pakikinig sa 127.0.0.1:13676 1493192682713 mozprofile :: profile INFO Paggamit ng path ng profile C: UsersVardhanAppDataLocalpremp ust_moz .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO Simula browser C: Program Files (x86) Mozilla Firefoxireoks.exe 1493192682729 geckodriver :: marionette INFO Kumokonekta sa Marionette sa localhost: 59792 [GPU 6152] WARNING: error sa tubo: 109: file c: / build /moz2_slave/m-rel-w32-00000000000000000000/ build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc, linya 346 1493192688316 Marionette INFO Pakikinig sa port 59792 Abril 26, 2017 1:14:49 PM org. openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C JavaScript error: http://t.dtscout.com/i/?l=http%3A%2F%2Fwww.seleniumframework.com%2FPracticeform%2F&j=, line 1: TypeError: document.getE ElementByTagNa ako (...) [0] ay hindi natukoy na Selenium Framework | Practiceform 1493192695134 Marionette INFO Ang mga bagong koneksyon ay hindi na tatanggapin Abril 26, 2017 1:14:57 PM org.openqa.selenium.os.UnixProcess sirain ang SEVERE: Hindi mapapatay ang proseso sa PID 6724 Ang piraso ng code na ito ay naisakatuparan pagkatapos ng pamamaraan: - myTestMethod Ang piraso ng code na ito ay naisakatuparan pagkatapos na maipatupad ang klase: myTestMethod =================================== ============ Ang default na mga pagsubok sa pagsubok ay tumatakbo: 1, Mga Pagkabigo: 0, Mga Laktawan: 0 ==================== ==== ==== =================== Default na suite Kabuuang pagpapatakbo ng mga pagsubok: 1, Mga Pagkabigo: 0, Mga Laktawan: 0 ==== =________________________________________

Tulad ng nakikita mo mula sa output sa itaas, ang bilang ng mga pagsubok na tatakbo ay 1 at nabigo ay 0. Nangangahulugan ito na ang code ay matagumpay. Kahit na ang pagkakasunud-sunod ng pagpapatupad ng mga pamamaraan ay magkakasunud-sunodAkomga naunang nabanggit.

Kapag naipatupad mo ang code na ito sa iyong machine, isasagawa ng Selenium WebDriver ang iyong browser sa Firefox, mag-navigate sa form ng kasanayan sa Selenium Framework, isara ang halimbawa ng browser at ipakita ang parehong output tulad ng ipinakita sa itaas sa iyong Eclipse IDE.

Gumamit lang ako ng 5 magkakaibang anotasyon sa aking code. Ngunit maraming iba pang mga anotasyon na maaaring magamit upang makontrol ang susunod na pamamaraan na naisakatuparan. Ang buong listahan ng mga anotasyon ay ipinaliwanag samesasa ibaba:

@BeforeSuite - Ang pamamaraan na na-annotate sa @BeforeSuite tatakbo bago ang lahat ng mga pagsubok sa suite ay tumakbo.

@AfterSuite - Ang pamamaraan na na-annotate sa @AfterSuite tatakbo pagkatapos na tumakbo ang lahat ng mga pagsubok sa suite.

@BeforeTest - Ang pamamaraan na na-annotate sa @BeforeTest tatakbo bago ang anumang paraan ng pagsubok na pagmamay-ari ng isang klase ay pinatakbo.

@AfterTest - Ang pamamaraan na na-annotate sa @AfterTest tatakbo pagkatapos na tumakbo ang lahat ng mga pamamaraan sa pagsubok na kabilang sa isang klase.

@BeforeGroup - Ang pamamaraan na na-annotate sa @BeforeGroup tatakbo bago tumakbo ang bawat pangkat.

@AfterGroup - Ang pamamaraan na na-annotate sa @AfterGroup tatakbo pagkatapos ng bawat pangkat ay pinatakbo.

@Bago mag klase - Ang pamamaraan na na-annotate sa @Bago mag klase tatakbo nang isang beses bago ang unang pamamaraan ng pagsubok sa kasalukuyang klase ay naaplay.

@Pagkatapos ng klase - Ang pamamaraan na na-annotate sa @Pagkatapos ng klase tatakbo nang isang beses matapos ang lahat ng mga pamamaraan ng pagsubok sa kasalukuyang klase ay tumakbo.

@BeforeMethod - Ang pamamaraan na na-annotate sa @BeforeMethod tatakbo bago magpatakbo ng anumang paraan ng pagsubok sa loob ng isang klase.

@AfterMethod - Ang pamamaraan na na-annotate sa @AfterMethod tatakbo pagkatapos ng bawat pamamaraan ng pagsubok sa loob ng isang klase ay pinatakbo.

@Pagsusulit - Ang pamamaraan na na-annotate sa @Pagsusulit ay ang pangunahing paraan ng pagsubok sa buong programa. Ang iba pang mga anotadong pamamaraan ay papatayin sa paligid ng pamamaraang ito.

Ang screenshot ng ulat ng TestNG aynaroroon sa ibaba: -

Prioritization

Pinag-usapan namin ang tungkol sa kung paano magkakaiba ang mga pamamaraan na maaaring tukuyin na naisakatuparan sa paligid ng @Pagsusulit paraan Ngunit, paano kung mayroon kang higit sa isa @Pagsusulit pamamaraan at nais mong tukuyin ang order ng pagpapatupad sa pagitan nila?

Sa kasong iyon, kaya natinPgawing muli ang mga ito sa pamamagitan ng pagtatalaga ng isang numero sa mga naitalang mga kaso ng pagsubok. Mas maliit ang bilang, mas mataas ang priyoridad. Ang priyoridad ay maaaring italaga bilang mga parameter habang tinutukoy ang mga kaso ng pagsubok. Ngunit, kung walang nakatalagang priyoridad, ang mga na-anotadong pamamaraan ng pagsubok ay papatayin ayon sa pagkakasunud-sunod ng alpabetikong mga pagsubok. Tingnan ang mga parameter ng mga anotasyon ng pagsubok sa ibabang piraso ngcode

ano ang pinakamahusay na java ide
@Test (Priority = 2) public static void FirstTest () {system.out.println ('Ito ang Kaso ng Pagsubok bilang Pangalawang dahil sa Priority # 2')} @Test (Priority = 1) public static void SecondTest () { system.out.println ('Ito ang numero ng Kaso ng Pagsubok dahil sa Priority # 1')} @Test sa publiko static na walang bisa FinalTest () {system.out.println ('Ito ang Pangwakas na Kaso sa Pagsubok dahil walang Priority' )}

Hindi Pinapagana ang Mga Kaso sa Pagsubok

Hayaan mo akong ipakita sa iyo ang isang bagay na mas kawili-wili. Paano kung mayroon kang isang code na sumasaklaw sa isang milyong mga linya, na binubuo ng daan-daang mga kaso ng pagsubok, at nais mo lamang hindi paganahin ang isang paraan ng pagsubok? Hindi mo kailangang tanggalin ang anumang bahagi ng code, sa halip, maaari lamang naming hindi paganahin ang pamamaraang pagsubok.

Ang pagkilos ng hindi pagpapagana ng isang kaso ng pagsubok ay ginagawa rin sa pamamagitan ng mga parameter. Maaari nating itakda ang pinagana katangian sa 'hindi totoo'. Bilang default, paganahin ang lahat ng mga kaso ng pagsubok, kaya't hindi namin kailangang tukuyin ang mga ito sa tuwing nagsusulat kami ng isang pagsubok. Tingnan ang mga parameter ng pangatlo at pang-apat na pamamaraan sa ibabang piraso ngcode

Ang @Test (Priority = 2, pinagana = True) pampublikong static na walang bisa FirstTest () {system.out.println ('Ito ang Kaso ng Pagsubok bilang dalawa dahil sa Priority # 2')} @Test (Priority = 1, pinagana = True ) public static void SecondTest () {system.out.println ('Ito ang Kaso ng Pagsubok numero uno dahil sa Priority # 1')} @Test (pinagana = false) public static void SkippedTest () {system.out.println ( 'Ito ang Laktawan na Kaso sa Pagsubok sapagkat ito ay hindi pinagana')} @Test (pinagana = Totoo) publiko static na walang bisa FinalTest () {system.out.println ('Ito ang Pangwakas na Kaso sa Pagsubok, na pinagana at walang Priority ')}

Pagsalig sa Paraan

Ngayon kung sakaling mayroon kang isang sitwasyon kung saan, nais mo ang isang piraso ng code na naisakatuparan lamang kung nasisiyahan nito ang isang kundisyon o kung ang isang partikular na pamamaraan ay matagumpay na naisakatuparan, maaari nating gawin iyon sa pamamagitan ng paggamit ng nakasalalayOnMethod (). Karaniwan ito ay isang kundisyon ng pagtitiwala sa pamamaraan kung saan ang isang pamamaraan ay papatayin depende sa ibang pamamaraan. Kung karagdagang itinakda namin palagingRun ang katangiang totoo, kung gayon ang pamamaraan ay naisasagawa nang hindi alintana ang pagkabigo / pumasa sa kundisyon ng nakasalalay na pamamaraan. Tingnan ang code sa snippet ng code sa ibaba.

@Test public static void FirstTest () {system.out.println ('Ito ang unang Kaso ng Pagsubok na naisakatuparan')} @Test (dependOnMethods = {'FirstTest'}) pampublikong static na walang bisa SecondTest () {system.out. println ('Ito ang ikalawang Kaso ng Pagsubok na naisasagawa Ito ay isang Dependent na paraan')} @Test (dependOnMethods = {'SecondTest'}) publiko static void FinalTest () {system.out.println ('Ito ang Pangwakas na Pagsubok Kaso Ito ay papatayin pa rin. ')}

Ngayon, dadalhin tayo nito sa isa pang mahalagang aspeto sa pagsubokanotasyon na kung saan ay Pagpapangkat .

Pagpapangkat

Sa ngayon dapat mong malaman na magkakaroon ng isang bilang ng mga pamamaraan bilang bahagi ng aming kaso sa pagsubok sa code. Sabihin nating mayroong 100 mga kaso sa pagsubok ngunit, nais naming magpatupad lamang ng 20 mga kaso ng pagsubok sa aming susunod na pagsubok. Sa palagay mo magagawa natin iyon? Sure kaya natin.

Pwede natin gamitin mga pangkat katangian para sa hangaring ito. Maaari kaming magtalaga ng isang pangalan ng pangkat sa isang bilang ng mga kaso ng pagsubok at sa paglaon ay pipiliing ipatupad ang pangkat sa halip na ang buong code. Tingnan ang snippet ng code sa ibaba upang maunawaankung paano lumikha ng mga pangkat.

@Test (Groups = {'MyGroup'}) pampublikong static na walang bisa FirstTest () {system.out.println ('Ito ay bahagi ng Pangkat: MyGroup')} @Test (mga grupo = {'MyGroup'}) pampubliko na static void SecondTest () {system.out.println ('Ito ay bahagi rin ng Pangkat: MyGroup')} @Test sa publiko static na walang bisa ThirdTest () {system.out.println ('Ngunit, hindi ito bahagi ng Pangkat: MyGroup ')}

Mga Pahiwatig ng TestNG

Dadalhin kami nito sa susunod na paksa sa TestNG na kung saan ay assertions. Tulad ng ipinahihiwatig ng pangalan, maaaring magamit ang mga assertion sa mga pamamaraan ng pagsubok upang matukoy ang pass / fail na kondisyon ng isang pagsubok. Batay sa totoo / maling kondisyon ng isang pahayag, ang mga pagsubok ay lilipas / mabibigo.

Sa code sa ibaba ay nagsama ako ng 3 mga pamamaraan sa pagsubok, kung saan ang una at pangatlong pamamaraan ay may kondisyon na pumasa at ang pangalawang pamamaraan ay magkakaroon ng pagkabigo na kondisyon. Tingnan ang code para sa iyong sarili.

pakete ng pagsubok sa pag-import ng org.testng.annotations. Subukan ang pag-import ng org.testng.annotations. BagoMethod import org.openqa.selenium. WebDriver import org.openqa.selenium.fireoks. mga publikong Assertions ng klase {@BeforeMethod public void beforeMethod () {System.setProperty ('webdriver.gecko.driver', 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} pampublikong boolean isEqual (int a, int b) {kung (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. kumuha ('https://www.gmail.com') String title = driver.getTitle () Assert.assertEquals (pamagat, 'Gmail') System.out.println ('Ito ay muling isang kondisyon ng pass')} }

Kapag tiningnan mo ang ulat na nabuo pagkatapos ng pagpapatupad na ito, mapapansin mo na mula sa tatlong pagsubok, isa ang nabigo at dalawa ang nakapasa. Ang isa pang mahalagang puntong dapat tandaan ay kapag nabigo ang isang assertion, ang iba pang mga utos / linya ng code sa pagsubok na iyon ay lalaktawan. Lamang kapag ang assertion ay isang tagumpay, ang susunod na linya ng code ay naisakatuparan sa pagsubok na iyon. Suriin ang output sa ibaba kung saan system.out.println ay pinaandar lamang para sa una at pangatlong pamamaraan.

1493277977348 geckodriver INFO Pakikinig sa 127.0.0.1ekolu7035 1493277977993 mozprofile :: profile INFO Paggamit ng path ng profile C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver :: marionette Programa Firefox9 Pagkonekta sa Marionette sa localhost: 50758 [GPU 6920] WARNING: error sa tubo: 109: file c: / builds / moz2_slave / m-rel-w32-00000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win. cc, linya 346 1493277981742 Marionette INFO Pakikinig sa port 50758 Apr 27, 2017 12:56:22 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C Ito ay muling isang kondisyon ng pass Ito ay isang pass condition na PASSED: getTitle PASSED: testEquality1 FAILED: testEquality2 java.lang.AssertionError: inaasahan [false] ngunit nahanap ang [true] sa org.testng.Assert.fail (Assert.java:93) sa org.testng.Assert.failNotEquals (Assert.java: 512) sa org.testng.Assert.assertE qualsImpl (Assert.java134) sa org.testng.Assert.assertEquals (Assert.java 115) sa org.testng.Assert.assertEquals (Assert.java:304) sa org.testng.Assert.assertEquals (Assert.java : 314) at testng.Assertions.testEquality2 (Assertions.java:38) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) sa sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) sa sun.reflect.DelegatingMethodAinvideo Pinagmulan) sa java.lang.reflect.Method.invoke (Hindi Kilalang Pinagmulan) sa org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) sa org.testng.internalInvoker.invokeMethod (Invoker.java:661) sa org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) sa org.testng.internal.Invoker.invokeTestMethods (Invoker.java Sampo193) sa org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java ) sa org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) sa org.testng.TestRunner.privateRun (TestRunner.java:744) sa org.testng.TestRu nner.run (TestRunner.java:602) sa org.testng.SuiteRunner.runTest (SuiteRunner.javaamihan80) sa org.testng.SuiteRunner.runSequentially (SuiteRunner.java biasana75) sa org.testng.SuiteRunner.privateRun (SuiteRunner .java: 340) sa org.testng.SuiteRunner.run (SuiteRunner.java 289) sa org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) sa org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) sa org.testng.TestNG.runSuitesSequentially (TestNG.java semana301) sa org.testng.TestNG.runSuitesLocally (TestNG.java:1226) sa org.testng.TestNG.runSuites (TestNG.java semana144) sa org.testng. TestNG.run (TestNG.javaubre115) sa org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java 132) sa org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.javaitrato30) sa org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) =________________________________________ ==== Tumatakbo ang mga default na pagsubok sa pagsubok: 3, Mga Pagkabigo: 1, Mga Laktawan: 0 =________________________________________ =================== =________________________________________ ==== Default na suite Kabuuang pagpapatakbo ng mga pagsubok: 3, Mga pagkabigo: 1, Mga Laktawan: 0 =________________________________________ ====

Kaya, iyon ang pagtatapos ng mga konsepto na nauugnay sa pagsubok ng pamamahala ng kaso. Naiwan kaming may isa pang paksa, at iyon ang pagbuo ng ulat. Ang pagbuo ng ulat ay ang huling paksa sa tutorial ng Selenium WebDriver na ito dahil ang mga ulat ay maaaring mabuo lamang pagkatapos ng lahat ngang mga pagsubok ay naisakatuparan.

pagsusulat ng isang interpreter sa java

Pag-uulat ng Henerasyon

Ang pinakamahalagang bagay na kailangan mong tandaan ay ang ulat ay mabubuo lamang sa pamamagitan ng isang .xml file. Nangangahulugan ito, maging isang pamamaraan, o maging isang klase, o maging isang pangkat na nais mong subukan, lahat sila ay dapat na tukuyin sa .xml file.

Kaya unang maaari kang lumikha ng isang bagong folder sa ilalim ng iyong proyekto, at lumikha ng isang bagong file sa loob ng folder na iyon at magbigay ng isang pangalan sa file at i-save ito sa .xml extension. Maaari kang lumikha ng bagong folder at file sa pamamagitan ng pag-right click sa package explorer. Sa sandaling nalikha mo ang file, pumunta sa tab na mapagkukunan mula sa ilalim ng window at ipasok ang mga pagsasaayos na tinukoy sa snippet sa ibaba.

 

Ang unang linya ay ang kahulugan ng uri ng dokumento ng XML. Ito ay pamantayan at sapilitan para sa lahat ng mga ulat sa pagsubok. Ngunit, ang iba pang mga linya ay medyo nagpapaliwanag sa sarili. Ginamit ko ang mga bukas na tag para sa suite, pagsubok, mga klase at klase. Ang tag ng mga klase ay maaaring magkaroon ng isa o higit pang klase sa loob nito. Sa gayon, maaari itong magamit kung nais naming makabuo ng isang ulat kung saan sinusubukan namin ang maraming klase. Ito ay madaling gamiting lalo na para sa mga developer na nais na subukan ang isang mahabang piraso ng code.

Gayunpaman pagbalik sa aming ulat, maaari mong pangalanan ang bawat suite o pagsubok o klase pagkatapos buksan ang mga tag na iyon at tandaan na isara ang bawat tag na iyong bubuksan. Ibinigay ko ang pangalan ng aking suite bilang Mga TestNG , pangalan ng pagsubok bilang Pagsusulit Mga Annotasyon at pangalan ng klase bilang testng.TestAnnotations. Tandaan na ang pangalan ng klase ay nasa format ng ' packagename.classname ’ .

Kapag pinatakbo mo ang file na ito bilang suite ng TestNG, magsisimula ang pagpapatupad at makakakuha ka ng mga detalyadong ulat sa pagsubok. Makukuha mo ang output output sa iyong tab na console at ang resulta ng test suite sa susunod na tab. Ang ulat na aking nabuo para sa pagpapatupad ng aking code aysaang screenshot sa ibaba. Mapapansin mo na sa oras na ito, mayroong isang pangalan ng suite, pangalan ng pagsubok, pangalan ng klase kasama ang oras na ginugol para sa pagpapatupad ng bawat isa sa kanila.

Kung sakaling nais mong tingnan ang ulat ng HTML (Ulat sa index o I-email na ulat), maaari kang pumunta sa pagsubok-output folder sa loob ng direktoryo ng proyekto sa iyong workspace. Sa pamamagitan ng pag-click sa kanila, maaari mong tingnan ang mga ulat kahit sa ibang oras ng oras. Nasa ibaba ang kanilang mga screenshot.

Ulat sa Index : -

Nai-email na Ulat : -

Kaya't dadalhin tayo nito sa pagtatapos ng Selenium WebDriver tutorial blog na ito. Panahon na para sa iyo upang mag-setup ng eklipse sa iyong dulo, i-install ang iba't ibang mga package ng Selenium, i-install ang TestNG at magsimula sa pagsusulat ng iyong mga kaso sa pagsubok.

Maaari mong suriin sa ibaba ang video ng tutorial na Selenium WebDriver upang masaksihan ang isang pagpapakita ng iba't ibang mga konsepto na ipinaliwanag sa blog na ito.

Pagsasanay sa Selenium | Framework ng TestNG Para sa Selenium | Edureka

Dadalhin ka ng video ng Edureka Selenium Training na ito sa malalim na mga detalye ng Selenium WebDriver. Ang video ng tutorial na Selenium na ito ay perpekto para sa parehong mga nagsisimula at propesyonal na nais na palayawin ang mga pangunahing kaalaman ng mga utos ng WebDriver at alamin kung paano magagamit ang TestNG sa Selenium para sa pamamahala ng iba't ibang mga kaso ng pagsubok.

Kung nais mong malaman ang Selenium at bumuo ng isang karera sa domain ng pagsubok, pagkatapos suriin ang aming interactive, live-online dito, kasama yan ng 24 * 7 na suporta upang gabayan ka sa buong panahon ng iyong pag-aaral.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento at babalikan ka namin.