testNG常用用法總結


一.testNG介紹

     TestNG是Java中的一個測試框架, 類似於JUnit 和NUnit,   功能都差不多, 只是功能更加強大,使用也更方便

Java中已經有一個JUnit的測試框架了。  TestNG比JUnit功能強大的多。  測試人員一般用TestNG來寫自動化測試。  開發人員一般用JUnit寫單元測試。

官方網站: http://testng.org/doc/index.html

二. eclipse中安裝testNG

1. 打開Eclipse   Help ->Install New Software ,   然后Add   "http://beust.com/eclipse"

三. testNG最簡單的測試

 1 package TankLearn2.Learn;
 2 import org.junit.AfterClass;
 3 import org.junit.BeforeClass;
 4 import org.testng.annotations.Test;
 5 
 6 public class TestNGLearn1 {
 7 
 8     @BeforeClass
 9     public void beforeClass() {
10         System.out.println("this is before class");
11     }
12 
13     @Test
14     public void TestNgLearn() {
15         System.out.println("this is TestNG test case");
16     }
17 
18     @AfterClass
19     public void afterClass() {
20         System.out.println("this is after class");
21     }
22 }
View Code

四.testNG最基本的注解

注解

描述

@BeforeSuite

注解的方法將只運行一次,運行所有測試前此套件中。

@AfterSuite

注解的方法將只運行一次此套件中的所有測試都運行之后。

@BeforeClass

注解的方法將只運行一次先行先試在當前類中的方法調用。

@AfterClass

注解的方法將只運行一次后已經運行在當前類中的所有測試方法。

@BeforeTest

注解的方法將被運行之前的任何測試方法屬於內部類的 <test>標簽的運行。

@AfterTest

注解的方法將被運行后,所有的測試方法,屬於內部類的<test>標簽的運行。

@BeforeGroups

組的列表,這種配置方法將之前運行。此方法是保證在運行屬於任何這些組第一個測試方法,該方法被調用。

@AfterGroups

組的名單,這種配置方法后,將運行。此方法是保證運行后不久,最后的測試方法,該方法屬於任何這些組被調用。

@BeforeMethod

注解的方法將每個測試方法之前運行。

@AfterMethod

被注釋的方法將被運行后,每個測試方法。

@DataProvider

標志着一個方法,提供數據的一個測試方法。注解的方法必須返回一個Object[] [],其中每個對象[]的測試方法的參數列表中可以分配。

該@Test 方法,希望從這個DataProvider的接收數據,需要使用一個dataProvider名稱等於這個注解的名字。

@Factory

作為一個工廠,返回TestNG的測試類的對象將被用於標記的方法。該方法必須返回Object[]。

@Listeners

定義一個測試類的監聽器。

@Parameters

介紹如何將參數傳遞給@Test方法。

@Test

標記一個類或方法作為測試的一部分。

五. testNG中如何執行測試

1.第一種直接執行:右鍵要執行的方法,點Run As ->TestNG Test

2. 第二種:  通過testng.xml文件來執行. 把要執行的case, 放入testng.xml文件中。 右鍵點擊testng.xml, 點Run As

1 testng.xml
2 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
3 <suite name="Suite1">
4     <test name="test12">
5         <classes>
6             <class name="TankLearn2.Learn.TestNGLearn1" />
7         </classes>
8     </test>
9 </suite>
View Code

六.testNG按順序執行case

1.在testng.xml中,可以控制測試用例按順序執行。  當preserve-order="true"是,可以保證節點下面的方法是按順序執行的

 1 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 2 <suite name="Suite1">
 3     <test name="test12" preserve-order="true">
 4         <classes>
 5             <class name="TankLearn2.Learn.TestNGLearn1">
 6                 <methods>
 7                     <include name="TestNgLearn3" />
 8                     <include name="TestNgLearn1" />
 9                     <include name="TestNgLearn2" />
10                 </methods>
11             </class>
12         </classes>
13     </test>
14 </suite>
View Code

七. testNG異常測試

測試中,有時候我們期望某些代碼拋出異常。

TestNG通過@Test(expectedExceptions)  來判斷期待的異常, 並且判斷Error Message

 1 package TankLearn2.Learn;
 2 
 3 import org.testng.annotations.Test;
 4 
 5 public class ExceptionTest {
 6     
 7     @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp="NullPoint")
 8     public void testException(){
 9         throw new IllegalArgumentException("NullPoint");
10     }
11 }
View Code

