[Bài 2] Cách run test bằng package, class, method trong file testng.xml

Phải nói là TestNG cung cấp những chức năng hữu dụng nhất cho người dùng khi linh hoạt hoàn toàn trong config để tùy ý add thêm test hoặc bỏ test. Nhưng trước tiên nói vào lý thuyết, ta cần phải tạo ra 1 project demo để có thể thấy được sự hiệu quả của TestNG.

Q: Vì sao lại cần project demo, sao không dùng luôn vào cùng với Selenium WebDriver đang học, dù gì thì cũng chỉ dùng TestNG cho Selenium là chính mà?

A: Có 2 lý do:

  • Như đã giới thiệu ở bài trước, TestNG dùng được cho mọi loại test: Unit, Integration, End-to-end Testing, nên không cần sử dụng Selenium WebDriver vẫn chạy được TestNG.
  • Sử dụng kèm cả Selenium thì dễ bị những ảnh hưởng không mong muốn như testcase fail –> thay vì ngồi học về TestNG thì lại quay ra fix bug.

Project demo của chúng ta cực kỳ đơn giản:

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 Including và Excluding

Include: được dùng trong các TH sau đây:

  • Trong 1 package có nhiều package, nhưng chỉ muốn run số ít package trong đó. (Trường hợp này để cho các bạn tự suy nghĩ)
  • Trong 1 Class có nhiều method, chỉ muốn run số ít method (Ngó lại mục IV ở phía trên).

Exclude: được dùng trong các TH sau đây:

  • Trong 1 package có nhiều package, nhưng muốn không run một vài package trong đó. (Trường hợp này để cho các bạn tự suy nghĩ)
  • 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.

Done, dài quá, cuối cùng cũng xong. Hi vọng là bạn cảm thấy TestNG không còn khó nữa, nhưng cũng đừng vội nghĩ rằng bạn đã biết được nhiều về TestNG nhé. Đây chỉ là 1 phần nhỏ của nó thôi, mình dự định viết thêm tầm hơn 10 bài nữa cơ. See ya!

0 0 votes
Article Rating
Subscribe
Notify of
guest
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
trackback

[…] [Bài 2] Cách run test bằng package, class, method trong file testng.xml […]