NỘI DUNG BÀI HỌC

Trong TestNG Framework, Assert là một phần quan trọng giúp kiểm tra kết quả mong đợi trong các bài kiểm thử tự động. Nó được sử dụng để xác minh rằng giá trị thực tế (actual value) khớp với giá trị mong đợi (expected value). Nếu một điều kiện không đúng, Assert sẽ ném ra một ngoại lệ (AssertionError) và bài kiểm thử sẽ thất bại.

Ở những bài trước thì mình đã dùng IF Else để verify kết quả một cách thủ công hơi lâu và dài dòng. Giờ đây tới TestNG thì chúng ta chỉ cần sử dụng các method như assertEquals(), assertTrue() chuyên dụng hơn, hay hơn và đây là cách dùng chuẩn xác nhất.

https://javadoc.io/doc/org.testng/testng/7.4.0/index.html



✅Các loại Assert trong TestNG


1. Hard Assert

Khẳng định cứng là những xác nhận dừng việc thực thi kiểm tra khi một câu lệnh khẳng định không thành công và các câu lệnh khẳng định tiếp theo sẽ không được thực hiện.

Nó đóng một vai trò quan trọng trong các dự án mà chúng ta có một phần tử mà không có sự xác nhận của nó, việc khẳng định các phần tử khác là vô ích.

Một ví dụ điển hình trong những trường hợp như vậy là chức năng đăng nhập. Ví dụ: nếu mình muốn xem các danh sách Client thì phải thông qua được các xác nhận bước Login. Nếu Login có gì đó sai thì không thể đi tiếp tới Client được.

Xác nhận cứng là loại xác nhận mặc định trong TestNG. Các hàm xác thực khẳng định bên dưới:

  • assertEquals(actual, expected)

Dùng để so sánh bằng nhau 2 phần tử có cùng TYPE. Xin nhắc lại, chỉ so sánh 2 phần tử có cùng Type. Method này có thể so sánh rất nhiều loại: dữ liệu nguyên thủy như int, long, double, char, boolean; String; Object; Collections; Maps…
Lưu ý: cái gì phần tử thực tế (actual), ta đặt ở vị trí argument 1. Cái nào là phần tử ta mong đợi (expected), ta đặt ở argument 2.

  • assertNotEquals(actual, expected)

Tương tự như phần trên, chỉ khác là so sánh KHÔNG bằng nhau.

  • assertTrue(boolean condition)

Ta dùng trong trường hợp, ta mong đợi kết quả trả về là true. Nó tương đương với việc sử dụng assertEquals(actual, expected) khi actual và expected có TYPE là boolean.

  • assertFalse(boolean condition)

Ta dùng trong trường hợp, ta mong đợi kết quả trả về là false.

  • assertNull(Object)

Ta sử dụng trong trường hợp ta mong đợi rằng cái Object ta đang nhắm tới là Null.

  • assertNotNull(Object)

Ta sử dụng trong trường hợp ta mong đợi rằng cái Object ta đang nhắm tới là Not Null.

 

import org.testng.Assert;
import org.testng.annotations.Test;

public class TestHardAssert extends BaseTest{

    @Test(priority = 1)
    public void testHardAssert() {

        driver.get("https://anhtester.com");

        String expectedTitle = "Anh Tester";
        String originalTitle = driver.getTitle();

        System.out.println("*** Checking For The Title ***");

        Assert.assertEquals(originalTitle, expectedTitle);
    }
}

 

2. Soft Assert

Khẳng định mềm trái ngược với khẳng định cứngTrong các xác nhận mềm, các xác nhận tiếp theo vẫn tiếp tục chạy ngay cả khi một xác nhận xác nhận không thành công, tức là quá trình thực thi kiểm tra không dừng lại. Xác nhận mềm không bao gồm theo mặc định trong TestNG . Đối với điều này, bạn cần bao gồm gói org.testng.asserts.Softassert . Vì vậy, khi nào chúng ta nên sử dụng khẳng định mềm trong TestNG? Chúng tôi sử dụng các xác nhận mềm khi chúng tôi không quan tâm đến sự thất bại của các xác thực cụ thể và muốn quá trình thực thi kiểm tra tiếp tục và cũng muốn xem các lỗi ngoại lệ.

Một ví dụ điển hình là nhiều xác nhận trên một biểu mẫu đầu vào. Ngoài ra, cần lưu ý rằng trên nhiều nền tảng, bạn sẽ thấy " xác minh " trong khi tìm hiểu về các xác nhận. Xác nhận mềm còn được gọi là " Xác minh " và do đó đừng nhầm lẫn về điều này.


