Xem thêm

Tìm hiểu về TestNG Framework (Phần 4): TestNG Parameters và TestNG DataProviders

Huy Erick
Như chúng ta đã biết, Parameterization là một phần quan trọng trong việc thực hiện kiểm thử và tự động hóa kiểm thử. Nó cho phép chúng ta thực hiện các bài kiểm tra nhiều...

Tìm hiểu về TestNG Framework (Phần 4)

Như chúng ta đã biết, Parameterization là một phần quan trọng trong việc thực hiện kiểm thử và tự động hóa kiểm thử. Nó cho phép chúng ta thực hiện các bài kiểm tra nhiều lần với các giá trị đầu vào và xác nhận khác nhau. Với Selenium WebDriver, chúng ta phải tự thêm hỗ trợ kiểm tra dữ liệu theo các bài kiểm tra tự động của mình vì nó là một framework kiểm thử tự động, không phải là một công cụ sẵn có sẵn. Trong bài viết này, chúng ta sẽ tìm hiểu về hai tính năng hữu ích khác của TestNG: TestNG Parameters và TestNG DataProviders.

A. TestNG Parameters

Một lần nữa, TestNG mang đến cho chúng ta một tính năng thú vị khác được gọi là TestNG Parameters. TestNG cho phép chúng ta truyền các tham số trực tiếp cho các phương thức kiểm tra thông qua tệp testng.xml của chúng ta.

Làm thế nào để sử dụng?

Hãy xem xét một ví dụ rất đơn giản về ứng dụng LogIn, nơi tên người dùng và mật khẩu là cần thiết để xác thực người dùng.

  1. Tạo một bài kiểm tra ứng dụng OnlineStore của tôi để thực hiện LogIn và nhận hai đối số chuỗi là tên người dùng và mật khẩu.
  2. Cung cấp Tên đăng nhập và Mật khẩu dưới dạng tham số bằng TestNG Annotation.
package automationFramework;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.Test;
import org.testng.annotations.Parameters;

public class TestngParameters {
  private static WebDriver driver;

  @Test
  @Parameters({ "sUsername", "sPassword" })
  public void test(String sUsername, String sPassword) {
    driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://www.store.demoqa.com");
    driver.findElement(By.xpath(".//*[@id='account']/a")).click();
    driver.findElement(By.id("log")).sendKeys(sUsername);
    driver.findElement(By.id("pwd")).sendKeys(sPassword);
    driver.findElement(By.id("login")).click();
    driver.findElement(By.xpath(".//*[@id='account_logout']/a")).click();
    driver.quit();
  }
}
  1. Tham số này sẽ được truyền giá trị từ tệp testng.xml mà chúng ta sẽ thấy trong bước tiếp theo.
<suite name="Suite">
  <test name="ToolsQA">
    <parameter name="sUsername" value="testuser_1"/>
    <parameter name="sPassword" value="Test@123"/>
    <classes>
      <class name="automationFramework.TestngParameters" />
    </classes>
  </test>
</suite>
  1. Bây giờ chạy testng.xml, nó sẽ chạy phương thức test và TestNG sẽ cố gắng tìm một tham số có tên sUsername và sPassword.

B. TestNG DataProviders

Khi bạn cần truyền các tham số phức tạp hoặc cần tạo ra các tham số từ Java (ví dụ: các đối tượng phức tạp, đối tượng đọc từ tệp thuộc tính hoặc cơ sở dữ liệu, v.v...), trong những trường hợp đó, bạn có thể truyền các tham số thông qua DataProviders. DataProvider là một phương thức được chú thích bằng @DataProvider và trả về một mảng các đối tượng.

Hãy xem xét một ví dụ khác về việc sử dụng DataProviders để thực hiện LogIn.

Làm thế nào để sử dụng?

  1. Xác định phương thức credentials() là một DataProvider bằng cách sử dụng @DataProvider annotation. Phương thức này trả về một mảng của mảng đối tượng.
package automationFramework;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;

public class DataProviderTest {
  private static WebDriver driver;

  @DataProvider(name = "Authentication")
  public static Object[][] credentials() {
    return new Object[][] { { "testuser_1", "Test@123" }, { "testuser_1", "Test@123" }};
  }

  @Test(dataProvider = "Authentication")
  public void test(String sUsername, String sPassword) {
    driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://www.store.demoqa.com");
    driver.findElement(By.xpath(".//*[@id='account']/a")).click();
    driver.findElement(By.id("log")).sendKeys(sUsername);
    driver.findElement(By.id("pwd")).sendKeys(sPassword);
    driver.findElement(By.id("login")).click();
    driver.findElement(By.xpath(".//*[@id='account_logout']/a")).click();
    driver.quit();
  }
}
  1. Chạy thử bằng cách nhấp chuột phải vào test script và chọn Run As > TestNG Test. Cho nó vài phút để hoàn thành, và sau khi hoàn thành, kết quả sẽ hiển thị trong cửa sổ TestNG Result.

Lưu ý: Khi dữ liệu thử nghiệm được cung cấp hai lần, thử nghiệm sẽ thực hiện hai lần hoàn toàn.

Kết luận

Trong phần này, chúng ta đã tìm hiểu hai tính năng quan trọng của TestNG: TestNG Parameters và TestNG DataProviders. Như chúng ta đã thấy, TestNG có thể giúp ta truyền và sử dụng các tham số trong các phương thức kiểm tra một cách dễ dàng và linh hoạt. Điều này giúp chúng ta tổ chức, quản lý và chạy các bài kiểm tra tự động một cách hiệu quả. Hãy tiếp tục khám phá các tính năng khác của TestNG trong các bài viết tiếp theo.

1