仅使用一个数据提供者,如何将数据传递给许多测试方法

时间:2014-12-17 06:53:11

标签: selenium-webdriver automation testng junit4

我在TestNG中使用DataProvider作为我的Selenium脚本。我的要求是只使用一个DataProvider并将数据传递给许多测试方法。

例如:假设我有10个测试方法,所以我需要创建一个Single DataProvider,以便它可以将数据传递给所有这10个测试方法。

有可能吗?如果是,请如何实施。

或者有没有替代方案?

Pl帮助!!!

3 个答案:

答案 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();
	}