簡體   English   中英

如何使用TestNG DataProvider傳遞> 10個參數?

[英]how to pass > 10 parameters using TestNG DataProvider?

我需要向 TestNG Dataprovider 傳遞 10 多個參數,代碼看起來像這樣......

@Test (dataProvider = "Dataprovider1")
public void testScenario1(String data1, String data2,
                          String data3, String data4,
                          String data5 //...
            ) throws Exception {
    System.out.println(data1+"---------------- "+data2+" ---------------   "+data3+" .. so on");
}

誰能告訴我,如果我們需要使用@DataProvider傳遞 10 個以上的參數,我們應該遵循什么方法? 有沒有其他方法可以聲明測試方法的參數?

如果您有相同類型的參數,那么您可以在方法參數中作為數組傳遞。

@Test (dataProvider = "Dataprovider1")
public void testScenario1(String args [])
            ) throws Exception {
    System.out.println(args[0]+"---------------- "+args[1]+" ---------------   "+args[3]+" .. so on");
}

此外,如果您有不同類型的參數字段,那么您可以在幫助類的幫助下將其喙化,然后在參數中傳遞此類的引用。 例如:

class Helper {
  String data1;
  String data2;
  String data3;
  Long data4;
  int data5;
  flot data6;
 -----so on------
 ----getter setter and constructor----
}

你的測試課

class Test {
@DataProvider(name="Dataprovider1")
public static Object[][] testData() {
    return new Object[][] {
            { new Helper("hey", "you", "guys" ..... another constructor parameters..) } }
    };

}

@Test (dataProvider = "Dataprovider1")
public void testScenario1(Helper helper) throws Exception {
    System.out.println(helper.data1+"---------------- "+helper.data2+" ---------------   "+helper.data3+" .. so on");
}
}

您可以將 dataprovider 設置為一個 Object 數組,並使用 ArrayList> 將您的參數設置為鍵值對。

@DataProvider
public Object[][] getTestData()
{
    List<HashMap<String, String>> arrayMapList = new ArrayList<HashMap<String, String>>();
    HashMap<String, String> hashMapItems = new HashMap<String, String>();

    //use a loop to fill in all the parameter name and value pairs
    hashMapItems.put("parameterName1", "parameterValue");
    hashMapItems.put("parameterName2", "parameterValue");
    //--------------More put statements here------
    //finally add hash map to the list
    arrayMapList.add(hashMapItems);

    //Iterate the array list and store each HashMap object in an object array. First dimension is the iterator value.
    Object [][] hashMapObj = new Object [arrayMapList.size()][1];

    for(int i=0; i<arrayMapList.size() ; i++) {
        hashMapObj[i][0] = arrayMapList(i);
    }

    return hashMapObj;
}

對於數組列表中的每個 hashmap 值,測試方法將使用自己的一組參數運行

@Test (dataProvider = "getTestData", enabled = true)
public void testDataRead(HashMap<String,String> hashMapValue)
{
    System.out.println(hashMapValue.get(parameterNameKey));  //parameter 1
    System.out.println(hashMapValue.get(parameterNameKey));  //parameter 2
}

當你這樣做時,DataProvider 會以一種令人討厭的語法結束。 下面是一個例子:

@DataProvider(name="objectTestData")
public static Object[][] objectTestData() {
    return new Object[][] {
            { new TestData("hey", "you", "guys") },
            { new TestData("Sloth", "Baby", "Ruth") },
            { new TestData("foo", "bar", "baz") }
    };
}

@Test(dataProvider="objectTestData")
public void testScenario1(TestData data) {
    System.out.println(data.get(0) + "..." + data.get(1) + "..." + data.get(2));
}

static class TestData {
    public String[] items;

    public TestData(String... items) {
        this.items = items; // should probably make a defensive copy
    }

    public String get(int x) {
        return items[x];
    }
}

或者,您可以更改 TestData 構造函數以將內容放入單獨的命名方法中。 (例如,如果您正在測試地址數據,則可能有 getName、getAddress、getCity。)

@DataProvider使用Map插入多個帶值的參數,並返回包含該映射的對象,如下所示:

@DataProvider
public static Object[][]Dataprovider1(){
    Map<String, String> map = new HashMap<String, String>();
    map.put("data1", "value1");
    map.put("data2", "value2");
    ....
    map.put("data10", "value10");
    return new Object[][] {
        {map}
    };
}

@test您還可以通過添加Map作為子參數來獲取數據:

@Test(dataProvider = "Dataprovider1")
public void testScenario1(Map<String, String> data) {
    System.out.println(data.get("data1"));
    System.out.println(data.get("data2"));
    ....
}

它將產生:

value1
value2
....

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM