【问题标题】:Selenium java testNG: Is it possible to use dataprovider data partially in testng test methodSelenium java testNG:是否可以在testng测试方法中部分使用dataprovider数据
【发布时间】:2017-11-08 16:42:29
【问题描述】:

我是使用 selenium 和 java 的 Page-Object 模型自动化的新手。我正在使用页面对象模型并将每个页面作为一个类,并将该页面中的操作作为方法。使用 excel 来保持读取测试数据。我有一个使用各种参数(如客户编号、策略编号、姓氏、名字、webrefernce、电子邮件等等)搜索客户的测试......现在我必须在方法签名中提供所有参数,否则数据提供者的测试会失败不匹配错误。我有一个 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

	}

【问题讨论】:

  • 为具有 getter 和 setter 方法的 ClientSearchData 创建一个数据对象。使用 setter 在 excel 访问代码中设置数据。从数据提供者返回 new Object[][] - {{ new ClientSearchDO(name,id...) },{ new ClientSearchDO(name,id...)}}。在测试方法中更改参数以键入 ClientSearchDO。通过 getter 方法访问相关数据。也检查一下——testng.org/doc/documentation-main.html#parameters-dataproviders

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


【解决方案1】:

我认为您正在寻找的是Varargs。 你可以像下面这样简单地做

@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 的情况下做到这一点。下面也打印相同的

 @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]);

  }

【讨论】:

    【解决方案2】:

    您可以根据调用它的方法对数据提供者进行建模。我要做的可能是根据方法名称编写逻辑。将 Method 对象传递给您的数据提供者,根据方法的名称,创建您的 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      相关资源
      最近更新 更多