我必須撰寫一個測驗,該測驗可以使用 TestNG 中的資料提供程式從屬性檔案中列印值。我不確定從哪里開始。我已經使用硬編碼值完成了任務,但無法使用該檔案來完成。這是我到目前為止所擁有的:
public class ConfigurationProvider {
@DataProvider(name = "browserProvider")
public FileInputStream getFile() throws IOException {
FileInputStream fis = new FileInputStream(
"C:\\Users\\user\\git\\Quntrix-Training\\automation\\src\\test\\resources\\config.properties");
Properties p = new Properties();
p.load(fis);
p.getProperty("BrowserType");
return fis;
}
@Test(dataProvider = "browserProvider")
public void canPrintBrowser(String browserType) {
System.out.println("The browser type is: " browserType);
}
}
屬性檔案如下所示:
Url=http://the-internet.herokuapp.com
BrowserType=chrome
ImplicitTimeout=5000
ScriptTimeout=5000
運行測驗失敗,因為它希望我使用Object[][]. 但我不確定如何適應它。到目前為止,我所做的所有研究都只是使用網路驅動程式等復雜的東西......這應該是基本的,但我是新手,這真的讓我絞盡腦汁。
uj5u.com熱心網友回復:
DataProviderrequieres的Object[][],因為這將是二維陣列的所有執行的引數@Test使用該DataProvider。
例如,如果Object[][]回傳是這樣的:
data[0][0] = "Peter";
data[0][1] = "18";
data[1][0] = "Ross";
data[1][1] = "45";
data[2][0] = "Diana";
data[2][1] = "11";
@Test然后必須使用 2 個引數定義的方法將被執行 3 次。第一個帶有引數Peterand 18,第二個帶有Rossand 45,依此類推。
這就是 a 的DataProvider作業方式。因此,您必須手動決議properties檔案,并使用 ots 內容構建Object[][]將為該@Test方法提供服務的檔案。
因此,您的DataProvider方法(如您的問題中針對單個樣本進行了簡化)應如下所示:
@DataProvider(name = "browserProvider")
public Object[][] getData() throws IOException {
FileInputStream fis = new FileInputStream(
"C:\\Users\\user\\git\\Quntrix-Training\\automation\\src\\test\\resources\\config.properties");
Properties p = new Properties();
p.load(fis);
Object[][] data = new Object[1][1];
data[0][0] = p.getProperty("BrowserType");
return data;
}
如果其中properties有更多資料,只需根據需要迭代或檢索并繼續填充Object[][].
uj5u.com熱心網友回復:
盡管您標記為正確的答案解決了您的特定問題,但我想提供一些見解,因為我認為您誤解了資料提供者的概念。
為什么會回傳Object[][]?
資料提供程式是一種機制,允許將單個測驗相乘,以便擁有單個測驗和N輸入資料片段,您將進行N測驗。
這是Object[][]從哪里來的。基本上Object[][]是一個陣列,Object[]其中“外部陣列”保存不同測驗的引數序列,每個序列由“內部陣列”表示。
例如你有一個方法:
public void testMyStuff(String a, String b){
...
}
此方法需要兩個引數,因此您的“水平”大小Object[][]將為2。
現在,如果您想將此單個測驗拆分為三個不同的測驗,則您需要具有Object[][]等于3 的“垂直”大小。
Object[][] test = {
{"A1", "B1"},
{"A2", "B2"},
{"A3", "B3"}
};
這樣你就有以下執行順序:
testMyStuff("A1", "B1");
testMyStuff("A2", "B2");
testMyStuff("A3", "B3");
那么為什么不是你的情況呢?
您有一個屬性檔案,其中您的屬性只有一個值。這不是資料提供者的模式。最好直接從測驗中輪詢屬性值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/393291.html
