当前位置: 首页 > 知识库问答 >
问题:

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

靳高明
2023-03-14

我不熟悉使用selenium和java实现页面对象模型自动化。我使用页面对象模型,将每个页面作为一个类,并将该页面中的操作作为方法。使用excel保存读取的测试数据。我有一个测试,可以使用各种参数来搜索客户,如客户编号、政策编号、姓氏、名字、WebReference、电子邮件等等。。。。。。现在,我必须在方法签名中提供所有参数,否则测试将失败,并出现数据提供程序不匹配错误。我有一个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个答案

彭鸿文
2023-03-14

您可以根据调用数据提供者的方法对其进行建模。我要做的可能是根据方法名编写逻辑。将方法对象传递给数据提供者,根据方法的名称创建对象[][]。

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
令狐献
2023-03-14

我想你要找的是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三点调整数据提供程序即可 是这里的关键

编辑:

你实际上可以不用瓦拉格斯来做。下面也打印相同的

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

  }
 类似资料:
  • 问题内容: 我一直在寻找一种在测试方法中使用多个DataProvider的方法。我的情况如下: 假设我们有一个DataProvider类: 现在,在我的Test方法中,我要针对方案的所有组合运行: 绿广场 红方格 绿三角 红三角 鉴于我无法使用注释指定多个DataProvider,因此应如何在代码中实现此目标 问题答案: 由于缺乏更好的方法,我决定坚持解决方法。这是如何实现上述方案的示例: 这样,

  • 我在java testng测试中使用allure testng(2.12.1)适配器。我有使用@DataProvider的测试。我的测试实现了ITest,以在运行时更改测试方法实例名称。当我运行测试时,我看到了不同的测试方法名称,但在allure报告中,它为每个测试运行显示了相同的测试方法。如何配置诱惑报告以显示类似IDE的内容? 预期:测试一测试二测试三 实际:myTest myTest myT

  • 无论如何,如果能知道TestNG对错误的定义是什么样子,那就很好了。 谢谢你的任何提示!

  • 是否可以为每个测试方法指定来自DataProvider的数据。我做过这样的东西。 有没有更好的方法?我可以为两种测试方法指定一个数据集吗?谢谢

  • 我想知道是否有人试图使用jmeter测试gRPC应用程序。 我希望 我可以使用非阻塞/异步存根编写一个gRPC客户端类,该存根对服务器进行非阻塞调用, 创建上述客户端的Jar 将Jar导入JMeter 使用Jeter BeanShell采样器中的Java方法 在花时间尝试上述方法之前,我想看看是否有人尝试过类似的方法 如果上述解决方法有效? 每个线程会创建一个单独的传输控制协议吗? 我们已经用py

  • 我正在使用TestNG数据提供程序读取数据池。xls文件,在名为ReadData的类中包含1017个测试用例和214列。 然后,我将214个String参数传递到名为Enterprise Data的单独类中的@Test注释中。 我在@Test中创建了一个for循环,只执行ceratin迭代的操作(比如1-10),它总共只输入10个测试用例。我的问题是,在运行结束时,它仍然显示“Total test