八.testNG組測試

TestNG中可以把測試用例分組,這樣可以按組來執行測試用例比如:

 1 package TankLearn2.Learn;
 2 
 3 import org.testng.annotations.Test;
 4 
 5 public class GroupTest {
 6     
 7     @Test(groups = {"systemtest"})
 8     public void testLogin(){
 9         System.out.println("this is test login");
10     }
11     
12     @Test(groups = {"functiontest"})
13     public void testOpenPage(){
14         System.out.println("this is test Open Page");
15     }
16 }
View Code

然后在testng.xml中 按組執行測試用例

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 3 <suite name="Suite1">
 4     <test name="test1">
 5         <groups>
 6         <run>
 7         <include name="functiontest" />
 8         </run>
 9     </groups>
10     </test>
11 </suite>
View Code

九.testNG參數化測試

軟件測試中,經常需要測試大量的數據集。 測試代碼的邏輯完全一樣,只是測試的參數不一樣。  這樣我們就需要一種 “傳遞測試參數的機制”。 避免寫重復的測試代碼

TestNG提供了2種傳遞參數的方式。

第一種: testng.xml 方式使代碼和測試數據分離,方便維護

第二種:@DataProvider能夠提供比較復雜的參數。 (也叫data-driven testing)

方法一: 通過testng.xml 傳遞參數給測試代碼

 1 package TankLearn2.Learn;
 2 import org.testng.annotations.Parameters;
 3 import org.testng.annotations.Test;
 4     
 5 public class ParameterizedTest1 {
 6     
 7     @Test
 8     @Parameters("test1")
 9     public void ParaTest(String test1){
10         System.out.println("This is " + test1);
11     }
12 }
View Code
 1 testng.xml
 2 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
 3 <suite name="Suite1">
 4         <parameter name="test1" value="Tank" />
 5         <parameter name="test1" value="Xiao" />
 6     <test name="test12">
 7         <classes>
 8             <class name="TankLearn2.Learn.ParameterizedTest1" />
 9         </classes>
10     </test>
11 </suite>
View Code

方式二:   通過DataProvider傳遞參數

 1 package TankLearn2.Learn;
 2 
 3 import org.testng.annotations.DataProvider;
 4 import org.testng.annotations.Test;
 5 
 6 public class DataProviderLearn {
 7     
 8     @DataProvider(name="user")
 9     public Object[][] Users(){
10         return new Object[][]{
11                 {"root","passowrd"},
12                 {"cnblogs.com", "tankxiao"},
13                 {"tank","xiao"}
14         };
15     }
16     
17     @Test(dataProvider="user")
18     public void verifyUser(String userName, String password){
19         System.out.println("Username: "+ userName + " Password: "+ password);
20     }
21 }
View Code

十.testNG忽略測試

有時候測試用例還沒准備好, 可以給測試用例加上@Test(enable = false),  來禁用此測試用例

 1 package TankLearn2.Learn;
 2 
 3 import org.testng.annotations.Test;
 4 
 5 public class TesgNGIgnore {
 6     
 7     @Test(enabled = false)
 8     public void testIgnore(){
 9         System.out.println("This test case will ignore");
10     }
11 }
View Code

十一.testNG依賴測試

有時候,我們需要按順序來調用測試用例,  那么測試用例之間就存在依賴關系。 TestNG支持測試用例之間的依賴

 1 package TankLearn2.Learn;
 2 
 3 import org.testng.annotations.Test;
 4 
 5 public class DependsTest {
 6     
 7     @Test
 8     public void setupEnv(){
 9         System.out.println("this is setup Env");
10     }
11     
12     @Test(dependsOnMethods = {"setupEnv"})
13     public void testMessage(){
14         System.out.println("this is test message");
15     }
16 }
View Code

十二.testNG測試報告結果

測試報告是測試非常重要的部分.  

TestNG默認情況下,會生產兩種類型的測試報告HTML的和XML的。 測試報告位於 "test-output" 目錄下.

當然我們也可以設置測試報告的內容級別. 

verbose="2" 標識的就是記錄的日志級別,共有0-10的級別,其中0表示無,10表示最詳細

1 <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >
2 <suite name="Suite1">
3     <test name="test12" verbose="2">
4         <classes>
5             <class name="TankLearn2.Learn.TestNGLearn1" />
6         </classes>
7     </test>
8 </suite>
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM