我在TestNG中使用DataProvider作为我的Selenium脚本。我的要求是只使用一个DataProvider并将数据传递给许多测试方法。
例如:假设我有10个测试方法,所以我需要创建一个Single DataProvider,以便它可以将数据传递给所有这10个测试方法。
有可能吗?如果是,请如何实施。
或者有没有替代方案?
Pl帮助!!!
答案 0 :(得分:1)
如果您的每个测试方法都有 @Test 注释,那么您只需添加参数作为 -
@Test(dataProvider="Name of your DataProvider")
你可以使用所有10种测试方法来完成这项工作。这将使他们从您的单个DataProvider获取数据。
我希望它有所帮助。 。 .cheers !!
答案 1 :(得分:0)
是的,这是可能的。
因此,您的数据提供者需要知道它提供数据的方法或类。我做了以下实现。因此,您可以在数据提供程序中获取调用方法的上下文,并且可以询问它必须为其提供数据的父类名称,然后根据您可以拥有多个文件,您可以读取和提供数据或具有不同的行,在同一个csv中按类名称区分,您可以从中读取所需的行
@DataProvider(name="getDataFromFile")
public static Iterator<Object[]> getDataFromFile(Method testMethod) throws Exception
{
String expected=null;
String className=testMethod.getDeclaringClass().getSimpleName();
Reporter.log("Providing data for class " + className,true);
List<Map<String, String>> setupData = getTestDataFromCsv(classname);
//provide data here
}
答案 2 :(得分:0)
更新: 我一直在寻找解决方案。但是不可能拆分数据提供者。但是对于所有方法重用数据提供程序没有坏处,缺点是每个方法都必须使用完整的参数列表。所有其他选项的实施和维护都比较复杂。对于我的场景,它比为每个测试方法创建和维护单独的数据提供程序更好。
@BeforeMethod
public void setUp() {
init();
login= new LoginPage(myD);
clientsearch = new ClientSearchPage(myD);
toppanel= new TopPanelPage(myD);
}
@Test(dataProvider="search_data")
public void verifySearchByClientNumber(String clientnumber, String policynumber, String policynumberClient, String webreference,
String webreferenceClient, String surname, String surnameClient, String forename, String forenameClient, String dob, String dobClient){
login.Login();
log.info("Logged in successfully, now in ClientSearch Page..");
log.info("Entering client number.." );
clientsearch.enterClientNumber(clientnumber);
log.info("Clicking on the Search button ..." );
clientsearch.clickSearchButton();
log.info("Verifying Client present in results.." );
boolean res=clientsearch.isClientPresent(clientnumber);
Assert.assertEquals(res, true,"Assertion failed !!");
toppanel.clickLogoutButton();
}
@Test(dataProvider="search_data")
public void verifySearchByPolicyNumber(String clientnumber, String policynumber, String policynumberClient, String webreference,
String webreferenceClient, String surname, String surnameClient, String forename, String forenameClient, String dob, String dobClient){
login.Login();
log.info("Logged in successfully, now in ClientSearch Page..");
log.info("Entering Policy number.." );
clientsearch.enterPolicyNumber(policynumber);
log.info("Clicking on the Search button ..." );
clientsearch.clickSearchButton();
log.info("Verifying Client present in results.." );
boolean res=clientsearch.isClientPresent(policynumberClient);
Assert.assertEquals(res, true,"Assertion failed !!");
toppanel.clickLogoutButton();
}
//More methods here with same data provider....
@AfterMethod
public void endTest() {
myD.quit();
}