天天看點

TestNG與Junit的基本差別

自動化的架構選擇webdriver+TestNG+Ant,是因為便于Daily Build 和Ant的內建,而單元測試架構選擇TestNG是由于具有以下優勢,最主要展現"直接用Excel做為資料源"和"在xml中定義測試任務"

1.對于注解類的支援

TestNG與Junit的基本差別

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>
           

(2)DataProvider(實際應用場景可參考部落格:解析Excel,通過Excel驅動測試資料參數化http://blog.csdn.net/luozhuwang/article/details/9701491)

我們用一個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");
}
           

自動化測試過程中的實用性不是很強,用例之間盡量保持獨立性 

————————————————

版權聲明:本文為CSDN部落客「小李廣」的原創文章,遵循CC 4.0 BY-SA版權協定,轉載請附上原文出處連結及本聲明。

原文連結:https://blog.csdn.net/luozhuwang/article/details/14646839