Tìm hiểu về testNG framework (Phần 3)

Bây giờ chúng ta tiếp tục với 2 nội dung: TestNG Prioritizing & Sequencing và TestNG Prioritizing & Sequencing.

10. TestNG Prioritizing & Sequencing

A. Multiple Tests

Sẽ có những tình huống khi bạn muốn đặt số kiểm thử dưới một test class đơn và muốn chạy tất cả trong shot duy nhất. Với sự giúp đỡ của annotations '@Test' trong TestNG chúng ta có thể thực hiện nhiều kiểm thử trong cùng một tập tin TestNG duy nhất.

Lấy một ví dụ 4 kiểm thử khác nhau dưới một lớp testng và in chuỗi thử nghiệm trên giao diện điều khiển.

Làm thế nào để làm điều đó ...

  1. Nhấn Ctrl+N , chọn “TestNG Class” dưới TestNG category và click Next. hoặc Nhấp chuột phải vào Test Case folder, Đi tới TestNG và chọn “TestNG Class“.

  1. Nếu dự án của bạn được thiết lập và bạn đã chọn thư mục Test Case trước khi tạo class TestNG sau đó vào thư mục nguồn và tên package sẽ được điền trước trong mẫu đơn. Đặt tên lớp là 'TestNG'. Rời khỏi phần còn lại của các thiết lập bị ảnh hưởng, không kiểm tra cho "@BeforeMethod", "@AfterMethod" cho bây giờ và nhấn Finish. Vậy là xong.

  1. Theo mặc định một class mới sẽ chỉ có một method @Test. Bạn tự thêm hai method nữa và đặt mã của bạn cho chúng. Mã sẽ giống như sau: package automationFramework;

import org.openqa.selenium.WebDriver;

import org.testng.annotations.Test;

public class MultipleTest {

public WebDriver driver;

@Test

public void One() {

  System.out.println("This is the Test Case number One");

}

@Test

public void Two() {

  System.out.println("This is the Test Case number Two");

}

@Test

public void Three() {

  System.out.println("This is the Test Case number Three");

}

@Test

public void Four() {

  System.out.println("This is the Test Case number Four");

}

}

Điều này sẽ cho phép bạn thực hiện tất cả bốn case kiểm thử chỉ với một class testng. Hãy xem trên đầu ra.

Chú ý : Theo mặc định, method chú thích bởi @Test được thực hiện theo thứ tự abc. Hãy xem qua chủ đề tiếp theo để xem làm thế nào để ưu tiên @Test.

B. Sequencing và Prioritizing

Bạn cần phải sử dụng tham số 'priority', nếu bạn muốn các method được thực hiện trong order. Parameters là các từ khóa mà sửa đổi chức năng của method. Chúng ta hãy cùng ví dụ trên và thực hiện tất cả các method @Test trong thứ tự đúng. Đơn giản chỉ cần gán ưu tiên cho tất cả các method @Test bắt đầu từ 0 (Zero).

package automationFramework;

import org.openqa.selenium.WebDriver;

import org.testng.annotations.Test;

public class MultipleTest {

public WebDriver driver;

@Test(priority = 0)

public void One() {

  System.out.println("This is the Test Case number One");

}

@Test(priority = 1)

public void Two() {

  System.out.println("This is the Test Case number Two");

}

@Test(priority = 2)

public void Three() {

  System.out.println("This is the Test Case number Three");

}

@Test(priority = 3)

public void Four() {

  System.out.println("This is the Test Case number Four");

}

}

Lưu ý: TestNG sẽ thực hiện các @Test annotation với giá trị ưu tiên thấp nhất đến lớn nhất.

Đầu ra sẽ là:

C. Bỏ qua một Test Case

Hãy nghĩ về một tình huống mà bạn được yêu cầu phải bỏ qua một hoặc nhiều @Test từ class testng của bạn. Trong testng, bạn có thể dễ dàng có thể xử lý tình trạng này bằng cách thiết lập ‘enabled’ parameter thành 'false' cho ví dụ..:

@Test (enabled = false)

Để sử dụng hai hoặc nhiều tham số trong một chú thích duy nhất, phân tách chúng bằng dấu phẩy:

@Test(priority = 3, enabled = false)

Một lần nữa lấy ví dụ tương tự và thiết lập giá trị sai cho test case thứ ba.

package automationFramework;

import org.openqa.selenium.WebDriver;

import org.testng.annotations.Test;

public class MultipleTest {

public WebDriver driver;

@Test(priority = 0)

public void One() {

  System.out.println("This is the Test Case number One");

}

@Test(priority = 1)

public void Two() {

  System.out.println("This is the Test Case number Two");

}

@Test(priority = 2, enabled = false)

public void Three() {

  System.out.println("This is the Test Case number Three");

}

@Test(priority = 3)

public void Four() {

  System.out.println("This is the Test Case number Four");

}

}

Đầu ra của ví dụ trên:

11. TestNG Reporters & Asserts

TestNG Reporters

TestNG là một Framework và cho đến nay chúng ta đã thấy nhiều tính năng khác nhau mạnh mẽ của TestNG. Nó gần như mang đến cho bạn tất cả những điều quan trọng bạn được yêu cầu để hoàn thành Framework đó.

TestNG Reporter Logs.

TestNG cũng cho chúng ta những cơ sở ghi chép của việc kiểm thử. Ví dụ trong các hoạt động của trường hợp thử nghiệm người dùng muốn một số thông tin được ghi lại trong giao diện điều khiển. Thông tin có thể là bất kỳ chi tiết phụ thuộc vào mục đích của người dùng. Giữ điều này trong tâm trí mà chúng ta đang sử dụng Selenium cho kiểm thử, chúng ta cần những thông tin giúp người dùng hiểu các bước kiểm thử hoặc bất kỳ thất bại trong quá trình thực trường hợp kiểm thử. Với sự giúp đỡ của TestNG Logs nó có thể cho phépghi chép tốt trong quá trình thử Selenium cho từng trường hợp kiểm thử. Trong selen có hai loại ghi chép: ghi chép cấp cao và ghi chép cấp thấp. Trong mức độ ghi chép cấp thấp bạn cố gắng để tạo ra các bản ghi cho mỗi step hoặc mọi hành động bạn thực hiện trong kịch bản tự động của bạn. Trong mức độ ghi chép cấp cao bạn chỉ cần cố gắng chụp sự kiện chính của quá trình kiểm thử.

Mọi người đều có phong cách riêng trong ghi chép của mình. Log4j là một trong những phương pháp ghi chép được được chọn. Và việc kết hợp sử dụng Log4j và testNG để ghi chép được cho là khá hoàn hảo khi sử dụng Log4j cho nhưng ghi chép cấp thấp và testng cho những ghi chép cấp cao.

Làm thế nào để làm điều đó ...

1) Viết một test case cho đăng nhập ứng dụng và dùng Log4j ghi chép lại mỗi step.

2) Chèn log Report về các sự kiện chính của việc kiểm thử.

package automationFramework;

import java.util.concurrent.TimeUnit;

import org.apache.log4j.Logger;

import org.apache.log4j.xml.DOMConfigurator;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.Reporter;

import org.testng.annotations.Test;

import utility.Log;

public class ReporterLogs {

private static WebDriver driver;

private static Logger Log = Logger.getLogger(Log.class.getName());

@Test

public static void test() {

	DOMConfigurator.configure("log4j.xml");

    driver = new FirefoxDriver();

    Log.info("New driver instantiated");

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

    Log.info("Implicit wait applied on the driver for 10 seconds");

    driver.get("http://www.store.demoqa.com");

    Log.info("Web application launched");

    // Our first step is complete, so we produce a main event log here for our reports.

    Reporter.log("Application Lauched successfully | ");

    driver.findElement(By.xpath(".//*[@id='account']/a")).click();

    Log.info("Click action performed on My Account link");

    driver.findElement(By.id("log")).sendKeys("testuser_1");

    Log.info("Username entered in the Username text box");

    driver.findElement(By.id("pwd")).sendKeys("[email protected]");

    Log.info("Password entered in the Password text box");

    driver.findElement(By.id("login")).click();

    Log.info("Click action performed on Submit button");

    // Here we are done with our Second main event

    Reporter.log("Sign In Successful | " );

    driver.findElement(By.id("account_logout"));

    Log.info("Click action performed on Log out link");

    driver.quit();

    Log.info("Browser closed");

    // This is the third main event

    Reporter.log("User is Logged out and Application is closed | ");

}

}

