1.TestNG是什麼?
TestNG是一個測試框架,其靈感來自JUnit和NUnit,但引入了一些新的功能,使其功能更強大,使用更方便。
TestNG是一個開源自動化測試框架;TestNG表示下一代(Next Generation的首字母)。 TestNG類似於JUnit(特別是JUnit 4),但它不是JUnit框架的擴展。它的靈感來源於JUnit。它的目的是優於JUnit,尤其是在用於測試集成多類時。 TestNG的創始人是Cedric Beust(塞德里克·博伊斯特)。
TestNG消除了大部分的舊框架的限制,使開發人員能夠編寫更加靈活和強大的測試。 因爲它在很大程度上借鑑了Java註解(JDK5.0引入的)來定義測試,它也可以顯示如何使用這個新功能在真實的Java語言生產環境中。
2.TestNG的特點
· 註解
· TestNG使用Java和麪向對象的功能
· 支持綜合類測試(例如,默認情況下,不用創建一個新的測試每個測試方法的類的實例)
· 獨立的編譯時測試代碼和運行時配置/數據信息
· 靈活的運行時配置
· 主要介紹“測試組”。當編譯測試,只要要求TestNG運行所有的“前端”的測試,或“快”,“慢”,“數據庫”等
· 支持依賴測試方法,並行測試,負載測試,局部故障
· 靈活的插件API
· 支持多線程測試
3. TestNG實用功能:
TestNG是一個類似Junit的自動化框架,使用它可以做功能,接口,單元,集成的自動化測試;最常見的是結合Selenium做Web功能自動化測試,結合APPIUM做APP自動化測試,同時它是Java開發人員最廣泛的測試框架,常使用Java註解去寫測試方法,例如,如果你在TestNG寫好了一個測試方法,你只需要在這個方法的前面一行寫上“@test”,就相當於告訴TestNG, 這個是一個測試方法,只有添加了這個註冊,纔會被認爲是一個測試用例,纔會被執行。
4. TestNG配置文件介紹
4.1 TestNG.xml是TestNG的配置文件,簡單來說TestNG就是通過運行這個文件來執行測試用例的,它的主要功能是配置測試用例和測試套件,利用這個文件我們可以跑同一個類或多個不同類的測試用例,具體來說,TestNG通過設置testng.xml文件能做以下事情;
1)創建來源不同包、類、方法的測試套件
2)包括一些選項,例如失敗的用例可以重跑。
3)支持使用正則表達式
4)運行把外部參數傳入測試方法
5)支持配置多線程的執行環境
4.2簡單TestNG.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
<test name="Java_Learn">
<classes>
<class name="com.java.learn.TestNG_Demo1"/>
</classes>
</test>
</suite>
4.3我們可以看出來,suite管理多個test,而test管理多個class,最小單元是一個class文件,下面就以運行同一個包下的不同測試類和不同包下測試類怎樣將其添加到配置文件中;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Default Suite">
<test name="Java_Learn">
<classes>
<class name="com.java.learn.TestNG_Demo1"/> <!-- com.java.learn包下的TestNG_Demo1類 -->
<!-- 添加不同測試類文件 -->
<class name="com.java.learn.TestNG_Demo2"/> <!-- com.java.learn包下的TestNG_Demo2類 -->
<class name="demo2.TestNG_Demo3"/> <!-- demo2包下的TestNG_Demo3類 -->
</classes>
</test> <!-- Java_Learn -->
</suite> <!-- Default Suite -->
5. TestNG的註解
5.1 @Before和@After 註解
Before分類有@BeforeSuite,@BeforeTest, @BeforeGroups,@BeforeClass,@BeforeMethod
After分類有@AfterSuite,@ AfterTest, @AfterGroups,@ AfterClass,@ AfterMethod
注:套件測試是什麼東西? 套件測試是一起運行的多個測試類。
5.2@DataProvider註解
標記一個方法是用來給其他測試方法提供數據的方法。要求該方法必須返回是object[][].
5.3@Factory註解
標記這個方法是一個工廠,方法必須返回的是一個對象。
5.4@Listeners註解
在一個測試方法上定義一個監聽。例如Selenium自動化測試中需要用到這個事件監聽功能,方便我們輸出日誌。
5.5@Parameters註解
描述瞭如何給一個測試方法傳提參數。
5.6@Test註解
在@Test下有很多選項可以設置,例如用例之間的依賴關係等。
注:註解是用來執行測試類的配置,如設置、清理數據庫,準備虛擬數據、部署、關閉服務器等;
6. TestNG中測試類、測試組和測試方法
6.1 Test Methods(測試方法)
凡是方法(或者叫函數)前面添加了@Test註解,就叫測試方法,在實際測試中,寫的測試用例,其實就是許多個添加@Test的方法。6.2
6.2 Test Classes(測試類)
測試類,一般我們新建一個Java類文件,如果裏面方法有@Test,那麼就是一個測試類文件。上面是寫的複數。這個在testng.xml文件裏可以體現,classes下可以有一個或者多個測試類文件。Classes相當於就是一個裝class的容器,而class又相當於一個裝method的容器。
6.3 Test Groups(測試組)
測試組存在於同一個測試類中,一個組可以包含多個methods。還是可以組嵌套,也是就是一個組可以屬於是另外一個組管理,後邊會詳細講解TestNG的組測試;
7. TestNG的執行順序
package com.testngdemo;
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 NewTest {
//第1個測試方法
@Test
public void testCase1() {
System.out.println("第1個測試方法"+"->@Test");
}
//第2個測試方法
@Test
public void testCase2() {
System.out.println("第2個測試方法"+"->@Test");
}
@BeforeMethod
public void beforeMethod() {
System.out.println("@beforeMethod");
}
@AfterMethod
public void afterMethod() {
System.out.println("@afterMethod");
}
@BeforeClass
public void beforeClass() {
System.out.println("@beforeClass");
}
@AfterClass
public void afterClass() {
System.out.println("@afterClass");
}
@BeforeTest
public void beforeTest() {
System.out.println("@beforeTest");
}
@AfterTest
public void afterTest() {
System.out.println("@afterTest");
}
@BeforeSuite
public void beforeSuite() {
System.out.println("@beforeSuite");
}
@AfterSuite
public void afterSuite() {
System.out.println("@afterSuite");
}
}
運行結果如下: