1. 程式人生 > >TestNG與Junit的基本區別

TestNG與Junit的基本區別

自動化的框架選擇webdriver+TestNG+Ant,是因為便於Daily BuildAnt的整合,而單元測試框架選擇TestNG是由於具有以下優勢,最主要體現"直接用Excel做為資料來源"和"在xml中定義測試任務"

1.對於註解類的支援

功能
JUnit TestNG
標註為類/方法為測試類和方法 @Test @Test
標註為在suite中所有測試之前執行
@BeforeSuite
標註為在suite中所有測試之後執行 @AfterSuite
標註為在測試之前執行 @BeforeTest
標註為在測試之後執行 @AfterTest
標註為在測試Group中第一個測試方法之前執行 @BeforeGroups
標註為在測試Group中最後一個測試方法之後執行 @AfterGroups
標註為當前測試類中第一個測試方法之前執行 @BeforeClass @BeforeClass
標註為當前測試類中最後一個測試方法之後執行 @AfterClass @AfterClass
標註為在每次測試方法之前執行 @Before @BeforeMethod
標註為在每次測試方法之後執行 @After @AfterMethod
忽略某測試,讓其不執行 @Ignore @Test(enable=false)
期待測試丟擲什麼異常 @Test(expected=XXXException.class) @Test(exceptedExceptions=XXXException.class)
測試超時,如果測試的執行時間超過了毫秒為單位設定的時間,那麼就停止測試並且標記為失敗
@Test(timeout=1000) @Test(timeout=1000)
Junit的執行順序:

Setup( )   test1( )    tearDown( )      Setup( )     test2( )      tearDown( )

TestNG的執行順序:

Setup( )   test1( )    test2( )      tearDown( )


2.定義測試任務

Junit中要定義測試任務是要寫TestSuit的,居然要寫硬編碼,而TestNG全部寫在testng.xml(名字可以自定義的)中的,然後可以通過ant來呼叫。

3.測試引數化

Junit是不帶任何引數的,不論是測試方法還是配置方法,而TestNG都是可以新增引數的,有2種方法

(1)使用Parameter引數(試用的場景比較少):

public class TestNGTest6_1_0 {          
       @Test
       @Parameters(value="number")
       public void parameterIntTest(int number) {
          System.out.println("Parameterized Number is : " + number);
       }                                               
 }
然後,在我們的Testng.xml檔案中,我們把引數的具體值設定進來,如下:
<!DOCTYPE suite SYSTEM "http://beust.com/testng/testng-1.0.dtd" >
<suite name="My test suite">
  <test name="testing">                     
    <parameter name="number" value="2"/> 
    <classes>
       <class name="com.fsecure.demo.testng.TestNGTest6_0" />
    </classes>
  </test>
</suite>

我們用一個DataProvider屬性來給被測試的方法上宣告它需要的資料,然後平行的,用@DataProvider註解來標註一個方法,讓這個方法的返回值返回具體的資料
@Test(dataProvider = "Data-Provider-Function")
public void parameterIntTest(TestNGTest6_3_0 clzz) {
   System.out.println("Parameterized Number is : " + clzz.getMsg());
   System.out.println("Parameterized Number is : " + clzz.getNumber());
}  
然後相應的我們用@DataProvider來標註一個方法,這個方法提供了資料:
@DataProvider(name = "Data-Provider-Function")
public Object[][] parameterIntTestProvider() {     
        TestNGTest6_3_0 obj = new TestNGTest6_3_0();
        obj.setMsg("Hello");
        obj.setNumber(123);                  
        return new Object[][]{
          {obj}
        };
}
4.測試依賴性

對於JUnit 來說,所有的測試彼此之間都是獨立的,毫無依賴性。

但是對於 TestNG來說,我們完全可以讓測試彼此之間有依賴性,做法就是dependsOnMethods屬性來標識一個被依賴的測試方法:

@Test
public void method1() {
   System.out.println("This is method 1");
}
@Test(dependsOnMethods={"method1"})
public void method2() {
    System.out.println("This is method 2");
}
自動化測試過程中的實用性不是很強,用例之間儘量保持獨立性



相關推薦

TestNGJunit基本區別

自動化的框架選擇webdriver+TestNG+Ant,是因為便於Daily Build和Ant的整合,而單元測試框架選擇TestNG是由於具有以下優勢,最主要體現"直接用Excel做為資料來源"和"在xml中定義測試任務" 1.對於註解類的支援 功能 JUnit

TestNG Junit的比較

轉自 http://www.blogjava.net/fanscial/archive/2005/12/14/23780.html 1.         JDK 5 Annotations (JDK 1.4 可以用JavaDoc代替). 一個典型的Junit的測試類 i

intInteger的區別基本類型復雜類型的對比)轉

數據 value 1.5 rand 雜類 多個 關鍵字 乘除 行數 基本類型,或者叫做內置類型,是JAVA中不同於類的特殊類型。 Java中的簡單類型從概念上分為四種:實數、整數、字符、布爾值。但是有一點需要說明的是,Java裏面只有八種原始類型,其列表如下: 實數:dou

frameiframe的區別基本用法

url resize nor ref logs 嵌套 html span 高度 frame 和 iframe 的區別   1、frame 不能脫離 frameset 單獨使用,iframe 可以;   2、frame 不能放到body中,否則將無法顯示;   3、if

GCD dispatch_source基本使用,創建GCD定時器NSTimer的區別

pre 任務調度 cnblogs class -s ping log glob ... 可以使用GCD創建定時器 創建定時器: dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PR

基本資料型別包裝類區別

java中八大基本資料型別: Byte,short,int,long,char,double,float,boolean 二者之間也存在一些區別: 宣告方式不同,基本型別不適合new關鍵字,而包裝型別需要使用new關鍵字來在堆中分配儲存空間; 儲存方式及位置不同,基本型別

【web前端自動化工作環境配置】6. 版本控制工具gitgithup的區別聯絡以及git的基本用法

  最近專案裡面在用Git提交程式碼,剛開始的時候對這個工具也不是很瞭解,業餘時間抽空就學習了一下。Git是一個原始碼管理工具,便於大家協同開發,在一個專案中,凡是由開發人員編寫的程式碼都是原始碼,都需要被管理起來,讓原始碼容易被追溯,主要記錄每次變更了什麼,誰主導了這次的變

java基本資料型別傳遞引用傳遞區別詳解

java的值傳遞和引用傳遞在面試中一般都會都被涉及到,今天我們就來聊聊這個問題,首先我們必須認識到這個問題一般是相對函式而言的,也就是java中的方法引數,那麼我們先來回顧一下在程式設計語言中有關引

sockethttp的區別

單獨 計算機 是否 tcp協議 操作 end 不定 請求 釋放 1、TCP連接 手機能夠使用聯網功能是因為手機底層實現了TCP/IP協議,可以使手機終端通過無線網絡建立TCP連接。TCP協議可以對上層網絡提供接口,使上層網絡數據的傳輸建立在“無差別”的網絡之上。 建立起

getRequestURI()getRequestURL()的區別

roo pub ava size header oot apach print connect 引於: http://hi.baidu.com/cloudxpc request.getRequestURI() 返回值類似:/xuejava/requestdemo.jspre

java == equals的區別

rgs str test ring sys gte sta stat oid 兩者都是比較值的 equals更深層 返回的都是TRUE或者是FALSEpublic class StringTest{ public static void main(String[] a

IA64x64的區別

體系 處理 兼容性 不能 什麽 推出 而後 位操作 指令集 說到IA-64與x86-64可能很多人會比較陌生。不知道你在下載系統的時候有沒有註意過,有的地方標註了x86/64/ia-64全版本等字樣。那x86/x64/ia-64都是什麽東西的版本呢?答案就是CPU。 系 統

JAVA學習筆記(1)——a++++a的區別

col int 演示 opera 解析 代碼 數據 ++i div 需求:此博客用於解釋i++與++i的區別。 過程: 1、名稱解釋 ++:自增,即在原有數據基礎上+1,再賦給原有數據。 2、程序演示 (1)代碼: 1 class OperateDemo 2 { 3

JSON.parseeval的區別

org 過濾 ocs lsp 方式 .com 為什麽 解析 數字 JSON.parse與eval和能將一個字符串解析成一個JSON對象,但還是有挺大區別。 測試代碼 var A = "{ a: 1 , b : ‘hello‘ }"; var B = "{ ‘a‘: 1

String、StringBufferStringBuilder之間區別 .RP

什麽 方式 tr1 abcd 為什麽 mes strong 速度 一點   最近學習到StringBuffer,心中有好些疑問,搜索了一些關於String,StringBuffer,StringBuilder的東西,現在整理一下。 關於這三個類在字符串處理中的位置不言而喻,

WPFのclipToBoundsmaskToBounds的區別

family spa line rda align tex 圖層邊界 子圖 圖層 UIView.clipsToBounds : 讓子 View 只顯示父 View 的 Frame 部分,子視圖超出frame的部分不顯示,默認為NO,設置為YES就會把超出的部分裁掉; mas

(轉)String,StringBufferStringBuilder的區別??

我們 重載 時間 ins 對象引用 新的 new tar 你會 String 字符串常量StringBuffer 字符串變量(線程安全)StringBuilder 字符串變量(非線程安全) 簡要的說, String 類型和 StringBuffer 類型的主要性能區別其實在

dim static 的區別

-i ati ace ont normal for space http img prinvate sub command1_click() dim i as string i=i+1 text0=i end sub ==================== prinva

@import指令link的區別及二者的使用註意事項

支持 文件 asc 部分 rul xhtml 預處理器 請求 似的 首先,二者都是從外部引入css文件的方式,[email protected]/* */,且必須放在開頭部分! <link rel=‘stylesheet‘ href=‘a.css‘>

檢測某個方法是否屬於某個類中--解析php函數method_exists()is_callable()的區別

檢查 -1 元素 高級 ech 9.png true strong 原創 php函數method_exists() 與is_callable()的區別在哪?在php面相對象設計過程中,往往我們需要在調用某一個方法是否屬於某一個類的時候做出判斷,常用的方法有 meth