我尝试搜索此问题的相关信息,但无法找到。这是一个问题: 同一个excel有2张。我想在同一个类中使用TestNG DataProvider打印两张表中的数据。
Sheet 1中:
用户名 密码
administrator1 password1
administrator2 password2
Sheet 2中:
FirstName LastName
abc def
pqr xyz
String path=<filePath>;
String sheetName;
@Test (dataProvider="loginInfo")
public void loginVerification(String username, String password) throws InterruptedException
{
sheetName="Sheet1";
System.out.println("Username:"+username+" "+"Password:"+password);
System.out.println("************");
}
@Test (dataProvider="loginInfo")
public void userNames(String firstName, String lastName)
{
sheetName="sheet2";
System.out.println("FirstName:"+firstName+" LastName:"+lastName);
System.out.println("*******");
}
@DataProvider(name="loginInfo")
public Object[][] userFormData() throws BiffException, IOException
{
Object[][] data = testData(path, sheetName);
return data;
}
public Object[][] testData(String path, String sheetName) throws BiffException, IOException
{
<code to read excel data>
}
}
return inputData;
}
当我运行代码时,它只是跳过Null指针异常执行。 如果我在开头声明sheetName,就像我对filePath所做的那样,只选择第一张表中的数据。任何有关如何前进的帮助表示赞赏。
答案 0 :(得分:0)
问题是dataProvider在运行测试之前获取数据,但是您在测试中设置了sheetname。因此,在这种情况下,sheetname为null。这就是为什么你得到一个nullpointer。工作表名称将在运行测试后获得值。
因此,如果您想使用相同的数据提供者,无论如何。然后我会在第一次测试后添加表单开关。
所以目前以下代码将如下工作。
使用从Sheet2获取的数据运行userNames测试。
String path=<filePath>;
String sheetName = "SheetName1";
@Test (dataProvider="loginInfo")
public void loginVerification(String username, String password) throws InterruptedException
{
System.out.println("Username:"+username+" "+"Password:"+password);
System.out.println("************");
sheetName="Sheet2";
}
@Test (dataProvider="loginInfo")
public void userNames(String firstName, String lastName)
{
System.out.println("FirstName:"+firstName+" LastName:"+lastName);
System.out.println("*******");
}
@DataProvider(name="loginInfo")
public Object[][] userFormData() throws BiffException, IOException
{
Object[][] data = testData(path, sheetName);
return data;
}
public Object[][] testData(String path, String sheetName) throws BiffException, IOException
{
<code to read excel data>
}
}
return inputData;
}
使用此解决方案,测试容易出错。如果loginVerification测试失败,则表单名称不会更新,它将仍然使用Sheetname1。
如果他们从不同的工作表中获取数据,我更愿意创建2个不同的数据提供者。