我用TestNG创建了一个Selenium框架。在这个@Dataprovider中包含一组从excel读取数据并将arrayform中的值返回给@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");
}
由于登录测试用例有两个输入,因此方法Login有两个属性。 同样,如果寄存器测试用例有5个输入,那么寄存器方法将有5个属性。 但我想以某种方式创建一种标准方式,以便在从@dataprovider返回数组时。然后@test方法应该动态读取值,而不是我提到的每个方法的属性数。
答案 0 :(得分:2)
您的@DataProvider
可以返回Object[][]
而不是String[][]
。因此,您可以在第一位返回方案规范,在第二位返回包含用户数据的Object。类似的东西:
return new Object[][] {
{"My Scenario1", new MyUserDataObject("name1", "password1", "male")},
{"My Scenario2", new MyUserDataObject("name2", "password2", "female")}
};
和测试方法签名将是:
login(String scenarioName, MyUserDataObject userData)
然后,test可以从userData
参数中读取所有必需数据。
修改强>
参数化测试得到简单的值作为参数,因此没有userData [0] [0](http://testng.org/doc/documentation-main.html#parameters-dataproviders)
@BeforeMethod不支持TestNG中的@DataProviders(https://groups.google.com/forum/#!topic/testng-users/3Kny3qTVdmg)