Selenium WebDriver: TestNG สำหรับการจัดการกรณีทดสอบและการสร้างรายงาน



บทช่วยสอน Selenium WebDriver นี้จะช่วยให้คุณเข้าใจถึงความจำเป็นในการใช้ TestNG กับซีลีเนียมในการจัดการกรณีทดสอบและสร้างรายงานการทดสอบโดยละเอียด

ในบล็อกก่อนหน้านี้ฉันได้สอนวิธีเรียกใช้การทดสอบ Selenium WebDriver ครั้งแรกของคุณ ในบล็อกนี้ฉันจะพูดถึงแนวคิด Selenium WebDriver ขั้นสูง ฉันได้พูดถึงหลายครั้งแล้วว่า Selenium WebDriver มีข้อ จำกัด เกี่ยวกับการจัดการกรณีทดสอบและการสร้างรายงานการทดสอบ ทางเลือกคืออะไร? เครื่องมือที่ได้รับความนิยมอย่าง Selenium ต้องมีวิธีแก้ปัญหาอย่างแน่นอนใช่หรือไม่? แน่นอน! เราสามารถใช้ซีลีเนียมและ TestNG ร่วมกันเพื่อเอาชนะข้อ จำกัด นี้และนั่นจะเป็นหัวข้อของการสนทนาของบล็อกนี้

เปลี่ยนสตริงเป็นอาร์เรย์ php

ในกรณีที่คุณยังใหม่กับซีลีเนียมและต้องการข้อมูลเบื้องต้นเกี่ยวกับแนวคิดพื้นฐานคุณสามารถเริ่มต้นการเดินทางได้จากที่นี่: เหรอ? อย่างไรก็ตามคนอื่น ๆ สามารถเริ่มต้นใช้งาน TestNG สำหรับซีลีเนียมได้จากบล็อกนี้คุณควรทราบด้วยว่าองค์กรต่างๆกำลังตามล่าหาผู้เชี่ยวชาญด้วย ทำให้เป็นทักษะที่สำคัญสำหรับผู้ทดสอบซอฟต์แวร์ที่ต้องเชี่ยวชาญ





นักพัฒนาซอฟต์แวร์จากทั่วโลกจะยอมรับเป็นเอกฉันท์ว่าการเขียนโค้ดในกรณีทดสอบช่วยประหยัดเวลาในการแก้ไขข้อบกพร่องได้ดี ทำไม? นั่นเป็นเพราะกรณีทดสอบช่วยในการสร้างรหัสที่แข็งแกร่งและปราศจากข้อผิดพลาด มันทำได้อย่างไร? การแบ่งโค้ดทั้งหมดออกเป็นกรณีทดสอบเล็ก ๆ จากนั้นโดยการประเมินแต่ละกรณีการทดสอบเหล่านี้ว่าผ่าน / ไม่ผ่านเงื่อนไขเราสามารถสร้างโค้ดที่ปราศจากข้อผิดพลาดได้ เนื่องจากซีลีเนียมไม่รองรับการเรียกใช้โค้ดในกรณีทดสอบเราจึงต้องใช้ TestNG สำหรับสิ่งเดียวกัน นี่คือจุดที่ TestNG เหมาะกับกรอบ Selenium

TestNG หมายถึง ทดสอบรุ่นต่อไป และเป็นกรอบการทดสอบอัตโนมัติแบบโอเพนซอร์สที่ได้รับแรงบันดาลใจจาก JUnit และ NUnit ไม่ใช่แค่แรงบันดาลใจ แต่เป็นการอัปเกรดเป็นสองกรอบ คุณอาจถามว่าอัพเกรดที่นี่คืออะไร?การอัปเกรดด้วย TestNG คือมีฟังก์ชันเพิ่มเติมเช่น: คำอธิบายประกอบการทดสอบการจัดกลุ่มการจัดลำดับความสำคัญการกำหนดพารามิเตอร์และเทคนิคการจัดลำดับในโค้ดซึ่งไม่สามารถทำได้ก่อนหน้านี้



นอกจากการจัดการกรณีทดสอบแล้วยังสามารถรับรายงานการทดสอบโดยละเอียดได้โดยใช้ TestNG จะมีบทสรุปที่แสดงกรณีทดสอบที่ล้มเหลวพร้อมกับกลุ่มที่เป็นส่วนหนึ่งของและคลาสที่อยู่ภายใต้ เมื่อสามารถระบุจุดบกพร่องได้อย่างแม่นยำเช่นนี้ก็สามารถแก้ไขได้ทันทีเพื่อความโล่งใจของนักพัฒนา ภาพด้านล่างแสดงให้เห็นถึงการทำงานของ TestNG