Làm thế nào để sử dụng Soft Assert trong TestNG?

Đoạn mã sau sẽ chứng minh việc sử dụng các xác nhận mềm trong TestNG. Trong mã này, chúng ta đang xác thực tiêu đề của trang web, bỏ qua hai tiêu đề dự kiến ​​khác nhau.

import org.testng.asserts.SoftAssert;
import org.testng.annotations.Test;

public class TestSoftAssert extends BaseTest {

    @Test(priority = 1)
    public void testSoftAssert() {

        driver.get("https://anhtester.com");

        SoftAssert softassert = new SoftAssert();

        String expectedTitle = "Anh Tester";
        String originalTitle = driver.getTitle();

        System.out.println("*** Checking For The First Title ***");

        softassert.assertEquals(originalTitle, expectedTitle);

        System.out.println("*** Checking For The Second Title ***");

        softassert.assertEquals(originalTitle, "Anh Tester - Automation Testing");

        softassert.assertAll();
    }
}

 

Các điểm quan trọng cần nhớ liên quan đến khẳng định mềm mà chúng ta có thể nhận thấy trong đoạn mã trên là:

  • Xác nhận mềm yêu cầu nhập bên ngoài gói import org.testng.asserts.SoftAssert ;.
  • Khởi tạo một đối tượng của SoftAssert để chạy các câu lệnh khẳng định .
  • Câu lệnh object.assertAll() được yêu cầu để xem các ngoại lệ; nếu không, người kiểm tra sẽ không biết điều gì đã đạt và điều gì không thành công .


✅Ứng dụng Assert vào test automation

Mình đã từng viết if else và dùng các method isDisplayed() ở các page với việc return lại kiểu Boolean. Có nghĩa là nếu Page đó đang được mở ra thì isDisplayed() sẽ return true và ngược lại.


Class Add Employee:

Trước đây mình muốn kiểm tra đúng sai hay so sánh thì sùng IF ELSE

public void verifyCheckbox() {

WebElement msgDisplayed = driver.findElement(By.xpath("//div[@id='txtAge']"));

   if (msgDisplayed.isDisplayed() == true) {
      System.out.println("Vừa chọn nó xong.");
      System.out.println(msgDisplayed.getText());
   }
}
 

Từ đấy, khi coa Assert thì mình sẽ sửa lại Test Case và sử dụng assertTrue

@Test
public void verifyCheckbox() {
    WebElement msgDisplayed = driver.findElement(By.xpath("//div[@id='txtAge']"));
    
    Assert.assertTrue(msgDisplayed .isDisplayed());
}​


Tương tự ta sửa cho Test Case dạng so sánh bằng.

Trước đây:

public class AnhTesterPage {

    WebElement button_CheckAll = driver.findElement(By.xpath("//input[@id='check1']"));

    System.out.println(button_CheckAll.getAttribute("value")); // get "Check All"
    
    if (button_CheckAll.getAttribute("value").trim().toString().equals("Check All")) {
	   button_CheckAll.click(); // Click để check all
    } else {
	    System.out.println("Không phải Text/ Không lấy được Text");
    }
}​

Bây giờ, ta cũng sửa Test Case trên sử dụng assertEquals

@Test
public void AnhTesterPage() {

	    WebElement button_CheckAll = driver.findElement(By.xpath("//input[@id='check1']"));

	    System.out.println(button_CheckAll.getAttribute("value")); // get "Check All";
	    
	    Assert.assertEquals(button_CheckAll.getAttribute("value").trim().toString(), "Check All");

	    button_CheckAll.click(); // Click để check all​
	    
}

 
Ví dụ Fail ❌

package anhtester.com;

import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;

public class TestAssert extends SetupBrowser {

    @Test(priority = 1)
    public void RunTestFail() {
        driver.get("https://anhtester.com");

        String expectedTitle = "Anh Tester";
        String originalTitle = driver.getTitle();

        System.out.println("*** Checking For The Title ***");

        Assert.assertEquals(originalTitle, expectedTitle);

        driver.findElement(By.id("btn-login")).click();
    }
}


Ví dụ Pass ✅

package anhtester.com;

import org.openqa.selenium.By;
import org.testng.Assert;
import org.testng.annotations.Test;

public class TestAssert extends SetupBrowser {

    @Test(priority = 2)
    public void RunTestPass() {
        driver.get("https://anhtester.com");

        String expectedTitle = "Anh Tester - Automation Testing";
        String originalTitle = driver.getTitle();

        System.out.println("*** Checking For The Title ***");

        Assert.assertEquals(originalTitle, expectedTitle);

        driver.findElement(By.id("btn-login")).click();
    }
}

 
Ví dụ Add Client với Hard và Soft Assert

package anhtester.com.bai11_asserts;

import anhtester.com.SetupBrowser;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.testng.asserts.SoftAssert;

public class TestAsserts extends SetupBrowser {

    @Test
    public void RunTestAssert() throws InterruptedException {

        //Khai báo đối tượng của SoftAssert
        SoftAssert softassert = new SoftAssert();

        driver.get("https://crm.anhtester.com/signin");
        Thread.sleep(500);

        //Login account
        driver.findElement(By.xpath("//input[@id='email']")).sendKeys("admin02@mailinator.com");
        driver.findElement(By.xpath("//input[@id='password']")).sendKeys("123456");
        Thread.sleep(500);
        driver.findElement(By.xpath("//button[@type='submit']")).click();
        Thread.sleep(500);

        //Chọn menu Client và nhấn Add button
        driver.findElement(By.xpath("//span[text()='Clients']")).click();
        Thread.sleep(500);
        driver.findElement(By.xpath("//a[normalize-space()='Add client']")).click();
        Thread.sleep(1000);

        //Kiểm tra giá trị Header dialog Add Client
        WebElement header = driver.findElement(By.xpath("//h4[@id='ajaxModalTitle']"));
        //Assert.assertEquals(header.getText(), "Add client");  //Hard Assert
        softassert.assertEquals(header.getText(), "Add client"); //Soft Assert

        //Điền giá trị cho Form Add Client
        driver.findElement(By.id("company_name")).sendKeys("Selenium Java 06122021");
        Thread.sleep(500);
        //Click dropdown
        driver.findElement(By.xpath("//div[@id='s2id_created_by']")).click();
        Thread.sleep(500);
        //SetText input
        driver.findElement(By.xpath("//input[@id='s2id_autogen2_search']")).sendKeys("Admin 01");
        Thread.sleep(500);
        //Dùng lệnh Enter
        driver.findElement(By.xpath("//div[@id='select2-drop']//input")).sendKeys(Keys.ENTER);
        Thread.sleep(500);
        driver.findElement(By.id("address")).sendKeys("Phuong 6");
        Thread.sleep(500);
        driver.findElement(By.id("city")).sendKeys("Cao Lanh");
        Thread.sleep(500);
        driver.findElement(By.id("state")).sendKeys("Dong Thap");
        Thread.sleep(500);
        //Click Save button
        driver.findElement(By.xpath("//button[normalize-space()='Save']")).click();

        Thread.sleep(2000);

        //Click tab Clients
        driver.findElement(By.xpath("//a[contains(text(),'Clients')]")).click();
        Thread.sleep(500);
        //Search giá trị Company Name vừa Add
        driver.findElement(By.xpath("//input[@placeholder='Search']")).sendKeys("Selenium Java 06122021");
        Thread.sleep(500);
        //Check text của item hiển thị sau khi search
        String item_client = driver.findElement(By.xpath("//table[@id='client-table']//tr[1]/td[2]//a")).getText();
        //Kiểm tra giá trị Text
        //Assert.assertTrue(item_client.equals("Selenium Java 06122021"));
        //Assert.assertEquals(item_client, "Selenium Java 06122021");

        softassert.assertTrue(item_client.equals("Selenium Java 06122021"));

        Thread.sleep(1000);

        softassert.assertAll(); //Bắt buộc
    }

}

 

Teacher

Teacher

Anh Tester

Software Quality Engineer

Đường dẫu khó chân vẫn cần bước đi
Đời dẫu khổ tâm vẫn cần nghĩ thấu

Cộng đồng Automation Testing Việt Nam:

🌱 Telegram Automation Testing:   Cộng đồng Automation Testing
🌱 
Facebook Group Automation: Cộng đồng Automation Testing Việt Nam
🌱 
Facebook Fanpage: Cộng đồng Automation Testing Việt Nam - Selenium
🌱 Telegram
Manual Testing:   Cộng đồng Manual Testing
🌱 
Facebook Group Manual: Cộng đồng Manual Testing Việt Nam

Chia sẻ khóa học lên trang

Bạn có thể đăng khóa học của chính bạn lên trang Anh Tester để kiếm tiền

Danh sách bài học