2015-04-17 73 views
1

我已经用TestNG创建了一个Selenium框架。在这个@Dataprovider包含一组从Excel中读取数据的代码,并将此数组返回给@test。从数据提供者返回数组到@Test方法

@Test(dataProvider="createData1") 
private void login (String data, String data1) throws IOException{} 

@DataProvider 
public static String [][] createData1() throws IOException{ 

    String Scenarioname=new Object(){}.getClass().getEnclosingClass().getSimpleName(); 
    return xls.readvalues(Scenarioname,"testdata"); 

} 

由于登录测试用例有两个输入,所以方法登录有两个属性。 同样,如果注册测试用例有5个输入,则注册方法将有5个属性。 但我想创建一个标准的方式,以便当我从@dataprovider返回数组。然后@test方法应该动态读取值,而不是我提到的每种方法的属性数量。

回答

2

您的@DataProvider可以返回Object[][]而不是String[][]。所以你可以在第一个地方返回场景规范,在第二个地方你可以返回用户数据。喜欢的东西:

return new Object[][] { 
    {"My Scenario1", new MyUserDataObject("name1", "password1", "male")}, 
    {"My Scenario2", new MyUserDataObject("name2", "password2", "female")} 
}; 

和测试方法的签名是: login(String scenarioName, MyUserDataObject userData)

然后测试可以从userData参数读取所有必需数据。

编辑:

参数化试验得到了简单的值作为参数,所以没有用户数据[0] [0](http://testng.org/doc/documentation-main.html#parameters-dataproviders

@BeforeMethod不支持@DataProviders TestNG中(https://groups.google.com/forum/#!topic/testng-users/3Kny3qTVdmg