testng - ซีลีเนียม webdriver

ดังนั้น TestNG จะทำให้งานสำเร็จได้อย่างไร? คำถามนี้จะได้รับคำตอบในส่วนถัดไปของบล็อกบทช่วยสอน Selenium WebDriver ซึ่งฉันจะพูดถึงวิธีจัดการกรณีทดสอบต่างๆโดยใช้ TestNG



Selenium WebDriver พร้อม TestNG

กรณีทดสอบสามารถกำหนดและจัดการได้ด้วยวิธีใดวิธีหนึ่งดังต่อไปนี้:

  1. ทดสอบคำอธิบายประกอบ
  2. การจัดลำดับความสำคัญ
  3. การปิดใช้งานกรณีทดสอบ
  4. การพึ่งพาวิธีการ
  5. การจัดกลุ่ม
  6. การยืนยัน
  7. การสร้างรายงาน

ให้ฉันเริ่มอธิบายแต่ละฟังก์ชันเหล่านี้

ทดสอบคำอธิบายประกอบ

ก่อนอื่นเรามาถามตัวเองด้วยคำถามนี้: เหตุใดเราจึงต้องใช้คำอธิบายประกอบ? เราจะใช้มันได้เมื่อไหร่? คำอธิบายประกอบในซีลีเนียมใช้เพื่อควบคุมวิธีการดำเนินการต่อไป คำอธิบายประกอบการทดสอบถูกกำหนดไว้ก่อนทุกวิธีในรหัสทดสอบ ในกรณีที่วิธีใด ๆ ไม่ได้ขึ้นต้นด้วยคำอธิบายประกอบวิธีนั้นจะถูกละเว้นและไม่ถูกเรียกใช้เป็นส่วนหนึ่งของรหัสทดสอบ ในการกำหนดวิธีการเหล่านี้จำเป็นต้องใส่คำอธิบายประกอบด้วย ' @ทดสอบ ‘. ดูตัวอย่างข้อมูลโค้ดด้านล่าง

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.annotations .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 โมฆะสาธารณะ beforeMethod () {System.out.println (' นี่ ชิ้นส่วนของโค้ดถูกเรียกใช้ก่อนวิธีการ: - myTestMethod ') System.setProperty (' webdriver.gecko.driver ',' C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe ')} @AfterMethod โมฆะสาธารณะ afterMethod () {System.out.println (' ชิ้นส่วนนี้ ของโค้ดถูกเรียกใช้งานหลังจาก method: - myTestMethod ')} @BeforeClass โมฆะสาธารณะ beforeClass () {Syste m.out.println ('โค้ดชิ้นนี้ถูกเรียกใช้งานก่อนที่คลาสจะถูกเรียกใช้งาน')} @AfterClass โมฆะสาธารณะ afterClass () {System.out.println ('โค้ดชิ้นนี้ถูกเรียกใช้งานหลังจากที่คลาสถูกเรียกใช้งาน')} }

ในโค้ดด้านบนคุณจะสังเกตเห็นว่าฉันไม่ได้กำหนดเมธอด 'หลัก' อย่างไรก็ตามฉันมีอีก 5 วิธีที่กำหนดไว้ ซึ่ง ได้แก่ 'myTestMethod', 'beforeMethod', 'afterMethod', 'beforeClass' และ 'afterClass' นอกจากนี้โปรดสังเกตลำดับความหมายของวิธีการในโค้ดเนื่องจากจะไม่ดำเนินการตามลำดับเดียวกันนี้

เมธอด 'myTestMethod' มีคำอธิบายประกอบ @ทดสอบ และเป็นวิธีการหลักหรือส่วนของรหัสที่ต้องดำเนินการ วิธีการใส่คำอธิบายประกอบอื่น ๆ จะดำเนินการก่อนและหลังวิธีนี้ถูกเรียกใช้ เนื่องจาก 'beforeMethod' มีคำอธิบายประกอบ @BeforeMethod มันจะถูกดำเนินการก่อนที่ 'myTestMethod' จะถูกเรียกใช้งาน ในทำนองเดียวกัน 'afterMethod' จะมีคำอธิบายประกอบ @AfterMethod และจะดำเนินการหลังจาก 'myTestMethod'

