TestNG學會了,Java單元測試你就掌握了一半
每天進步一點點,關注我們哦,每天分享測試技術文章
本文章出自【碼同學軟體測試】
碼同學公眾號:自動化軟體測試,領取資料可加:Matongxue_8
碼同學抖音號:小碼哥聊軟體測試
01 TestNG
01 簡介
在日常測試工作中,經常需要用寫程式碼和指令碼來完成一些測試任務,比如自動化測試,介面測試,單元測試等。當寫完若干指令碼後,需要對這些指令碼進行組織、管理和結果統計,這個時候就需要有一個工具來負責這些事情,於是TestNG就出現了。
TestNG是Java體系中的一個測試框架,可以用於做單元測試、整合測試等。在TestNG之前,有一個類似的框架早就出現了,那就是Junit。TestNG借鑑了Junit的一些特點,然後增加了很多更強大的功能。成為Java體系裡使用最廣泛的測試框架。
需要注意的是,很多人理解TestNG是一個介面測試框架,其實並不是的,TestNG本身不能做介面測試,它主要用來管理你的介面測試。類似於Python裡的pytest框架。今天我們就來詳細介紹下TestNG的使用。
02 環境安裝
建立一個Maven工程,引入TestNG的依賴包
<dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>6.8</version> </dependency>
一個簡單的小例子
寫一個簡單的計算器類
//一個簡單的加減乘除計算器 public class Calculator { // 加法 public int add(int a, int b){ return a + b; } // 減法 public int subtract(int a, int b){ return a - b; } // 乘法 public int multiply(int a, int b){ return a * b; } // 除法 public int divide(int a, int b){ return a / b; } }
接下來對這個計算器進行單元測試,建立一個測試類,並對加法運算編寫了一個測試方法
// 計算器測試類
public class CalculatorTest {
// 加法測試
@Test
public void testAdd(){
System.out.println("開始執行testAdd");
Calculator calculator = new Calculator();
int result = calculator.add(1, 1);
Assert.assertEquals(2, result);
}
// 減法測試
@Test
public void testSubtract(){
System.out.println("開始執行testSubtract");
Calculator calculator = new Calculator();
int result = calculator.subtract(2, 1);
Assert.assertEquals(1, result);
}
}
注意:
在上面程式碼中,testAdd方法上添加了一個@Test註解,這個是TestNG提供的一個註解(可以理解成一個標記),改註解標明此方法需要TestNG來執行,@Test註解也是最常使用的註解。
Assert是TestNG中的斷言類,assertEquals是最常用的一個方法,用於判斷期望值和實際值是否一致。如果一致,測試通過;如果不一致,測試不通過。
03 TestNG的執行
IntelliJ IDEA中內建了TestNG的支援,因此直接在方法名上右鍵,選擇"run testAdd"即可,並且會在控制檯上列印用例的執行結果。
控制檯列印,如果都顯示為綠色,就代表執行成功了
也可以在類上右鍵執行,TestNG中會執行整個類中所有帶@Test註解的測試方法
02 套件測試
01 套件定義
一個測試類裡會編寫若干個測試方法。如果某個場景需要執行多個測試類,就需要用到套件測試。套件是一組測試類的集合。在TestNG中,需要使用一個xml檔案來定義一個套件,套件裡可以包含1個或多個測試類。在xml中還可以很多靈活的配置,實現一些精細化的執行策略。
在Maven工程的resource目錄下建立一個testng.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
<suite name="TestAll"> <!--執行整個類--> <test name="calculator_all_class">
<classes>
<!-- 指定類名,可以新增多個--> <class name="com.mtx.CalculatorTest"></class>
</classes>
</test>
<!--僅執行某個方法--> <test name="calculator_one_method">
<classes>
<class name="com.mtx.CalculatorTest">
<methods>
<!--指定方法名,可以新增多個--> <include name="testAdd"></include>
</methods>
</class>
</classes>
</test>
</suite>
在xml中,一個test標籤就代表了一個執行用例,可以執行一個或多個類,或者指定一個或多個方法(見註釋)
02 套件執行
在xml上右鍵run即可執行整個套件,執行結果
免費領取 碼同學軟體測試 課程筆記+超多學習資料+完整視訊+最新面試題,可加:Matongxue_8/關注碼同學公眾號:自動化軟體測試
03 資料驅動
在很多測試用例中,對於同一套邏輯,需要使用大量不同的資料進行驗證,這個情況下可以使用TestNG的@DataProvider註解來提供資料,並驅動測試用例執行
在測試類中定義一個數據驅動方法,並新增@DataProvider註解
// 加法測試
@Test(dataProvider = "testAddData")
public void testAdd(int a, int b, int expect){
System.out.println("開始執行testAdd");
Calculator calculator = new Calculator();
int result = calculator.add(a, b);
Assert.assertEquals(expect, result);
}
// 提供了三組測試資料:{數字1, 數字2, 期望值}
// 因為返回型別的Object,所以陣列中也可以寫其他資料型別,String、int、char、float等
@DataProvider(name = "testAddData")
public Object[][] testAddData(){
Object[][] data = new Object[][]{{1, 1, 2}, {2, 2, 4}, {3, 3, 5}};
return data;
}
注意:
提供資料的providerData方法必須添加註解@DataProvider,並且執行name為testAddData。方法返回的資料型別必須為Object二維陣列
使用資料的testAdd方法上,必須制定對應的dataprovider name,並且方法上定義對應數量和型別的入參,用於接受資料
執行testAdd方法後,發現執行了三次,每次分別傳入不同的引數,第三組資料執行因為實際和預期不一致,執行結果為失敗
04 其他註解
除了@Test註解,還有一些其他的註解也經常使用,具體如下:
註解 |
描述 |
@BeforeSuite |
在套件測試執行前執行,僅執行一次 |
@AfterSuite |
在套件測試執行後執行,僅執行一次 |
@BeforeClass |
在整個測試類執行前執行,僅執行一次 |
@AfterClass |
在整個測試類執行後執行,僅執行一次 |
@BeforeTest |
在@Test註解的方法執行前執行,每個@Test方法都執行一次 |
@AfterTest |
在@Test註解的方法執行後執行,每個@Test方法都執行一次 |
@BeforeSuite
public void suiteInit(){
System.out.println("套件執行前測試");
}
@AfterSuite
public void suiteEnd(){
System.out.println("套件執行後測試");
}
@BeforeClass
public void classInit(){
System.out.println("類執行前測試");
}
@AfterClass
public void classEnd(){
System.out.println("類執行後測試");
}
@BeforeTest
public void testInit(){
System.out.println("測試方法執行前測試");
}
@AfterTest
public void testEnd(){
System.out.println("測試方法執行後測試");
}
執行結果:
05 命令列執行
除了在idea中執行TestNG測試方法外,另外一種更實用的執行方法是命令列執行,使用命令列執行更容易和其他外部工具進行整合,比如Jenkins。然而TestNG自身提供的命令列執行方式並不好用。比較簡單的方法是和Maven整合,實用maven的方式來呼叫TestNG。
在工程的pom檔案裡,新增外掛:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<suiteXmlFiles>
<suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
</suiteXmlFiles>
</configuration>
</plugin>
</plugins>
</build>
在suiteXmlFile標籤裡,指定testng.xml檔案的相對位置。
然後在cmd下,進入到工程的目錄下,執行命令:mvn test,可以看到,最終在控制檯裡打印出了測試結果
END
免費領取碼同學軟體測試課程筆記+超多學習資料+學習完整視訊,可加:Matongxue_8/關注碼同學公眾號:自動化軟體測試
本文著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。