3) Chạy test case bằng cách nhấp chuột phải vào kịch bản lệnh test và chọn Run As> TestNG Test.

Kết xuất Log4j của bạn sẽ như sau:

Nhưng Reporters log của bạn sẽ như sau:

Ghi chép Log4j sẽ giúp bạn báo cáo lỗi hoặc các bước thực hiện trong quá trình kiểm tra, mặt khác Reporters log sẽ giúp bạn chia sẻ trạng thái kiểm tra với leadership. Khi leadership chỉ quan tâm đến kết quả kiểm thử chứ không phải là các bước kiểm thử.

Chúng ta cũng sử dụng Reporters log về xác minh trong quá trình thử nghiệm. Ví dụ: if(Text1.equals(Text2)){

		Reporter.log("Verification Passed forText");

	}else{

		Reporter.log("Verification Failed for Text");

	}

TestNG Asserts

TestNG cũng cho chúng ta quyền quyết định ở giữa việc chạy kiểm thử với sự giúp đỡ của Asserts. Với điều này chúng ta có thể đặt các trạm kiểm soát khác nhau trong quá trình kiểm thử. Asserts là các phương thức phổ biến và được sử dụng phổ biến nhất trong khi tạo các tập lệnh Selenium. Trong Selenium sẽ có rất nhiều tình huống trong quá trình kiểm thử mà bạn chỉ muốn kiểm tra sự hiện diện của một phần tử. Tất cả bạn cần làm là đưa ra một tuyên bố khẳng định về nó để xác minh sự tồn tại của nó.

Các tuyên bố xác nhận khác nhau

**1) Assert.assertTrue() và Assert.assertFalse() ** package automationFramework;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.WebElement;

import org.openqa.selenium.firefox.FirefoxDriver;

import org.testng.Assert;

import org.testng.annotations.Test;

public class Asserts {

private static WebDriver driver;

@Test

public void f() {

  driver = new FirefoxDriver();

  driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  driver.get("http://www.store.demoqa.com");

  // Here driver will try to find out My Account link on the application

  WebElement myAccount = driver.findElement(By.xpath(".//*[@id='account']/a"));

  //Test will only continue, if the below statement is true

  //This is to check whether the link is displayed or not

  Assert.assertTrue(myAccount.isDisplayed());

  //My Account will be clicked only if the above condition is true

  myAccount.click();

}

}

Lưu ý: Xác nhận đúng để tuyên bố thất bại các kiểm thử và ngừng thực hiện các kiểm thử, nếu sản lượng thực tế là sai. Assert.assertFalse () hoạt động đối nghịch với Assert.assertTrue (). Điều đó có nghĩa là nếu bạn muốn kiểm thử của mình chỉ tiếp tục nếu một phần tử nào đó không có mặt trên trang. Bạn sẽ sử dụng Assert false, vì vậy nó sẽ không thành công trong trường hợp phần tử hiện diện trên trang. 2) Assert.assertEquals() @Test

public void test() {

  String sValue = "Lakshay Sharma";

  System.out.println(" What is your full name");

  Assert.assertEquals("Lakshay Sharma", sValue);

  System.out.println(sValue);

}

Nó cũng hoạt động theo cùng một cách như khẳng định đúng và khẳng định thất bại. Nó cũng sẽ ngừng thực hiện, nếu giá trị không bằng nhau và tiếp tục thực hiện, nếu giá trị bằng nhau.

Chúng ta sẽ tiếp tục tìm hiểu về testNG Parameters và testNG Provider trong phần tiếp theo.

Nguồn: http://toolsqa.com/selenium-webdriver/testng-introduction/

***Các phần đã tìm hiểu trước đây: *** https://viblo.asia/p/tim-hieu-ve-testng-framework-phan-1-aWj53Vyol6m https://viblo.asia/p/tim-hieu-ve-testng-framework-phan-2-gGJ59X6PlX2