อย่างไรก็ตาม 'beforeClass' มีคำอธิบายประกอบ @BeforeClass ซึ่งหมายความว่ามันจะถูกดำเนินการก่อนที่คลาสจะถูกเรียกใช้งาน ชื่อชั้นของเราที่นี่คือ ทดสอบคำอธิบายประกอบ ดังนั้นก่อนที่คลาสจะเริ่มดำเนินการชิ้นส่วนของโค้ดภายใน 'beforeClass' จะถูกเรียกใช้งาน ในทำนองเดียวกัน 'afterClass' จะมีคำอธิบายประกอบ @AfterMethod และจะดำเนินการหลังเลิกเรียน ทดสอบคำอธิบายประกอบ ถูกดำเนินการ

หากคุณยังคงมีความสับสนเกี่ยวกับลำดับการดำเนินการตัวอย่างด้านล่างนี้จะช่วยคุณได้อย่างแน่นอน

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

ผลลัพธ์ของโค้ดด้านบนจะเป็น:

โค้ดชิ้นนี้ถูกเรียกใช้งานก่อนที่คลาสจะถูกเรียกใช้งานโค้ดชิ้นนี้จะถูกเรียกใช้งานก่อนเมธอด: - myTestMethod Inside method: - myTestMethod 1493192682118 geckodriver INFO Listening on 127.0.0.1:13676 1493192682713 mozprofile :: profile INFO การใช้ profile path Custocal UsersVardhanAppData .wGkcwvwXkl2y 1493192682729 geckodriver :: marionette INFO การเริ่มต้นเบราว์เซอร์ C: Program Files (x86) Mozilla Firefoxirefox.exe 1493192682729 geckodriver :: marionette INFO การเชื่อมต่อกับ Marionette บน localhost: 59792 [GPU 6152] คำเตือน: ข้อผิดพลาดของ pipe build: 109s: file c: / file c: / marionette INFO /moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/chromium/src/chrome/common/ipc_channel_win.cc บรรทัด 346 1493192688316 Marionette INFO ฟังบนพอร์ต 59792 26 เมษายน 2560 13:14:49 น. 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.getElementsByTagNa ฉัน (... ) [0] คือ Selenium Framework ที่ไม่ได้กำหนด | Practiceform 1493192695134 Marionette INFO การเชื่อมต่อใหม่จะไม่ได้รับการยอมรับอีกต่อไป 26 เม.ย. 2017 13:14:57 น. org.openqa.selenium.os.UnixProcess ทำลาย SEVERE: ไม่สามารถฆ่ากระบวนการด้วย PID 6724 โค้ดชิ้นนี้ถูกเรียกใช้งานหลังจากวิธีการ: - myTestMethod โค้ดส่วนนี้ถูกเรียกใช้งานหลังจากที่คลาสถูกเรียกใช้งาน PASSED: myTestMethod =================================== ============ การทดสอบการทดสอบเริ่มต้นทำงาน: 1, ความล้มเหลว: 0, ข้าม: 0 ======================== ======================= =========================== ==================== ชุดค่าเริ่มต้นการทดสอบทั้งหมดทำงาน: 1, ล้มเหลว: 0, ข้าม: 0 =============== ================================

ดังที่คุณเห็นจากผลลัพธ์ด้านบนจำนวนการทดสอบที่รันคือ 1 และล้มเหลวคือ 0 ซึ่งหมายความว่าโค้ดนั้นสำเร็จ แม้ลำดับการดำเนินการของวิธีการจะอยู่ในลำดับผมกล่าวไว้ก่อนหน้านี้

เมื่อคุณรันโค้ดนี้ในเครื่องของคุณ Selenium WebDriver จะสร้างอินสแตนซ์เบราว์เซอร์ Firefox ของคุณไปที่แบบฝึกของ Selenium Framework ปิดอินสแตนซ์เบราว์เซอร์และแสดงผลลัพธ์เดียวกันดังที่แสดงไว้ด้านบนใน Eclipse IDE ของคุณ

ฉันใช้คำอธิบายประกอบที่แตกต่างกันเพียง 5 รายการในรหัสของฉัน แต่ยังมีคำอธิบายประกอบอีกมากมายที่สามารถใช้เพื่อควบคุมวิธีการถัดไปที่จะดำเนินการ รายการคำอธิบายประกอบทั้งหมดจะอธิบายไว้ในไฟล์โต๊ะด้านล่าง:

@BeforeSuite - วิธีการที่มี @BeforeSuite จะทำงานก่อนที่การทดสอบทั้งหมดในชุดจะทำงาน

@AfterSuite - วิธีการที่มี @AfterSuite จะทำงานหลังจากการทดสอบทั้งหมดในชุดทำงานเสร็จสิ้น

@BeforeTest - วิธีการที่มี @BeforeTest จะทำงานก่อนที่วิธีการทดสอบใด ๆ ที่เป็นของคลาสจะถูกเรียกใช้

@AfterTest - วิธีการที่มี @AfterTest จะทำงานหลังจากที่วิธีการทดสอบทั้งหมดของคลาสทำงานแล้ว

@BeforeGroup - วิธีการที่มี @BeforeGroup จะทำงานก่อนที่แต่ละกลุ่มจะถูกเรียกใช้

@AfterGroup - วิธีการที่มี @AfterGroup จะทำงานหลังจากเรียกใช้ทุกกลุ่ม

@BeforeClass - วิธีการที่มี @BeforeClass จะทำงานหนึ่งครั้งก่อนที่จะเรียกใช้วิธีการทดสอบแรกในคลาสปัจจุบัน

@หลังเลิกเรียน - วิธีการที่มี @หลังเลิกเรียน จะทำงานหนึ่งครั้งหลังจากที่วิธีการทดสอบทั้งหมดในคลาสปัจจุบันทำงานแล้ว

@BeforeMethod - วิธีการที่มี @BeforeMethod จะทำงานก่อนที่จะเรียกใช้วิธีการทดสอบใด ๆ ภายในคลาส

@AfterMethod - วิธีการที่มี @AfterMethod จะทำงานหลังจากเรียกใช้ทุกวิธีการทดสอบภายในคลาส

@ทดสอบ - วิธีการที่มี @ทดสอบ เป็นวิธีการทดสอบหลักในโปรแกรมทั้งหมด วิธีการใส่คำอธิบายประกอบอื่น ๆ จะดำเนินการโดยใช้วิธีนี้

ภาพหน้าจอของรายงาน TestNG คือนำเสนอด้านล่าง: -

การจัดลำดับความสำคัญ

เราได้พูดถึงวิธีการต่างๆที่สามารถกำหนดได้ว่าจะดำเนินการรอบ ๆ ไฟล์ @ทดสอบ วิธี. แต่จะเกิดอะไรขึ้นถ้าคุณมีมากกว่าหนึ่ง @ทดสอบ วิธีการและคุณต้องการกำหนดลำดับการดำเนินการระหว่างพวกเขา?

ในกรณีนั้นเราทำได้สร้างความแตกต่างโดยกำหนดหมายเลขให้กับกรณีทดสอบที่มีคำอธิบายประกอบ ตัวเลขน้อยกว่าลำดับความสำคัญสูงกว่า สามารถกำหนดลำดับความสำคัญเป็นพารามิเตอร์ในขณะที่กำหนดกรณีทดสอบ แต่หากไม่มีการกำหนดลำดับความสำคัญวิธีการทดสอบที่มีคำอธิบายประกอบจะดำเนินการตามลำดับตัวอักษรของการทดสอบ ดูพารามิเตอร์ของคำอธิบายประกอบการทดสอบในส่วนด้านล่างของรหัส.

@Test (Priority = 2) โมฆะแบบคงที่สาธารณะ FirstTest () {system.out.println ('นี่คือกรณีทดสอบหมายเลขสองเนื่องจากลำดับความสำคัญ # 2')} @Test (ลำดับความสำคัญ = 1) โมฆะแบบคงที่สาธารณะ SecondTest () { system.out.println ('นี่คือกรณีทดสอบหมายเลขหนึ่งเนื่องจากลำดับความสำคัญ # 1')} @Test public static void FinalTest () {system.out.println ('นี่คือกรณีทดสอบขั้นสุดท้ายเนื่องจากไม่มีลำดับความสำคัญ' )}

การปิดใช้งานกรณีทดสอบ

ให้ฉันแสดงสิ่งที่น่าสนใจกว่านี้ จะเกิดอะไรขึ้นถ้าคุณมีรหัสที่ครอบคลุมหนึ่งล้านบรรทัดซึ่งประกอบด้วยกรณีทดสอบหลายร้อยกรณีและคุณต้องการปิดการใช้งานวิธีทดสอบเพียงวิธีเดียว คุณไม่จำเป็นต้องลบส่วนใด ๆ ของโค้ดแทนเราสามารถปิดการใช้งานวิธีทดสอบนั้นได้

การปิดใช้งานกรณีทดสอบจะกระทำผ่านพารามิเตอร์ เราสามารถตั้งค่าไฟล์ เปิดใช้งาน แอตทริบิวต์เป็น 'เท็จ' โดยค่าเริ่มต้นกรณีทดสอบทั้งหมดจะเปิดใช้งานดังนั้นเราจึงไม่จำเป็นต้องกำหนดทุกครั้งที่เขียนแบบทดสอบ ดูพารามิเตอร์ของวิธีที่สามและสี่ในส่วนด้านล่างของรหัส.

@Test (Priority = 2, enable = True) public static void FirstTest () {system.out.println ('นี่คือกรณีทดสอบหมายเลขสองเนื่องจาก Priority # 2')} @Test (Priority = 1, enable = True ) โมฆะแบบคงที่สาธารณะ SecondTest () {system.out.println ('นี่คือกรณีทดสอบหมายเลขหนึ่งเนื่องจากลำดับความสำคัญ # 1')} @Test (เปิดใช้งาน = เท็จ) โมฆะแบบคงที่สาธารณะ SkippedTest () {system.out.println ( 'นี่คือกรณีทดสอบที่ข้ามไปเพราะถูกปิดใช้งาน')} @Test (เปิดใช้งาน = True) โมฆะแบบคงที่สาธารณะ FinalTest () {system.out.println ('นี่คือกรณีทดสอบขั้นสุดท้ายซึ่งเปิดใช้งานและไม่มีลำดับความสำคัญ ')}

การพึ่งพาวิธีการ

ตอนนี้ในกรณีที่คุณมีสถานการณ์นั้นคุณต้องการให้โค้ดทำงานก็ต่อเมื่อเป็นไปตามเงื่อนไขหรือเฉพาะในกรณีที่วิธีการเฉพาะดำเนินการสำเร็จเราสามารถทำได้โดยใช้ ขึ้นอยู่กับวิธีการ () นี่เป็นเงื่อนไขของการขึ้นต่อกันของเมธอดที่เมธอดจะถูกเรียกใช้โดยขึ้นอยู่กับวิธีการอื่น หากเราตั้งค่าเพิ่มเติม เสมอ แอตทริบิวต์เป็น true จากนั้นเมธอดจะถูกดำเนินการโดยไม่คำนึงถึงเงื่อนไข fail / pass ของวิธีการขึ้นอยู่กับ ดูโค้ดในส่วนโค้ดด้านล่าง

@Test public static void FirstTest () {system.out.println ('นี่คือกรณีทดสอบแรกที่จะดำเนินการ')} @Test (ขึ้นอยู่กับการใช้งานจริง = {'FirstTest'}) โมฆะแบบคงที่สาธารณะ SecondTest () {system.out. println ('นี่เป็นกรณีทดสอบที่สองที่จะดำเนินการนี่คือวิธีการขึ้นอยู่กับ')} @Test (ขึ้นอยู่กับการทดสอบขั้นสุดท้าย = {'SecondTest'}) โมฆะคงที่สาธารณะ FinalTest () {system.out.println ('นี่คือการทดสอบขั้นสุดท้าย มันจะถูกดำเนินการต่อไป ')}

ตอนนี้สิ่งนี้นำเราไปสู่การทดสอบที่สำคัญอีกประการหนึ่งคำอธิบายประกอบซึ่งเป็น การจัดกลุ่ม .

แฟกทอเรียลของจาวาจำนวนหนึ่ง

การจัดกลุ่ม

ถึงตอนนี้คุณต้องรู้ว่าจะมีวิธีการหลายอย่างที่เป็นส่วนหนึ่งของกรณีทดสอบของเราในโค้ด สมมติว่ามีกรณีทดสอบ 100 กรณี แต่เราต้องการดำเนินการทดสอบเพียง 20 กรณีในการทดสอบครั้งต่อไป คุณคิดว่าเราทำได้ไหม? แน่นอนว่าเราทำได้

เราสามารถใช้ กลุ่ม แอตทริบิวต์สำหรับวัตถุประสงค์นี้ เราสามารถกำหนดชื่อกลุ่มให้กับกรณีทดสอบหลาย ๆ กรณีและในภายหลังเลือกที่จะดำเนินการกลุ่มแทนรหัสทั้งหมด ดูข้อมูลโค้ดด้านล่างเพื่อทำความเข้าใจวิธีสร้างกลุ่ม

@Test (groups = {'MyGroup'}) public static void FirstTest () {system.out.println ('This is a part of the Group: MyGroup')} @Test (groups = {'MyGroup'}) public static เป็นโมฆะ SecondTest () {system.out.println ('นี่เป็นส่วนหนึ่งของ Group: MyGroup')} @Test public static void ThirdTest () {system.out.println ('แต่นี่ไม่ใช่ส่วนหนึ่งของ กลุ่ม: MyGroup ')}

การยืนยัน TestNG

ตอนนี้นำเราไปสู่หัวข้อถัดไปใน TestNG ซึ่งเป็นการยืนยัน ตามชื่อที่แนะนำสามารถใช้การยืนยันในวิธีการทดสอบเพื่อกำหนดเงื่อนไขการผ่าน / ไม่ผ่านของการทดสอบ ขึ้นอยู่กับเงื่อนไขจริง / เท็จของคำสั่งการทดสอบจะผ่าน / ล้มเหลว

ในโค้ดด้านล่างฉันได้รวมวิธีการทดสอบไว้ 3 วิธีโดยวิธีแรกและวิธีที่สามมีเงื่อนไขการผ่านและวิธีที่สองจะมีเงื่อนไขล้มเหลว ดูรหัสด้วยตัวคุณเอง

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 การยืนยันคลาสสาธารณะ {@BeforeMethod โมฆะสาธารณะ beforeMethod () {System.setProperty ('webdriver.gecko.driver', 'C: UsersVardhanworkspaceSeleniumProjectfilesgeckodriver.exe')} บูลีนสาธารณะ 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 เป็นโมฆะ 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 ('นี่คือเงื่อนไขการส่งผ่านอีกครั้ง')} }

เมื่อคุณดูรายงานที่สร้างขึ้นหลังจากการดำเนินการนี้คุณจะสังเกตเห็นว่าจากการทดสอบสามครั้งหนึ่งครั้งล้มเหลวและสองครั้งผ่านไป ประเด็นสำคัญอีกประการหนึ่งที่ควรทราบคือเมื่อการยืนยันล้มเหลวคำสั่ง / บรรทัดของโค้ดอื่น ๆ ในการทดสอบนั้นจะถูกข้ามไป เฉพาะเมื่อการยืนยันประสบความสำเร็จโค้ดบรรทัดถัดไปจะถูกดำเนินการในการทดสอบนั้น ตรวจสอบผลลัพธ์ด้านล่างที่ system.out.println ได้ดำเนินการสำหรับวิธีแรกและวิธีที่สามเท่านั้น

1493277977348 geckodriver INFO Listening on 127.0.0.1:47035 1493277977993 mozprofile :: profile INFO การใช้เส้นทางโปรไฟล์ C: UsersVardhanAppDataLocalTemp ust_mozprofile.Z7X9uFdKODvi 1493277977994 geckodriver97 ไฟล์ Firefox99: marionette INF โปรแกรมเมอร์ การเชื่อมต่อกับ Marionette บน localhost: 50758 [GPU 6920] คำเตือน: ข้อผิดพลาดไปป์: 109: file c: / builds / moz2_slave / m-rel-w32-000000000000000000000000 / build / src / ipc / chromium / src / chrome / common / ipc_channel_win cc, บรรทัด 346 1493277981742 Marionette INFO Listening on port 50758 27 เมษายน 2017 12:56:22 PM org.openqa.selenium.remote.ProtocolHandshake createSession INFO: Detected dialect: W3C นี่เป็นเงื่อนไขการส่งอีกครั้งนี่คือเงื่อนไขการส่งผ่าน: getTitle PASSED: testEquality1 FAILED: testEquality2 java.lang.AssertionError: คาดว่า [เท็จ] แต่พบ [จริง] ที่ org.testng.Assert.fail (Assert.java:93) ที่ org.testng.Assert.failNotEquals (Assert.java: 512) ที่ org.testng.Assert.assertE qualsImpl (Assert.java:134) ที่ org.testng.Assert.assertEquals (Assert.java:115) ที่ org.testng.Assert.assertEquals (Assert.java:304) ที่ org.testng.Assert.assertEquals (Assert.java : 314) ที่ testng.Assertions.testEquality2 (Assertions.java:38) ที่ sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) ที่ sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) ที่ sun.reflect.DelegatingMethodAccessorImpl.invoke Source) ที่ java.lang.reflect.Method.invoke (Unknown Source) ที่ org.testng.internal.MethodInvocationHelper.invokeMethod (MethodInvocationHelper.java:108) ที่ org.testng.internal.Invoker.invokeMethod (Invoker.java:661) ที่ org.testng.internal.Invoker.invokeTestMethod (Invoker.java:869) ที่ org.testng.internal.Invoker.invokeTestMethods (Invoker.java:1193) ที่ org.testng.internal.TestMethodWorker.invokeTestMethods (TestMethodWorker.java:126 ) ที่ org.testng.internal.TestMethodWorker.run (TestMethodWorker.java:109) ที่ org.testng.TestRunner.privateRun (TestRunner.java:744) ที่ org.testng.TestRu nner.run (TestRunner.java:602) ที่ org.testng.SuiteRunner.runTest (SuiteRunner.java:380) ที่ org.testng.SuiteRunner.runSequentially (SuiteRunner.java:375) ที่ org.testng.SuiteRunner.privateRun (SuiteRunner .java: 340) ที่ org.testng.SuiteRunner.run (SuiteRunner.java:289) ที่ org.testng.SuiteRunnerWorker.runSuite (SuiteRunnerWorker.java:52) ที่ org.testng.SuiteRunnerWorker.run (SuiteRunnerWorker.java:86) ที่ org.testng.TestNG.runSuitesSequentially (TestNG.java:1301) ที่ org.testng.TestNG.runSuitesLocally (TestNG.java:1226) ที่ org.testng.TestNG.runSuites (TestNG.java:1144) ที่ org.testng TestNG.run (TestNG.java:1115) ที่ org.testng.remote.AbstractRemoteTestNG.run (AbstractRemoteTestNG.java:132) ที่ org.testng.remote.RemoteTestNG.initAndRun (RemoteTestNG.java:230) ที่ org.testng.remote .RemoteTestNG.main (RemoteTestNG.java:76) ======================================= ======== การทดสอบการทดสอบเริ่มต้นทำงาน: 3, ความล้มเหลว: 1, ข้าม: 0 ============================ =================== =============================== ================ ชุดค่าเริ่มต้นการทดสอบทั้งหมดทำงาน: 3, ความล้มเหลว: 1, ข้าม: 0 =================================== ============

นั่นคือจุดสิ้นสุดของแนวคิดที่เกี่ยวข้องกับการจัดการกรณีทดสอบ เราเหลืออีกหนึ่งหัวข้อและนั่นคือการสร้างรายงาน การสร้างรายงานเป็นหัวข้อสุดท้ายในบทช่วยสอน Selenium WebDriver นี้เนื่องจากสามารถสร้างรายงานได้หลังจากทั้งหมดดำเนินการทดสอบ

ประโยคสหภาพใช้เพื่อ

การสร้างรายงาน

สิ่งที่สำคัญที่สุดที่คุณต้องทราบคือรายงานจะถูกสร้างขึ้นโดยใช้ไฟล์. xml เท่านั้น ซึ่งหมายความว่าไม่ว่าจะเป็นวิธีการหรือไม่ว่าจะเป็นคลาสหรือไม่ว่าจะเป็นกลุ่มที่คุณต้องการทดสอบทั้งหมดจะต้องระบุไว้ในไฟล์. xml

ก่อนอื่นคุณสามารถสร้างโฟลเดอร์ใหม่ภายใต้โปรเจ็กต์ของคุณและสร้างไฟล์ใหม่ภายในโฟลเดอร์นั้นจากนั้นตั้งชื่อไฟล์และบันทึกด้วยนามสกุล. xml คุณสามารถสร้างโฟลเดอร์และไฟล์ใหม่ได้โดยคลิกขวาที่ package explorer เมื่อคุณสร้างไฟล์แล้วให้ไปที่แท็บแหล่งที่มาจากด้านล่างของหน้าต่างและป้อนการกำหนดค่าตามที่ระบุในตัวอย่างด้านล่าง

 

