testng參數化(提供測試數據)


testng提供測試數據的兩個注釋:@DataProvide和@Parameter
 
一、通過testng.xml中設置參數
(實際上testng.xml只是一個名字,可以起任何一個名字,只要是.xml文件,然后文件格式按照testng的文檔格式DTD來就可以了)
testng.xml中的內容:
<?xml version="1.0" encoding="UTF-8" ?>
<suite name = "testngframetest">
    <parameter name="para" value="test_para1"/>
    <test name="測試參數賦值">
        <classes>
            <parameters>
                <parameter name="para1" value="test_para1"/>
                <parameter name="para2" value="test_para2"/>
            </parameters>
            <class name = "paramer">
                <methods>
                    <include name ="showparamer"></include>
                </methods>
            </class>
        </classes>
    </test>
</suite>
 
.java文件的測試用例中通過parameters獲得數據
使用方法1:
@Test(parameters="para1")
public void testcase(String para1){
     具體的測試用例,參數中的para1自動獲取@Test中聲明的變量,讀取的是testng的xml文件中聲明的參數para1的value值
}
如果有多個參數,可以使用這種方式:@Test(parameters={"para1","para2"})
 
使用方法2:
@Parameter({"para1","para2"})
@Test
     具體的測試用例(參數@Parameter寫在了@Test前面)
 
具體代碼如下:
import org.testng.annotations.Test;
public class paramer {
    @Test(parameters ={"para1","para2"})
    public  void showparamer(String para11,String para22){
        System.out.println("testng獲得的參數para1如下:"+para11);
        System.out.println("testng獲得的參數para2如下:"+para22);;
    }
}
 
說明:
1.測試用例中設置的參數名隨意,但是數量一定要和@Parameter中提供的數量一致,按照testng.xml中定義的順序來取值的
2.<parameter>可以聲明在<suite>或者<test>級別,在<test>下的<parameter>會覆蓋在<suite>下聲明的同名變量
3..java的測試用例中,可以通過@Optional("參數")來聲明變量,如果沒有在testng.xml中沒有找到參數,會用@Optional("")中聲明的參數
例如下面的代碼,testng中沒有聲明para1和para2時,執行用例時會直接復制test1和test2
import org.testng.annotations.Optional;
import org.testng.annotations.Test;
public class paramer {
    @Test(parameters ={"para1","para2"})
    public  void showparamer(@Optional("test1") String para11, @Optional("test2") String para22){
        System.out.println("testng獲得的參數para1如下:"+para11);
        System.out.println("testng獲得的參數para2如下:"+para22);;
    }
}
 
二、通過注釋@Dataprovide獲得參數
(testng.xml只能傳遞簡單的參數,如果是循環遍歷的使用不同的參數則不可以實現。這時可以使用@Dataprovide來提供數據)
 
提供數據的方法:
@DataProvider(name = "dataprovider1")
public Object[][] dataprovide(){
    return new Object[][]{{1,2,3},{3,2,1}};
}
說明:
1.@DataProvide只能返回Object數組結果
2.Object的行中的每一列標識一個參數(比如上面的例子是3個參數),行數決定了調用的方法要執行的次數(比如上面的例子是執行2次)
 
調用數據方法:
@Test(dataprovide="XXX")
說明:
1.XXX為@DataProvide聲明的一個名字,返回的是一個Object數組
2.方法的執行次數為賦值參數的遍數。比如提供數組為1行,則只執行一次;如果是數組為3行,則執行3次。
 
其他擴展:
1.@DataProvide寫在單獨的class里,增強復用性。
這時調用該數據的方法為:@Test(dataprovide="XXX",dataClass=YYY.class)
說明:讀取YYY.class下的@DataProvide為XXX的Object數組數據
2.@DataProvide下定義的數組,通過其他文件讀取,比如讀取excel,返回一個Object數組
3.@DataProvide可以通過parallel實現並行執行線程,默認10個,可以在testng.xml中進行修改(<suite name="XXX" data-provider-thread-count="YYY">)
@DataProvider(name = "dataprovider1",parallel = true)
public Object[][] dataprovide(){
    return new Object[][]{{1,2},{2,1}};
}
@Test(dataProvider = "dataprovide")
public void showDataprovide(int a,int b,Method c){
    System.out.println("DataProvider獲得的參數para1如下:"+a);
    System.out.println("DataProvider獲得的參數para2如下:"+b);;
    System.out.println("DataProvider獲得的參數para2如下:"+c.getName());

}
4.@DataProvide和@Parameters不能同時聲明,但是可以通過其他方法實現同時使用。
String testId = context.getCurrentXmlTest().getParameter("test_id"); 
 


免責聲明!

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



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