Tìm hiểu về testNG framework (Phần 2)
Bài đăng này đã không được cập nhật trong 3 năm
6. TestNG Test Suite
Trong bất kỳ dự án nào, sẽ đến lúc bạn cần phải thực hiện rất nhiều trường hợp thử nghiệm để có thể đảm bảo dự án đi đến hồi kết. Chạy một tập hợp các test case với nhau được gọi là thực hiện một Test suite. Các trường hợp thử nghiệm có thể phụ thuộc lẫn nhau hoặc có thể phải được thực hiện theo một trật tự nhất định. TestNg cung cấp cho ta khả năng để quản lý thực hiện kiểm tra của mình.
Trong khung TestNG, chúng ta cần tạo tệp testng.xml để tạo và xử lý nhiều lớp kiểm tra. Đây là tệp xml, nơi bạn sẽ định cấu hình chạy thử, đặt phụ thuộc kiểm tra, bao gồm hoặc loại trừ bất kỳ kiểm tra, phương pháp, lớp học hoặc gói và đặt ưu tiên vv
Làm thế nào để làm nó… Bước 1: Tạo một file TestNG XML
- Click chuột phải trên Projecct Folder, đi đến New và chọn File như hình bên dưới
- Trong New file wizard, thêm 1 file với tên là testng.xml giống bên dưới và chọn nút Finnish
- Như vậy sẽ có một file testng.xml được thê vào thư mục dự án của bạn
Bước 2: Viết xml code
- Bây giờ, thêm vào file testng.xml những mã code như bên dưới Lưu ý: Bạn có thể tùy chọn đặt tên cho Test suite và Test name như mong muốn của bạn
- Sau khi đặt tên thích hợp, bây giờ tệp testng.xml của bạn sẽ giống như sau: Hy vọng bạn đã hiểu mã xml, vì nó là hệ thống phân cấp khá đơn giản:
Thẻ đầu tiên là thẻ Suite <suite>, dưới đó là thẻ Test <test> và sau đó là thẻ Class <classes>. Bạn có thể đặt bất kỳ tên nào cho suite và test nhưng bạn cần phải cung cấp tên chính xác cho thẻ <classes> đó là sự kết hợp của Package và tên Test case. Bước 3: Thực thi test.xml Bây giờ là lúc để chạy xml. Chạy bằng cách click chuột phải trên file testng.xml và chọn Run As > testNG Suite Sẽ mất vài giây để bắt đầu công việc thực hiện testng và bạn sẽ nhận thấy rằng việc test của bạn sẽ chạy và hoàn tất. Một khi việc thực hiện hoàn tất, bạn có thể xem kết quả execution test trong bảng điều khiển TestNg. Đây chỉ là một ví dụ đơn giản của việc tạo và chạy testng.xml trong Eclipse. Bước 4: Build một Test Suite Bây giờ, khi bạn đã nắm được cách thức build xml, ta sẽ học cách build một Test Suite sử dungnj testng.xml. Đây không phải là một nhiệm vụ phức tạp, tất cả những gì bạn cần làm là thêm các trường hợp thử nghiệm vào tệp xml của bạn trong thẻ <classes>. Các thử nghiệm trên sẽ chỉ thực hiện các xét nghiệm, được đề cập trong testng.xml. Phần còn lại của các trường hợp thử nghiệm trong gói 'automationFramework' sẽ không bị ảnh hưởng.
7. TestNG Annotations, Groups và OnDepends
Trong chương giới thiệu TestNG chúng ta đã gặp các chú thích khác nhau được sử dụng trong TestNG Framework nhưng cho đến nay chúng ta đã sử dụng chỉ ba (Before, After và Test). Mặc dù đây là các chú thích được sử dụng nhiều nhất nhưng không thể biết bạn sẽ đi xa với khuôn khổ bao nhiêu và có thể sử dụng các chú thích TestNG hữu ích khác.
Trước đó, tôi muốn bạn đưa ra một ý tưởng nhỏ về Annotations hierarchy hoặc Annotations levels trong TestNG. Có thể nói rằng, @Test là annotation nhỏ nhất ở đây. @Method sẽ được thực thi trước tiên, trước và sau việc thực thi của @Test. Giống như cách mà @Class sẽ được thực thi trước, trước và sau việc thực thi của @Method. Ví dụ đơn giản dưới đây sẽ giúp bạn hiểu rõ hơn.
package automationFramework;
import org.testng.annotations.AfterClass;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.AfterSuite;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class Sequencing {
@Test
public void testCase1() {
System.out.println("This is the Test Case 1");
}
@Test
public void testCase2() {
System.out.println("This is the Test Case 2");
}
@BeforeMethod
public void beforeMethod() {
System.out.println("This will execute before every Method");
}
@AfterMethod
public void afterMethod() {
System.out.println("This will execute after every Method");
}
@BeforeClass
public void beforeClass() {
System.out.println("This will execute before the Class");
}
@AfterClass
public void afterClass() {
System.out.println("This will execute after the Class");
}
@BeforeTest
public void beforeTest() {
System.out.println("This will execute before the Test");
}
@AfterTest
public void afterTest() {
System.out.println("This will execute after the Test");
}
@BeforeSuite
public void beforeSuite() {
System.out.println("This will execute before the Test Suite");
}
@AfterSuite
public void afterSuite() {
System.out.println("This will execute after the Test Suite");
}
}
Output của các dòng lệnh ở trên sẽ giống như sau: Rõ ràng rằng @Suiite Annotation được thực thi đầu tiên và cuối cùng. Sau đó, @Test đã theo sau bởi @class. Bây giờ nếu bạn chú ý sẽ thấy @Method đã được thực thi 2 lần. Giống như @Test là một method trong class, do vậy @Method will luôn luôn được thực thi cho mỗi method @Test.
8. Test Case Grouping
Groups là một chú thích nữa của TestNG, thứ sẽ được sử dụng trong việc thực thi của multile tests. Giả sử bạn có 100 tests của class Vehical và trong đó có 10 method của Car, 10 method của Scooter. Bạn thường sẽ chạy tất cả scooter tests cùng nhau trong một batch. Và bạn muốn tất cả sẽ được đặt trong một test suite đơn lẻ. Với sự trợ giúp của grouping bạn có thể dễ dàng khắc phục tình trạng này. Làm thế nào để làm nó… Bước 1: Tạo 2 meothods cho Car, 2 methods cho Scooter và một method cho sự kết hợp giữa Car và Sedan car. Bước 2: Nhóm chúng lại một cách riêng biệt bằng việc sử dụng (group = {"Group Name"}) package automationFramework;
import org.testng.annotations.Test;
public class Grouping {
@Test (groups = { "Car" })
public void Car1() {
System.out.println("Batch Car - Test car 1");
}
@Test (groups = { "Car" })
public void Car2() {
System.out.println("Batch Car - Test car 2");
}
@Test (groups = { "Scooter" })
public void Scooter1() {
System.out.println("Batch Scooter - Test scooter 1");
}
@Test (groups = { "Scooter" })
public void Scooter2() {
System.out.println("Batch Scooter - Test scooter 2");
}
@Test (groups = { "Car", "Sedan Car" })
public void Sedan1() {
System.out.println("Batch Sedan Car - Test sedan 1");
}
} Bước 3: Tạo một testng xml giống như sau: <suite name="Suite">
<test name="Practice Grouping">
<groups>
<run>
<include name="Car" />
</run>
</groups>
<classes>
<class name="automationFramework.Grouping" />
</classes>
</test>
</suite>
Bước 4: Chạy test bằng cách click chuột phải vào testng.xml file và chọn Run As > TestNG Suite. Outpt sẽ giống như trong bảng điểu khiển TestNG.
![](https://images.viblo.asia/57dee452-7087-41a8-80c2-61068243f0e8.png)
Lưu ý: Ta chỉ gọi là group "Car" từ xml và nó cũng được thực thi test cho Sedan Car. Giống như chúng ta đã nhắc đến "Car" trong khi khai báo group Sedan Car
Cũng có thể gộp các group lại như xml dưới đây:
<suite name="Suite">
<test name="Practice Grouping">
<groups>
<define name="All">
<include name="Car"/>
<include name="Scooter"/>
</define>
<run>
<include name="All"/>
</run>
</groups>
<classes>
<class name="automationFramework.Grouping" />
</classes>
</test>
</suite>
Bạn có thể thấy chúng ta đã tạo một Group mới với tên gọi "All" và bao gồm tất cả các group trong đó. Sau đó chỉ cần gọi nhóm mới được tạo ra để thực hiện. Kết quae output hiển thị như sau:
![](https://images.viblo.asia/dbb0df49-594e-4146-a594-5db1b15c0988.png)
# 9. Dependent Test
Đôi khi, bạn có thể cần phải gọi một method trong một Test case theo một thứ tự cụ thể hoặc bạn muốn chia sẻ một số dữ liệu và trạng thái giữa các method. Loại phụ thuộc này được hỗ trợ bởi TestNG vì nó hỗ trợ khai báo phụ thuộc rõ ràng giữa các test methods.
TestNG cho phép bạn xác định phụ thuộc hoặc với:
- Sử dụng thuộc tính dependsOnMethods trong @Test chú thích HO ORC
- Sử dụng thuộc tính dependsOnGroups trong @Test chú thích. Hãy xem qua ví dụ dưới đây: package automationFramework;
import org.testng.annotations.Test;
public class Dependent {
@Test (dependsOnMethods = { "OpenBrowser" })
public void SignIn() {
System.out.println("This will execute second (SignIn)");
}
public void OpenBrowser() {
System.out.println("This will execute first (Open Browser)");
}
@Test (dependsOnMethods = { "SignIn" })
public void LogOut() {
System.out.println("This will execute third (Log Out)");
} Output sẽ như sau:
Chúng ta sẽ tiếp tục tìm hiểu về TestNG Prioritizing & Sequencing, TestNG Reporters & Asserts, TestNG Parameters & Data Provider và TestNG Data Provider with Excel trong phần 3.
Nguồn: http://toolsqa.com/selenium-webdriver/testng-introduction/
All rights reserved