我正在尝试并行运行我的Tests,如果我的dataProvider存在于与@Test相同的类中,则一切正常。
但是,如果我将DataProvider放在单独的类中,则并行运行有时会运行良好,有时会失败。
下面是我的通用数据提供者代码
@DataProvider(name = "dp",parallel=true)
public static Object[][] getData(Method m) {
String sheetName = m.getName();
int rows = excel.getRowCount(sheetName);
int cols = excel.getColumnCount(sheetName);
Object[][] data = new Object[rows - 1][1];
Hashtable<String, String> table = null;
for (int rowNum = 2; rowNum <= rows; rowNum++) { // 2
table = new Hashtable<String, String>();
for (int colNum = 0; colNum < cols; colNum++) {
// data[0][0]
table.put(excel.getCellData(sheetName, colNum, 1), excel.getCellData(sheetName, colNum, rowNum));
data[rowNum - 2][0] = table;
}
}
return data;
}
下面是我的@Test之一
@Test(dataProviderclass = TestUtil.class,name="dp")
public void doLogin1(HashTable<String,String>data) throws InterruptedException {
openBrowserLaunchURL(data.get("browser"));
HomePage homePage = new HomePage();
homePage.gotoLogin().doSignIn(data.get("username"), data.get("password")).doLogout();
quitBrowser();
}
答案 0 :(得分:0)
TestNG需要在同一@Test本身中集成所有注释,该类包含@Test注释。
您可以做的是,使用通用的DataProvider代码:
您需要在每个类中定义DataProvider声明,并在其后的逻辑/代码中定义您可以在Separate方法中定义的方法,您可以在任何类中对其进行公开调用。
示例示例:
@DataProvider(name = "dp",parallel=true)
public static Object[][] getData(Method m) {
return readerUtility.demogetData();
}
普通读者类:
public class readerUtility {
public Object[][] demogetData(){
String sheetName = m.getName();
int rows = excel.getRowCount(sheetName);
int cols = excel.getColumnCount(sheetName);
Object[][] data = new Object[rows - 1][1];
Hashtable<String, String> table = null;
for (int rowNum = 2; rowNum <= rows; rowNum++) {
table = new Hashtable<String, String>();
for (int colNum = 0; colNum < cols; colNum++) {
table.put(excel.getCellData(sheetName, colNum, 1),excel.getCellData(sheetName, colNum, rowNum));
data[rowNum - 2][0] = table;
}
}
return data;
}
}