บรรทัดแรกคือข้อกำหนดประเภทเอกสาร XML นี่เป็นมาตรฐานและบังคับสำหรับรายงานการทดสอบทั้งหมด แต่บรรทัดอื่น ๆ ค่อนข้างอธิบายตัวเอง ฉันใช้แท็กเปิดสำหรับชุดการทดสอบชั้นเรียนและชั้นเรียนแล้ว แท็ก Classes สามารถมีได้ตั้งแต่หนึ่งคลาสขึ้นไป ดังนั้นจึงสามารถใช้ในกรณีที่เราต้องการสร้างรายงานที่เรากำลังทดสอบหลายชั้นเรียน สิ่งนี้มีประโยชน์โดยเฉพาะอย่างยิ่งสำหรับนักพัฒนาที่ต้องการทดสอบโค้ดยาว ๆ

อย่างไรก็ตามในการกลับไปที่รายงานของเราคุณสามารถตั้งชื่อแต่ละชุดหรือการทดสอบหรือชั้นเรียนหลังจากเปิดแท็กเหล่านั้นและอย่าลืมปิดทุกแท็กที่คุณเปิด ฉันตั้งชื่อห้องชุดของฉันว่า TestNGs ชื่อการทดสอบเป็น ทดสอบ คำอธิบายประกอบ และชื่อชั้นเป็น testng. TestAnnotations. โปรดทราบว่าชื่อคลาสอยู่ในรูปแบบของ ' packagename.classname ’ .

เมื่อคุณเรียกใช้ไฟล์นี้เป็นชุด TestNG การดำเนินการจะเริ่มขึ้นและคุณจะได้รับรายงานการทดสอบโดยละเอียด คุณจะได้รับผลลัพธ์การทดสอบในแท็บคอนโซลของคุณและผลลัพธ์ของชุดทดสอบในแท็บถัดไป รายงานที่ฉันสร้างขึ้นเพื่อเรียกใช้โค้ดของฉันคือในภาพหน้าจอด้านล่าง คุณจะสังเกตเห็นว่าเวลานี้มีชื่อชุดชื่อทดสอบชื่อคลาสพร้อมกับเวลาที่ใช้ในการดำเนินการแต่ละรายการ

ในกรณีที่คุณต้องการดูรายงาน HTML (รายงานดัชนีหรือรายงานที่ส่งอีเมลได้) คุณสามารถไปที่ไฟล์ ผลการทดสอบ โฟลเดอร์ภายในไดเร็กทอรีโครงการในพื้นที่ทำงานของคุณ คุณสามารถดูรายงานได้แม้ในเวลาต่อมา ด้านล่างนี้คือภาพหน้าจอ

รายงานดัชนี : -

รายงานที่ส่งอีเมลได้ : -

ดังนั้นเราจึงมาถึงจุดสิ้นสุดของบล็อกการสอน Selenium WebDriver นี้ ถึงเวลาแล้วที่คุณจะต้องตั้งค่า eclipse ในตอนท้ายของคุณติดตั้งแพ็คเกจ Selenium ต่างๆติดตั้ง TestNG และเริ่มต้นด้วยการเขียนกรณีทดสอบของคุณ

คุณสามารถดูวิดีโอแนะนำ Selenium WebDriver ด้านล่างเพื่อชมการสาธิตแนวคิดต่างๆที่อธิบายไว้ในบล็อกนี้

การฝึกอบรมซีลีเนียม | กรอบ TestNG สำหรับซีลีเนียม | Edureka

วิดีโอการฝึกอบรม Edureka Selenium นี้จะนำคุณไปสู่รายละเอียดเชิงลึกของ Selenium WebDriver วิดีโอแนะนำ Selenium นี้เหมาะสำหรับทั้งผู้เริ่มต้นและมืออาชีพที่ต้องการทำความเข้าใจพื้นฐานของคำสั่ง WebDriver และเรียนรู้วิธีใช้ TestNG กับ Selenium เพื่อจัดการกรณีทดสอบต่างๆ

หากคุณต้องการเรียนรู้ซีลีเนียมและสร้างอาชีพในโดเมนการทดสอบลองดูแบบโต้ตอบสดออนไลน์ของเรา ที่นี่มาพร้อมกับการสนับสนุน 24 * 7 เพื่อแนะนำคุณตลอดระยะเวลาการเรียนรู้ของคุณ

มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป