TestNG @ทดสอบลำดับความสำคัญใน Selenium
TestNG คือ การทดสอบ กรอบงานที่ครอบคลุมการออกแบบการทดสอบประเภทต่างๆ เช่น การทดสอบหน่วย การทดสอบการทำงาน การทดสอบตั้งแต่ต้นจนจบ การทดสอบ UI และการทดสอบการรวม
คุณสามารถเรียกใช้กรณีทดสอบเดียวหรือหลายกรณีในตัวของคุณได้ ทดสอบ รหัส.
หากไม่ได้กำหนดลำดับความสำคัญของการทดสอบในขณะที่เรียกใช้กรณีทดสอบหลายกรณี TestNG กำหนดลำดับความสำคัญ @Test ทั้งหมดให้เป็นศูนย์ (0)
ตอนนี้ในขณะที่กำลังวิ่งอยู่ ลำดับความสำคัญที่ต่ำกว่าจะถูกกำหนดเวลาก่อน
การสาธิตของ TestNG รหัสที่ไม่มีลำดับความสำคัญ
ลองใช้สถานการณ์ที่จำเป็นต้องมีการจัดลำดับเพื่อที่จะผ่านกรณีทดสอบทั้งหมด:
สถานการณ์สมมติ: สร้างโค้ดที่คุณต้องดำเนินการดังต่อไปนี้ Google ค้นหาด้วยคำหลักเฉพาะ เช่น “Facebook” จากนั้นตรวจสอบว่าชื่อเบราว์เซอร์เปลี่ยนเป็น “Facebook –” แล้ว Google ค้นหา".
หมายเหตุ: แต่ละขั้นตอนที่คุณโค้ดควรอยู่ในวิธีแยกกัน
1 วิธี: เปิด Browser พูด Firefox (เปิดเบราว์เซอร์())
2 วิธี: ปล่อย Google.com (เปิดตัว)Google-
3 วิธี: ทำการค้นหาโดยใช้ “Facebook” (performSearchAndClick1stLink())
4 วิธี: ตรวจสอบ Google ค้นหาชื่อหน้าเพจ (FaceBookPageTitleVerification())
Code สำหรับสถานการณ์ของเรา:
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);
}
}
คำอธิบายของ Code
ตามที่กล่าวไว้ข้างต้น เราได้สร้างกรณีทดสอบ 4 กรณีสำหรับการดำเนินการแต่ละอย่างในวิธีที่เป็นอิสระ
- วิธีแรก (เปิดเบราว์เซอร์) สถานะที่จะเริ่มต้น Firefox เบราว์เซอร์
- วิธีที่สอง (ปล่อยGoogle) รัฐที่เปิดตัว Google.com อยู่ในเบราว์เซอร์ที่เริ่มต้นใช้งานแล้ว
- วิธีที่สาม (แสดงSeachAndClick1stLink)ระบุว่าดำเนินการค้นหาในช่องค้นหา (ด้วย xpath (“.//*[@title='ค้นหา']”) โดยมีคำค้นหาเป็น Facebook และ
- วิธีที่สี่และสุดท้าย (การตรวจสอบชื่อเพจ Facebook) รัฐที่คลิกไอคอนค้นหาของ Google และตรวจสอบว่าชื่อเบราว์เซอร์ได้เปลี่ยนเป็นแล้ว Facebook - 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);
}
}
คำอธิบายของ Code
หลังจากกำหนดลำดับความสำคัญให้กับแต่ละกรณีทดสอบแล้ว ให้รันโค้ดด้านบนโดยใช้ 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 กัดเด

