testng icon indicating copy to clipboard operation
testng copied to clipboard

Enhancement: Reliable combination of @Parameters and @DataProvider

Open santoshsp17-ops opened this issue 1 month ago • 2 comments

Currently, TestNG does not reliably combine @Parameters (from XML) and @DataProvider in all contexts, especially when using:

  • Multiple classes in or
  • Parallel execution (thread-count > 1)

This causes Data provider mismatch errors even when the method signature and DataProvider are correct.

A suggested enhancement is for TestNG to consistently merge XML parameters with DataProvider values in all contexts, similar to how scanning works in simple cases.

Code used -

         @Parameters("URI")
	@Test(dataProvider ="getData")
	public void testDemo(String url, String uname, String pass) {
		System.out.println("Test Demo");
		System.out.println(url);
		System.out.println(uname + " " + pass);
	} 

@DataProvider
		public Object[][] getData() {
			Object[][] data = new Object [3] [2];
			data [0][0] = "firstUser";
			data [0][1] = "firstPass";
			
			data [1][0] = "SecondUser";
			data [1][1] = "SecondPass";
			
			data [2][0] = "ThirdUser";
			data [2][1] = "ThirdPass";
			
			return data;			
		}

Attached testng report & testng4.xml

emailable-report.html

testng4.xml

santoshsp17-ops avatar Oct 29 '25 10:10 santoshsp17-ops

What is the used version?

Did you try something like this:

		@Test(dataProvider ="getData")
		public void testDemo(String url, String uname, String pass) {
			System.out.println("Test Demo");
			System.out.println(url);
			System.out.println(uname + " " + pass);
		} 

		@Parameters("URI")
		@DataProvider
		public Object[][] getData(String url) {
			Object[][] data = new Object [3] [3];
			data [0][0] = url;
			data [0][1] = "firstUser";
			data [0][2] = "firstPass";
			
			data [1][0] = url;
			data [1][1] = "SecondUser";
			data [1][2] = "SecondPass";
			
			data [2][0] = url;
			data [2][1] = "ThirdUser";
			data [2][2] = "ThirdPass";
			
			return data;			
		}

juherr avatar Oct 29 '25 11:10 juherr

Hi juherr, TestNG Version: 7.11.0 Execution Context: [RemoteTestNG] detected during run

@Test(dataProvider ="getData")
	public void testDemo(String url, String uname, String pass) {
		System.out.println("Test Demo");
		System.out.println(url);
		System.out.println(uname + " " + pass);

                @Parameters("URI")
		@DataProvider
		public Object[][] getData(String url) {
			Object[][] data = new Object [3] [3];
			data [0][0] = url;
			data [0][0] = "firstUser";
			data [0][1] = "firstPass";
			
			data [1][0] = url;
			data [1][0] = "SecondUser";
			data [1][1] = "SecondPass";
			
			data [2][0] = url;
			data [2][0] = "ThirdUser";
			data [2][1] = "ThirdPass";
			
			return data;
			
		}

still not working & getting org.testng.TestNGException: Some DataProvider public java.lang.Object[][] test.Login.getData(java.lang.String) parameters unresolved: at 0 type class java.lang.String

at java.base/java.util.ArrayList.forEach(ArrayList.java:1596)

santoshsp17-ops avatar Oct 29 '25 11:10 santoshsp17-ops