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' และดำเนินการตามลำดับ

ผสมผสานทั้งวิธีจัดลำดับความสำคัญ (มีลำดับความสำคัญเท่ากัน) และวิธีที่ไม่จัดลำดับความสำคัญ

ในกรณีนี้ เราจะครอบคลุมสองกรณีในคลาสการทดสอบหนึ่งคลาส

  1. วิธีการที่มีค่าลำดับความสำคัญเท่ากัน
  2. มีมากกว่าหนึ่งวิธีที่ไม่จัดลำดับความสำคัญ
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 ของคุณจะแสดงเป็นข้อผิดพลาดในการคอมไพล์ ดูภาพด้านล่าง:

คำนึงถึงขนาดตัวพิมพ์ใน TestNG

สรุป

ดังที่คุณเห็นแล้วว่าหากมีข้อกำหนดในการรันชุด test case ในลำดับเฉพาะ ก็สามารถทำได้ง่ายๆ โดยใช้ ลำดับความสำคัญ การใช้ testNG เป็นเครื่องมือในการรัน

บทช่วยสอนนี้เกิดขึ้นได้เนื่องจากการมีส่วนร่วมของ Ramandeep Singh และ Rama Krishna กัดเด