Nội dung bài học
1. Tổng quan về TestNG
TestNG là 1 công cụ kiểm thử tự động được viết bằng Java, có chức năng quản lý việc tạo test case, thứ tự chạy test case và report sau khi test.
TestNG được xây dựng từ cảm hứng của 2 Framework là JUnit (Java) và NUnit (C#). NG là viết tắt của từ Next Generation.
Xem mindmap để có cái nhìn tổng quan hơn về testNG
Các tính năng nổi bật của TestNG
- Mô tả các thiết lập khác nhau khi kiểm thử phần mềm bằng file XML
- Phân nhóm kiểm thử
- Tạo mối quan hệ ràng buộc lẫn nhau giữa các module
- Xác lập thời điểm cho các xử lý trước và sau
- Cung cấp các chỉ dẫn Annotation – based để nhận diện phương thức test
- TestNG không yêu cầu có phương thức main()
- Các phương thức không cần tĩnh (static)
Một số ưu điểm của TestNG
- Nó cho phép tạo ra các bản báo cáo HTML của tiến trình thực thi.
- Các chú thích giúp việc kiểm thử dễ dàng hơn.
- Các trường hợp kiểm thử có thể được nhóm lại và được ưu tiên dễ dàng hơn.
- TestNG có các annotation logic hơn và dễ hiểu hơn.
- Có thể kiểm thử song song, tạo ra các log bug, tạo data Parameterized action.
- TestNG cho phép bạn xác định các test case phụ thuộc.
Các bước viết một test case sử dụng TestNG
- Viết các test case theo logic của phần cần kiểm thử
- Chèn các các chú thích của TestNG
- Thêm các thông tin bài test của bạn trong file testng.xml
- Chạy testNG
2. Cài đặt TestNG trong Eclipse
Eclipse là một trong những IDE rất phổ biến để phát triển test trong Java.
Và để sử dụng testNG, không phải là sẽ tải về và cài đặt như một tool, mà sẽ giống như một cái phần mềm nho nhỏ được cài đặt tích hợp trong Eclipse.
Để cài đặt thành công TestNG thì chúng ta cần chuẩn bị:
- Cài đặt môi trường Java (bài 1)
- Cấu hình Java (bài 1)
- Cài đặt Eclipse (bài 1)
- Cài đặt Selenium Webdriver (bài 4) - Có thể cài sau TestNG vẫn được
- Cài đặt TestNG
Bắt đầu nhé
1. Mở Eclipse IDE lên -> click Help > Eclipse Marketplace…
2. Gõ TestNG và nhấn Go để tìm kiếm framework như hình bên dưới
3. Nhấn Install để cài đặt
Tiến trình đang chạy để xác nhận chọn gói TestNG for Eclipse:
4. Các bạn nhấn chọn hết và "Confirm" để xác nhận bước tiếp theo
5. Chọn "I accept..." và nhấn "Finish"
Nếu có cửa sổ bật lên xác nhận như hình bên dưới thì các bạn chọn "Install anyway"
Sau khi khởi động lại, hãy xác minh xem TestNG có thực sự được cài đặt thành công hay không.
Bấm vào Window > Show View > Other
Sau đó, mở thư mục Java và xem TestNG có hiện lên chưa.
HOÀN TẤT RỒI CÒN GÌ NỮA ĐÂU :))
3. Sử dụng TestNG
3.1 Tạo Test Case bằng cách sử dụng chú thích TestNG
Bây giờ, chúng ta sẽ tìm hiểu cách tạo test case đầu tiên của mình bằng cách sử dụng Chú thích (Annotation) TestNG trong Selenium
Trước tiên chúng ta tạo một Project TestNG mới trong Eclipse và đặt tên là "FirstTestNGProject".
Thiết lập một Project TestNG mới
Bước 1: Nhấp vào File > New > Java Project
Bước 2: Gõ "FirstTestNGProject" làm Tên dự án, sau đó nhấp vào Next.
Bước 3: Bây giờ chúng ta sẽ bắt đầu thêm Thư viện TestNG vào dự án của mình. Nhấp vào tab "Libraries", sau đó nhấp vào "Add Library…"
Bước 4: Trên hộp thoại Thêm Thư viện, chọn "TestNG" và nhấp vào Next.
Bước 5: Nhấp vào Finish.
Bạn sẽ thấy TestNG hiển thị trong danh sách Libraries.
Bước 6: Bây giờ chúng ta sẽ thêm các tệp JAR có chứa API Selenium. Vào đây tải https://www.selenium.dev/downloads/
Phần này chúng ta đã cài đặt Selenium vào Eclipse bài trước chắc quen rồi. Quên thì lật lại coi :))
=> [Selenium Java] Lesson 4: Cài đặt môi trường Selenium với Java
Bước 7: Nhấp vào Apply và Close.
Cách tạo file class test mới với TestNG
Bước 1: Nhấp chuột phải vào thư mục gói "src" rồi chọn New > Other…
Bước 2: Nhấp vào thư mục TestNG và chọn tùy chọn "TestNG class". Nhấn Next.
Bước 3: Nhập các giá trị như mẫu bên dưới và nhấp vào Finish.
Eclipse sẽ tự động tạo mẫu cho tệp TestNG cho chúng ta như hiển thị bên dưới.
Code mẫu chạy thử nào:
package testngpackage;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.*;
public class AutomationTestNG {
public String baseUrl = "https://anhtester.com";
String driverPath = "D:\\TESTER\\SeleniumJava\\Setup\\chromedriver.exe";
System.setProperty("webdriver.chrome.driver", driverPath);
public WebDriver driver ;
@Test
public void verifyHomepageTitle() {
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.navigate().to(baseUrl);
Thread.sleep(2000);
String expectedTitle = "Anh Tester - Automation Testing";
String actualTitle = driver.getTitle();
Assert.assertEquals(actualTitle, expectedTitle);
Thread.sleep(2000);
driver.quit();
}
}
- TestNG không yêu cầu bạn phải có phương thức main ().
- Các phương thức không cần phải tĩnh.
- Chúng ta đã sử dụng chú thích @Test. (@Test được sử dụng để cho biết rằng phương thức bên dưới nó là một trường hợp thử nghiệm)
Chạy thử nghiệm
Để chạy thử nghiệm, chỉ cần chạy tệp trong Eclipse như bạn thường làm. Eclipse sẽ cung cấp hai đầu ra
- Một trong cửa sổ Console
- Một trên cửa sổ TestNG Results.
Kiểm tra các Report được tạo bởi TestNG
Cửa sổ Console trong Eclipse cung cấp một báo cáo dựa trên văn bản về kết quả trường hợp thử nghiệm của chúng tôi trong khi cửa sổ Kết quả TestNG cung cấp cho chúng ta một báo cáo đồ họa.
Tạo HTML Report
TestNG có khả năng tạo báo cáo ở định dạng HTML.
Bước 1: Sau khi chạy FirstTestNGFile mà chúng ta đã tạo ở phần trước, nhấp chuột phải vào tên dự án (FirstTestNGProject) trong cửa sổ Project Explorer rồi nhấp vào tùy chọn "Refresh".
Bước 2: Lưu ý rằng một thư mục "test-output" đã được tạo. Mở rộng nó và tìm kiếm tệp index.html. Tệp HTML này là báo cáo kết quả của lần chạy thử nghiệm gần đây nhất.
Bước 3: Nhấp đúp vào tệp index.html đó để mở tệp trong trình duyệt web được tích hợp sẵn của Eclipse. Bạn có thể làm mới trang này bất kỳ lúc nào sau khi chạy lại bài kiểm tra của mình bằng cách chỉ cần nhấn F5 giống như trong các trình duyệt web thông thường.
4. Cách run test bằng package, class, method trong file testng.xml
Tạo Project demo của chúng ta:
Trong mỗi Class, ta chỉ cần add 2 Method.
@Test
public void firstTest() {
System.out.println("First test method");
}
@Test
public void secondTest() {
System.out.println("Second test method");
}
I. Cách tạo file testng.xml
Lưu ý:
- File này tên là gì cũng được, không nhất thiết phải là testng.xml, miễn là nó là file xml. Tuy nhiên, nên tránh lấy trùng tên với file config của thằng khác ví dụ như file pom.xml của Maven.
- File này nằm ở đâu trong Project cũng được, không nhất thiết phải nằm ở ngay dưới folder Project, nhưng tốt nhất là ko nên để nó trong package code nào, nên tách riêng ra.
Nội dung của file testng.xml:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1">
<test name="FirstTest">
<classes>
<class name="firstpackage.FirstClass" />
</classes>
</test>
</suite>
- Dòng đầu tiên, có thể có hoặc không, nhưng nếu bạn ko có thì khi run TestNG sẽ thông báo “It is strongly recommended to add “<!DOCTYPE suite SYSTEM “http://testng.org/testng-1.0.dtd” >” at the top of your file, otherwise TestNG may fail or not work as expected.“
- TestNG bắt buộc phải có khai báo <suite> và <test>, nếu bạn bỏ 1 trong 2 cái khai báo đó thì TestNG sẽ báo lỗi. Lưu ý: <test> ở đây không phải là 1 testcase, testcase là cái viết ở Method.
- <suite> và <test> có attribute name, có thể đặt tên tùy ý.
- Một file TestNG chỉ có 1 <suite> duy nhất và <suite> có thể có nhiều <test>.
- Trong Test có thể có 0 hoặc nhiều đối tượng test: <packages>, <classes>, <methods>.
II. Cách run test theo Class
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1">
<test name="FirstTest">
<classes>
<class name="firstpackage.FirstClass" />
<class name="firstpackage.SecondClass" />
</classes>
</test>
</suite>
- Đối tượng phía trong của <test> là <classes>
- Trong <classes> sẽ điền list các class mà ta muốn run test. Name là [packageName].[className]. Ví dụ: firstpackage.FirstClass
Khi run xong, kết quả sẽ hiển thị như sau:
III. Cách run test theo package
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1">
<test name="FirstTest">
<packages>
<package name="firstpackage" />
<package name="secondpackage" />
</packages>
</test>
</suite>
- Đối tượng phía trong của <test> là <packages>
- Trong <packages> sẽ điền list các package mà ta muốn run test. Name là [packageName] Ví dụ: firstpackage
Khi run xong, kết quả sẽ hiển thị như sau:
IV. Cách run test theo Method
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Suite" verbose="1">
<test name="FirstTest">
<classes>
<class name="firstpackage.FirstClass">
<methods>
<include name="firstTest" />
</methods>
</class>
<class name="secondpackage.FirstClass">
<methods>
<include name="firstTest" />
</methods>
</class>
</classes>
</test>
</suite>
- Để run được riêng <method> thì phải có <class>
- Method muốn được run thì phải sử dụng <include>
V. Cách run test hỗn hợp package, class và method
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Combine Suite" verbose="1">
<test name="Combine Test">
<packages>
<package name="firstpackage" />
</packages>
<classes>
<class name="secondpackage.FirstClass" />
<class name="thirdpackage.FirstClass">
<methods>
<include name="firstTest" />
</methods>
</class>
</classes>
</test>
</suite>
- <packages> và <classes> được khai báo cùng cấp, ngang hàng với nhau. <class> không phải khai báo dưới <packge>. Tuy nhiên khai báo <method> thì phải nằm dưới <class>
Đây là kết quả:
Bạn sẽ thấy là TestNG không run theo thứ tự test mà bạn đã config trong TestNG từ firstpackage –> secondpackage –> thirdpackage. Lý do là vì với TestNG thì những thằng nằm dưới <test> là ngang hàng, lúc đó nó chỉ quan tâm đến tên của Class và thứ tự theo bảng chữ cái (Aphabetically). Và các methods trong 1 Class cũng được run theo thứ tự bảng chữ cái. Đó là lý do vì sao nhiều bạn khi mới học cảm thấy khó chịu vì nó không run theo thứ tự từ trên xuống dưới. =))) Để config run theo thứ tự ta mong muốn sẽ được nói ở 1 bài khác, cách bài này không xa lắm.
VI. Cách sử dụng chức năng Include và Exclude
Include: được dùng trong các trường hợp sau đây:
- Trong 1 package có nhiều package, nhưng chỉ muốn run số ít package trong đó.
- Trong 1 Class có nhiều method, chỉ muốn run số ít method (xem lại mục IV ở trên).
Exclude: được dùng trong các trường hợp sau đây:
- Trong 1 package có nhiều package, nhưng muốn không run một vài package trong đó.
- Trong 1 Class có nhiều method, nhưng muốn không run một vài method.
Ví dụ:
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="Exclude Method Suite" verbose="1">
<test name="Exclude Method Test">
<classes>
<class name="firstpackage.FirstClass">
<methods>
<exclude name="firstTest" />
</methods>
</class>
</classes>
</test>
</suite>
Đây là kết quả:
NOTE: Một project có thể có nhiều file config.
An build thêm cái website này hỗ trợ các bạn chạy auto test nè:
Anh Tester
facebook.com/anhtester
Đườ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