TestNG @ทดสอบลำดับความสำคัญใน Selenium
TestNG คือ การทดสอบ กรอบงานที่ครอบคลุมการออกแบบการทดสอบประเภทต่างๆ เช่น การทดสอบหน่วย การทดสอบการทำงาน การทดสอบตั้งแต่ต้นจนจบ การทดสอบ UI และการทดสอบการรวม
คุณสามารถเรียกใช้กรณีทดสอบเดียวหรือหลายกรณีในตัวของคุณได้ ทดสอบ รหัส.
หากไม่ได้กำหนดลำดับความสำคัญของการทดสอบในขณะที่เรียกใช้กรณีทดสอบหลายกรณี TestNG กำหนดลำดับความสำคัญ @Test ทั้งหมดให้เป็นศูนย์ (0)
ตอนนี้ในขณะที่กำลังวิ่งอยู่ ลำดับความสำคัญที่ต่ำกว่าจะถูกกำหนดเวลาก่อน
การสาธิตของ TestNG รหัสที่ไม่มีลำดับความสำคัญ
ลองใช้สถานการณ์ที่จำเป็นต้องมีการจัดลำดับเพื่อที่จะผ่านกรณีทดสอบทั้งหมด:
สถานการณ์สมมติ: สร้างโค้ดที่คุณต้องใช้ในการค้นหาบน Google ด้วยคำหลักเฉพาะเจาะจงว่า "Facebook" ตอนนี้ตรวจสอบว่าชื่อเบราว์เซอร์เปลี่ยนเป็น "Facebook - Google Search"
หมายเหตุ: แต่ละขั้นตอนที่คุณโค้ดควรอยู่ในวิธีแยกกัน
1 วิธี: เปิด Browser พูด Firefox (เปิดเบราว์เซอร์())
2 วิธี: เปิดตัว Google.com (launchGoogle())
3 วิธี: ทำการค้นหาโดยใช้ “Facebook” (performSearchAndClick1stLink())
4 วิธี: ยืนยันชื่อหน้าการค้นหาของ Google (FaceBookPageTitleVerification())
รหัสสำหรับสถานการณ์ของเรา:
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Brower say Firefox @Test public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
คำอธิบายของรหัส
ตามที่กล่าวไว้ข้างต้น เราได้สร้างกรณีทดสอบ 4 กรณีสำหรับการดำเนินการแต่ละอย่างในวิธีที่เป็นอิสระ
- วิธีแรก (เปิดเบราว์เซอร์) สถานะที่จะเริ่มต้น Firefox เบราว์เซอร์
- วิธีที่สอง (เปิดตัว Google) ระบุว่าการเปิดตัว Google.com อยู่ในเบราว์เซอร์ที่เริ่มต้น
- วิธีที่สาม (แสดงSeachAndClick1stLink)ระบุว่าดำเนินการค้นหาในช่องค้นหา (ด้วย xpath (“.//*[@title='ค้นหา']”) โดยมีคำค้นหาเป็น Facebook และ
- วิธีที่สี่และสุดท้าย (การตรวจสอบชื่อเพจ Facebook) ระบุว่าคลิกที่ไอคอนค้นหาของ Google และตรวจสอบว่าได้เปลี่ยนชื่อเบราว์เซอร์เป็น เฟซบุ๊ก – ค้นหาด้วย Google
ตอนนี้ให้รันโค้ดนี้โดยใช้ testNG ตามที่แสดงในวิดีโอ คุณจะพบทั้งหมด กรณีทดสอบ กำลังล้มเหลว สาเหตุของความล้มเหลว: เนื่องจากมีการขึ้นต่อกันของกรณีการทดสอบก่อนหน้านี้ที่จะผ่าน เฉพาะกรณีการทดสอบที่กำลังทำงานอยู่เท่านั้นที่จะถูกส่งผ่าน
ในกรณีนี้,
- วิธีแรกที่จะดำเนินการคือ เปิดเบราว์เซอร์() มันผ่านไปเพราะไม่มีการพึ่งพาใดๆ
- วิธีที่สองที่ดำเนินการคือ การตรวจสอบชื่อเพจ Facebook(); มันล้มเหลวเนื่องจากเราพยายามคลิกปุ่มค้นหาและตรวจสอบชื่อเบราว์เซอร์
- คุณจะเห็นว่าหากกิจกรรมการค้นหาไม่ได้รับการประมวลผล แล้วจะผ่านขั้นตอนอื่นได้อย่างไร นี่คือสาเหตุที่กรณีทดสอบของฉันล้มเหลว
PASSED: openBrowser FAILED: FaceBookPageTitleVerification FAILED: launchGoogle FAILED: peformSeachAndClick1stLink
การสาธิตของ TestNG รหัสที่ไม่มีลำดับความสำคัญตามลำดับตัวอักษร
หากเราไม่ได้ระบุลำดับความสำคัญใดๆ testng จะดำเนินการตามวิธี @Test ตามลำดับตัวอักษรของชื่อวิธีโดยไม่คำนึงถึงตำแหน่งการใช้งานในโค้ด
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test public void c_method(){ System.out.println("I'm in method C"); } @Test public void b_method(){ System.out.println("I'm in method B"); } @Test public void a_method(){ System.out.println("I'm in method A"); } @Test public void e_method(){ System.out.println("I'm in method E"); } @Test public void d_method(){ System.out.println("I'm in method D"); } }
เอาท์พุต
I'm in method A I'm in method B I'm in method C I'm in method D I'm in method E
แม้ว่าเราจะกำหนดวิธีการในลักษณะแบบสุ่ม (c, b, a, e, d) แต่ testng จะดำเนินการวิธีการโดยอิงตามชื่อวิธีการโดยพิจารณาจากลำดับตัวอักษร และสิ่งเดียวกันนี้ก็สะท้อนอยู่ในผลลัพธ์ด้วยเช่นกัน
วิธีการตั้งค่าลำดับความสำคัญใน TestNG
ดังที่คุณเห็นในตัวอย่างก่อนหน้านี้ว่าจำเป็นต้องมีการเรียงลำดับเพื่อที่จะผ่านสถานการณ์นี้ ดังนั้นเราจะแก้ไขโค้ดส่วนก่อนหน้าด้วย พารามิเตอร์ลำดับความสำคัญ เพื่อให้การทดสอบแต่ละครั้งดำเนินตามลำดับความสำคัญที่กำหนด
อย่างที่คุณเห็นเราได้กำหนดลำดับความสำคัญให้กับแต่ละกรณีทดสอบแล้ว หมายความว่ากรณีทดสอบจะดำเนินการตามค่าลำดับความสำคัญที่ต่ำกว่าก่อน
ความสำคัญในการทดสอบ NG ในการดำเนินการ
import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.Assert; import org.testng.annotations.Test; public class Priority_In_testNG { WebDriver driver; // Method 1: Open Browser say Firefox @Test (priority=1) public void openBrowser() { driver = new FirefoxDriver(); } // Method 2: Launch Google.com @Test (priority=2) public void launchGoogle() { driver.get("http://www.google.co.in"); } // Method 3: Perform a search using "Facebook" @Test (priority=3) public void peformSeachAndClick1stLink() { driver.findElement(By.xpath(".//*[@title='Search']")).sendKeys("Facebook"); } // Method 4: Verify Google search page title. @Test (priority=4) public void FaceBookPageTitleVerification() throws Exception { driver.findElement(By.xpath(".//*[@value='Search']")).click(); Thread.sleep(3000); Assert.assertEquals(driver.getTitle().contains("Facebook - Google Search"), true); } }
คำอธิบายของรหัส
หลังจากกำหนดลำดับความสำคัญให้กับแต่ละกรณีทดสอบแล้ว ให้รันโค้ดด้านบนโดยใช้ testNG ดังที่แสดงในวิดีโอ 2 ด้านล่าง
ที่นี่ คุณจะเห็นว่ากรณีทดสอบได้รับการจัดลำดับความสำคัญ กรณีทดสอบที่มีลำดับความสำคัญต่ำกว่าจะถูกดำเนินการก่อน กล่าวคือ ขณะนี้มีการดำเนินการตามลำดับตามลำดับความสำคัญในกรณีทดสอบ ดังนั้นกรณีทดสอบทั้งหมดจึงผ่านไปแล้ว
สังเกตคอนโซลของ Eclipse:
เอาท์พุต :
PASSED: openBrowser PASSED: launchGoogle PASSED: peformSearchAndClick1stLink PASSED: FaceBookPageTitleVerification
หมายเลข 0 มีลำดับความสำคัญสูงสุด (จะถูกดำเนินการก่อน) และลำดับความสำคัญจะขึ้นอยู่กับหมายเลขที่กำหนด เช่น 0 มีลำดับความสำคัญสูงสุดมากกว่า 1 1 มีลำดับความสำคัญสูงสุดมากกว่า 2 และต่อๆ ไป
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=1) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
เอาท์พุต
I'm in method E I'm in method A I'm in method D I'm in method C I'm in method B
ที่นี่เราได้จัดลำดับความสำคัญเป็น 0,1,3,6,9 ดังนั้น วิธีที่มีลำดับความสำคัญเป็น 0 จะถูกดำเนินการก่อน จากนั้นจึงดำเนินการด้วยวิธีที่มีลำดับความสำคัญ -1 ไปเรื่อยๆ ชื่อวิธีการเรียงลำดับตามตัวอักษรในที่นี้จะไม่ได้รับการพิจารณาเนื่องจากเราจัดลำดับความสำคัญไว้
วิธีการที่มีลำดับความสำคัญเท่ากัน
อาจมีความเป็นไปได้ที่วิธีการอาจมีลำดับความสำคัญเท่ากัน ในกรณีดังกล่าว testng จะพิจารณาลำดับตัวอักษรของชื่อวิธีการที่มีความสำคัญเท่ากัน
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test(priority=6) public void c_method(){ System.out.println("I'm in method C"); } @Test(priority=9) public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=3) public void d_method(){ System.out.println("I'm in method D"); } }
เอาท์พุต
I'm in method E I'm in method D I'm in method A I'm in method C I'm in method B
ที่นี่ 'e' และ 'd' จะถูกดำเนินการตามค่าลำดับความสำคัญ แต่เมธอด 'a' และ 'c' มีค่าลำดับความสำคัญเท่ากัน (6) ดังนั้น การทดสอบที่นี่จะพิจารณาลำดับตัวอักษรของ 'a' และ 'c' และดำเนินการตามลำดับ
ผสมผสานทั้งวิธีจัดลำดับความสำคัญ (มีลำดับความสำคัญเท่ากัน) และวิธีที่ไม่จัดลำดับความสำคัญ
ในกรณีนี้ เราจะครอบคลุมสองกรณีในคลาสการทดสอบหนึ่งคลาส
- วิธีการที่มีค่าลำดับความสำคัญเท่ากัน
- มีมากกว่าหนึ่งวิธีที่ไม่จัดลำดับความสำคัญ
package com.guru.testngannotations; import org.testng.annotations.Test; public class TestNG_Priority_Annotations { @Test() public void c_method(){ System.out.println("I'm in method C"); } @Test() public void b_method(){ System.out.println("I'm in method B"); } @Test(priority=6) public void a_method(){ System.out.println("I'm in method A"); } @Test(priority=0) public void e_method(){ System.out.println("I'm in method E"); } @Test(priority=6) public void d_method(){ System.out.println("I'm in method D"); } }
Output:
I'm in method B I'm in method C I'm in method E I'm in method A I'm in method D
PASSED: b_method PASSED: c_method PASSED: e_method PASSED: a_method PASSED: d_method
คำอธิบาย:
การตั้งค่าแรก: วิธีการที่ไม่จัดลำดับความสำคัญ: 'c' และ 'b': ตามลำดับตัวอักษร 'b' จะถูกดำเนินการก่อนแล้วจึงดำเนินการ 'c'
การตั้งค่าที่สอง: วิธีการที่มีลำดับความสำคัญ: 'a', 'e' และ 'd': 'e' ถูกดำเนินการก่อนเนื่องจากมีลำดับความสำคัญสูงสุด (0) เนื่องจากลำดับความสำคัญของวิธีการ 'a' และ 'd' เท่ากัน การทดสอบจึงพิจารณาลำดับตัวอักษรของชื่อวิธีการ ดังนั้น ระหว่างทั้งสอง วิธีการ 'a' จึงถูกดำเนินการก่อน จากนั้นจึงเป็น 'd'
คำนึงถึงขนาดตัวพิมพ์ใน TestNG
เพื่อให้คุณทราบ มีรูปแบบมาตรฐานสำหรับการกำหนดลำดับความสำคัญใน testNG เช่น @ทดสอบ (ลำดับความสำคัญ=4)สมมติว่าคุณกำลังกำหนดมันในไวยากรณ์อื่นพูด @ทดสอบ (ลำดับความสำคัญ=1) จากนั้น IDE ของคุณจะแสดงเป็นข้อผิดพลาดในการคอมไพล์ ดูภาพด้านล่าง:
สรุป
ดังที่คุณเห็นแล้วว่าหากมีข้อกำหนดในการรันชุด test case ในลำดับเฉพาะ ก็สามารถทำได้ง่ายๆ โดยใช้ ลำดับความสำคัญ การใช้ testNG เป็นเครื่องมือในการรัน
บทช่วยสอนนี้เกิดขึ้นได้เนื่องจากการมีส่วนร่วมของ Ramandeep Singh และ Rama Krishna กัดเด