Selenium java testNG:是否可以在testng测试方法中部分使用dataprovider数据

时间:2017-11-08 16:42:30

标签: java selenium-webdriver testng testng-dataprovider testng-eclipse

我是使用selenium和java的Page-Object模型自动化的新手。我正在使用页面对象模型,并将每个页面作为单个类,并将该页面中的操作作为方法。使用excel来保持读取测试数据。我有一个测试,用于搜索客户端使用各种参数,如客户编号,政策编号,姓氏,名字,网络安全,电子邮件等等......现在我必须提供方法签名中的所有参数,否则测试失败的数据提供者不匹配错误。我有一个GetData方法,它从指定的excelsheet提供字符串数组。

是否可以使参数成为可选参数,以便我只能在测试方法的签名中指定该特定测试所需的参数。在实际测试中,有15个参数和其他组合。 (如果无法做到这一点,我必须将数据拆分为16个不同的选项卡,并分别为每个测试定义数据提供者)。或任何其他方式来实现这一目标?感谢

当前代码:



@DataProvider(name="ClientSearchData")
	public String[][] getTestData() {
		String[][] testRecords = getData("TestData_igo4.xlsx","ClientSearch");
		return testRecords;
	}	

	@BeforeTest
	public void setUp() {
		init();			
	}	

	@Test(dataProvider="ClientSearchData")
	public void verifyClientSearchByClientNumber(String clientnumber, String policynumber, String surname, String webreference, String email) {
        
	//code for search by clientnumber

	}

	@Test(dataProvider="ClientSearchData")	

	public void verifyClientSearchByPolicyNumber(String clientnumber, String policynumber, String surname, String webreference, String email) {
        
	//Code for search by policynumber

	}




我想要以下内容以避免每个测试的不必要参数..



	@DataProvider(name="ClientSearchData")
	public String[][] getTestData() {
		String[][] testRecords = getData("TestData.xlsx","ClientSearch");
		return testRecords;
	}	

	@BeforeTest
	public void setUp() {
		init();			
	}	
	@Test(dataProvider="ClientSearchData")
	public void verifyClientSearchByClientNumber(String clientnumber) {
        
	//code for search by clientnumber

	}

	@Test(dataProvider="ClientSearchData")	

	public void verifyClientSearchByPolicyNumber(String policynumber) {
        
	//Code for search by policynumber

	}




2 个答案:

答案 0 :(得分:1)

您可以根据调用它的方法为数据提供者建模。我要做的可能是基于方法名称编写逻辑。将Method对象传递给dataprovider,根据方法名称创建Object [] []。

public Object[][] dp(Method m) {
key = m.getName.replace("verifyClientSearchBy","");
//From excel data, just fetch key column's values or put
//logic here whatever is convenient
//Build your Object[][] with only one value

答案 1 :(得分:1)

我认为你所看到的是Varargs。 您可以像下面这样做

$s = preg_replace('/(?<!href="|">)(?<!src=\")((http|ftp)+(s)?:\/\/[^<>\s]+)/is', '<a href="\\1" target="_blank">\\1</a>', $s);

以上打印

@DataProvider(name = "testData")
  public static Object[][] testDataProvider() {

      return new Object[][] {new String[]{"a","b","c"}};
  }

 @Test(priority=3,dataProvider = "testData")
  public void test1(String... str1) {
      System.out.println("first string"+" "+str1[0]);

  }

  @Test(priority=4,dataProvider = "testData")
  public  void test2(String... str2) {
      System.out.println("second string"+" " + str2[1]);

  }

在上面的代码中,根据您的first string a second string b 调整数据提供商  三个点getTestData是此处的关键

修改

如果没有Varargs,你实际上可以做到这一点。下面还打印相同的

...