TestNG @Test Ưu tiên trong Selenium

TestNG là một Kiểm tra framework, bao gồm các loại thiết kế thử nghiệm khác nhau như thử nghiệm đơn vị, thử nghiệm chức năng, thử nghiệm từ đầu đến cuối, thử nghiệm giao diện người dùng và thử nghiệm tích hợp.

Bạn có thể chạy một hoặc nhiều trường hợp thử nghiệm trong Kiểm tra Mã.

Nếu mức độ ưu tiên kiểm thử không được xác định trong khi chạy nhiều trường hợp kiểm thử, TestNG gán tất cả @Test mức độ ưu tiên bằng 0 (XNUMX).

Bây giờ, trong khi đang chạy; mức độ ưu tiên thấp hơn sẽ được lên lịch trước.

Bản demo của TestNG mã không có mức độ ưu tiên

Hãy xem xét một tình huống trong đó cần phải sắp xếp trình tự để vượt qua tất cả các trường hợp thử nghiệm:

kịch bản: Tạo mã trong đó bạn được yêu cầu thực hiện tìm kiếm trên Google với từ khóa cụ thể là “Facebook”. Bây giờ, hãy xác minh rằng tiêu đề Trình duyệt đã được thay đổi thành “Facebook – Google Search”.

Lưu ý: Mỗi bước bạn viết mã phải theo các phương thức riêng biệt

Phương pháp 1: Mở trình duyệt nói Firefox (mở trình duyệt())

Phương pháp 2: Khởi chạy Google.com (launchGoogle())

Phương pháp 3: Thực hiện tìm kiếm bằng cách sử dụng “Facebook” (performSearchAndClick1stLink())

Phương pháp 4: Xác minh tiêu đề trang tìm kiếm Google (FaceBookPageTitleVerification())

Mã cho kịch bản của chúng tôi:

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);				
	    }		
	}		

Giải thích mã

Như đã đề cập ở trên, chúng tôi đã tạo 4 trường hợp thử nghiệm để thực hiện từng hành động theo các phương pháp độc lập.

  • Phương pháp đầu tiên (mở trình duyệt) trạng thái khởi tạo Firefox trình duyệt.
  • Phương pháp thứ hai (khởi chạy Google) tuyên bố rằng việc khởi chạy Google.com nằm trong trình duyệt được khởi tạo.
  • Phương pháp thứ ba (peformSeachAndClick1stLink)các trạng thái thực hiện tìm kiếm trong hộp tìm kiếm (với xpath (“.//*[@title='Search']”) với cụm từ tìm kiếm như Facebook
  • Phương pháp thứ tư và cuối cùng (Xác minh FaceBookPageTitle) tuyên bố rằng nhấp vào biểu tượng tìm kiếm của Google và xác minh rằng tiêu đề trình duyệt đã được thay đổi thành Facebook – Tìm kiếm của Google.

Bây giờ hãy chạy mã này bằng testNG như trong video, bạn sẽ tìm thấy tất cả Trường hợp thử nghiệm đang thất bại. Lý do thất bại: vì có sự phụ thuộc của trường hợp kiểm thử trước đó phải vượt qua, nên chỉ trường hợp kiểm thử đang chạy hiện tại mới được vượt qua.

Trong trường hợp này,

  • Phương thức đầu tiên được thực thi là mở trình duyệt(). Nó đã được thông qua vì nó không có bất kỳ sự phụ thuộc nào.
  • Phương pháp thứ hai được thực hiện là FaceBookPageTitleVerification(); không thành công vì chúng tôi đang cố nhấp vào nút tìm kiếm và xác minh tiêu đề trình duyệt.
  • Bạn có thể thấy rằng nếu hoạt động tìm kiếm không được xử lý thì làm sao có thể vượt qua bất kỳ bước nào khác. Do đó, đây là lý do khiến các trường hợp thử nghiệm của tôi thất bại.
PASSED: openBrowser
FAILED: FaceBookPageTitleVerification
FAILED: launchGoogle
FAILED: peformSeachAndClick1stLink

Bản demo của TestNG mã không có mức độ ưu tiên theo thứ tự bảng chữ cái

Nếu chúng tôi không đề cập đến bất kỳ mức độ ưu tiên nào, testng sẽ thực thi các phương thức @Test dựa trên thứ tự bảng chữ cái của tên phương thức của chúng bất kể vị trí triển khai của chúng trong mã.

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");
}

}

Đầu ra

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 

Mặc dù chúng tôi đã xác định các phương thức theo cách ngẫu nhiên (c, b, a, e, d), testng đã thực thi các phương thức dựa trên tên phương thức của chúng bằng cách xem xét thứ tự bảng chữ cái và điều tương tự cũng được phản ánh trong kết quả đầu ra.

Cách đặt mức độ ưu tiên trong TestNG

Như bạn đã thấy trong ví dụ trước, cần phải có trình tự để vượt qua kịch bản này, vì vậy chúng ta sẽ sửa đổi đoạn mã trước đó bằng Thông số ưu tiên để mỗi bài kiểm tra phải chạy theo mức độ ưu tiên được chỉ định cho chúng.

Bây giờ như bạn có thể thấy, chúng tôi đã chỉ định Mức độ ưu tiên cho từng trường hợp thử nghiệm, nghĩa là trường hợp thử nghiệm sẽ có giá trị ưu tiên thấp hơn sẽ được thực thi trước tiên.

Ưu tiên trong testNG đang hoạt độ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);				
    }		
}

Giải thích mã

Sau khi chỉ định mức độ ưu tiên cho từng trường hợp thử nghiệm, hãy chạy mã trên bằng testNG như trong Video-2 được đề cập bên dưới.

Tại đây, bạn có thể thấy các trường hợp thử nghiệm được ưu tiên. Trường hợp thử nghiệm có mức độ ưu tiên thấp hơn sẽ được thực thi trước, tức là bây giờ có sự thực thi tuần tự theo mức độ ưu tiên trong các trường hợp thử nghiệm. Do đó, hiện tại tất cả các trường hợp thử nghiệm đều đã thành công.

Lưu ý bảng điều khiển của Eclipse:

Đầu ra :

PASSED: openBrowser
PASSED: launchGoogle
PASSED: peformSearchAndClick1stLink
PASSED: FaceBookPageTitleVerification

Số 0 có mức độ ưu tiên cao nhất (nó sẽ được thực thi trước) và mức độ ưu tiên sẽ tiếp tục dựa trên số đã cho, tức là 0 có mức độ ưu tiên cao nhất hơn 1. Số 1 có mức độ ưu tiên cao nhất hơn 2, v.v.

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");
    }

}

Đầu ra

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

Ở đây chúng tôi đã cung cấp mức độ ưu tiên là 0,1,3,6,9. Vì vậy, phương thức có mức ưu tiên 0 được thực thi trước và sau đó phương thức có mức ưu tiên-1, v.v. Ở đây, tên phương thức theo thứ tự bảng chữ cái sẽ không được xem xét vì chúng tôi đã cung cấp mức độ ưu tiên

Các phương thức có cùng mức độ ưu tiên

Có thể có khả năng các phương thức có thể có cùng mức độ ưu tiên. Trong những trường hợp đó, testng xem xét thứ tự bảng chữ cái của tên phương thức có mức độ ưu tiên như nhau.

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");
    }

}

Đầu ra

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 

Ở đây 'e' và 'd' được thực thi dựa trên các giá trị ưu tiên của chúng. Nhưng các phương thức 'a' và 'c' chứa cùng một giá trị ưu tiên(6). Vì vậy, ở đây testng xem xét thứ tự bảng chữ cái của 'a' và 'c' và thực hiện chúng cho phù hợp.

Kết hợp cả hai phương pháp ưu tiên (có cùng mức độ ưu tiên) và không ưu tiên

Trong trường hợp này, chúng tôi sẽ đề cập đến hai trường hợp trong một lớp thử nghiệm.

  1. Các phương thức có cùng giá trị ưu tiên.
  2. Nhiều hơn một phương pháp không được ưu tiên.
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");
	}
}

Đầu ra:

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

Giải thích:

Ưu tiên đầu tiên: Các phương thức không được ưu tiên: 'c' và 'b': Dựa trên thứ tự bảng chữ cái 'b' được thực thi trước rồi đến 'c'.

Ưu tiên thứ hai: Các phương thức được ưu tiên: 'a', 'e' và 'd': 'e' được thực thi đầu tiên vì nó có mức độ ưu tiên cao nhất(0). Vì mức độ ưu tiên của các phương thức 'a' và 'd' là như nhau nên testng đã xem xét thứ tự bảng chữ cái của tên phương thức của chúng. Vì vậy, giữa chúng, 'a' được thực thi trước và sau đó là 'd'.

Phân biệt chữ hoa chữ thường trong TestNG

Chỉ dành cho thông tin của bạn, có một cú pháp tiêu chuẩn để xác định mức độ ưu tiên trong testNG tức là @Test (ưu tiên=4), giả sử bạn đang định nghĩa nó theo một số cú pháp khác @Test (ƯU TIÊN=1) thì IDE của bạn sẽ hiển thị nó dưới dạng lỗi biên dịch. Tham khảo hình ảnh dưới đây:

Phân biệt chữ hoa chữ thường trong TestNG

Kết luận

Như bạn đã thấy rằng nếu có yêu cầu chạy một tập hợp ca kiểm thử theo trình tự cụ thể thì có thể dễ dàng thực hiện bằng cách sử dụng Ưu tiên sử dụng testNG làm công cụ chạy.

Hướng dẫn này được thực hiện nhờ sự đóng góp của Ramandeep Singh và Rama Krishna gadde

Bản tin Guru99 hàng ngày

Bắt đầu ngày mới của bạn với những tin tức AI mới nhất và quan trọng nhất hiện nay.