自動化的架構選擇webdriver+TestNG+Ant,是因為便于Daily Build 和Ant的內建,而單元測試架構選擇TestNG是由于具有以下優勢,最主要展現"直接用Excel做為資料源"和"在xml中定義測試任務"
1.對于注解類的支援
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI2EzX4xSZz91ZsAzNfRHLGZkRGZkRfJ3bs92YsAjMfVmepNHL90zZihmUXl1bwNjW1x2RlVnVtNWQClGVF5UMR9Fd4VGdsATNfd3bkFGazxSUhxGatJGbwhFT1Y0Mk9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL3MWZiNWZ1ADMmFGO4M2MhVjY0QzYkVTN2EDO4kDNxgzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
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