Selenium Course
- 62k Enrolled Learners
- Weekend/Weekday
- Live Class
Selenium is used to make things easier and faster. But what’s the point of Automation Testing if the test-cases have to be provided manually? In order to speed up the testing process, the test cases must be automated. Well, this is where DataProviders fits into the picture. DataProvider in TestNG is used to automate the process of providing test-cases and that’s what I will be talking about in this article.
Data-driven is a test automation framework which stores test data in a table or spreadsheet format. It allows automation engineers to have a single test script for executing all the test data present in the table. In this framework, input values are read from data files and are stored into a variable in test scripts. Data Driven testing enables building both positive and negative test cases into a single test only.
In the Data-Driven Test Automation framework, input data can be stored in single or multiple data sources like XLS, XML, CSV, and databases.
In order to understand parameterization in a better way, let’s understand the parameterization options in TestNG. There are two ways by which we can achieve parameterization in TestNG and they are as follows:
@Parameters({“name”, “searchKey”})
@DataProvider(name= “searchProvider”)
Now let’s dive deeper and understand what is DataProvider in TestNG.
What is DataProvider in TestNG?
If you have to provide the test data, then you need to declare a method that returns the data set in the form of two-dimensional object array Object[][]. The first array represents a data set whereas the second array contains the parameter values. The DataProvider method can be in the same test class or one of its superclasses. It is also possible to provide DataProvider in another class but then the method has to be static.
Once you have added this method, you need to annotate it using @DataProvider to let TestNG know that it is a DataProvider method. You can also provide a name using the name attribute of the DataProvider annotation. If one hasn’t provided the name, by default the name of the method will be used for reference.
Now that you know what is DataProvider in TestNG, let’s move further and understand how actually it works through Parameterization.
To fill thousand’s of web forms using the testing framework you need a different methodology which will give you a very large dataset in the single execution flow. This data-driven concept is achieved by @DataProvider annotation in TestNG. It has only one attribute ‘name’. If you do not specify the name attribute then the DataProvider’s name will be the same as the corresponding method name. That’s how DataProvider eases the task of testing multiple sets of data. Now let’s dive into the practical implementation of DataProvider in TestNG with the help of examples.
Example I: In this example, I will pass the data from getData() method to DataProvider. I will also send data into 3 rows and 2 columns ie. I will pass three different usernames and passwords. Let’s take a look at the code below.
package co.edureka.pages; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class DataProviderExample{ //This test method declares that its data should be supplied by the DataProvider // "getdata" is the function name which is passing the data // Number of columns should match the number of input parameters @Test(dataProvider="getData") public void setData(String username, String password) { System.out.println("your username is::"+username); System.out.println("your password is::"+password); } @DataProvider public Object[][] getData() { //Rows - Number of times your test has to be repeated. //Columns - Number of parameters in test data. Object[][] data = new Object[3][2]; // 1st row data[0][0] ="user1"; data[0][1] = "abcdef"; // 2nd row data[1][0] ="user2"; data[1][1] = "xyz"; // 3rd row data[2][0] ="user3"; data[2][1] = "123456"; return data; } }
When you execute the above code, each data set that you pass will be considered as a test method. As I have passed three sets of data to the DataProvider, it will display the result as shown below:
Now, let’s understand one more example where I will be providing the data into the Facebook website using DataProvider.
Let’s implement the same and check how it works
package co.edureka.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; public class TestDDT { // this will take data from dataprovider which we created @Test(dataProvider="testdata") public void TestFireFox(String uname,String password){ System.setProperty("webdriver.gecko.driver", "C:geckodriver-v0.23.0-win64geckodriver.exe"); WebDriver driver = new FirefoxDriver(); // Maximize browser driver.manage().window().maximize(); // Load application driver.get("http://www.facebook.com"); // clear email field driver.findElement(By.id("email")).clear(); // Enter usename driver.findElement(By.id("email")).sendKeys(uname); // Clear password field driver.findElement(By.id("pass")).clear(); // Enter password driver.findElement(By.id("pass")).sendKeys(password); } @DataProvider(name="testdata") public Object[][] TestDataFeed(){ // Create object array with 2 rows and 2 column- first parameter is row and second is //column Object [][] facebookdata=new Object[2][2]; // Enter data to row 0 column 0 facebookdata[0][0]="username1@gmail.com"; // Enter data to row 0 column 1 facebookdata[0][1]="Password1"; // Enter data to row 1 column 0 facebookdata[1][0]="username2@gmail.com"; // Enter data to row 1 column 0 facebookdata[1][1]="Password2"; // return arrayobject to testscript return facebookdata; } }
When you execute the above code, Chrome Driver will launch Google Chrome, navigate through facebook.com and enter two sets of data i.e. login credentials. Basically, this will check whether the DataProvider was successfully able to provide the data into facebook.com or not. If you have 100s and thousands of datasets then you can use Excel sheet to store the data and then provide the path of the excel file in your code. That will help you to process all the records present in the excel file.
This marks the end of this article on DataProvider in TestNG. I hope you guys enjoyed this article and understood how to feed the data and run the test cases. Now, if you want to get more insights into Selenium, you can check out the article on Selenium Tutorial.
If you found this “DataProvider in TestNG” relevant, check out the Selenium Certification Training by Edureka, a trusted online learning company with a network of more than 250,000 satisfied learners spread across the globe.
Got a question for us? Please mention it in the comments section of DataProvider in TestNG article and we will get back to you.
Course Name | Date | Details |
---|---|---|
Selenium Course | Class Starts on 4th January,2025 4th January SAT&SUN (Weekend Batch) | View Details |
Selenium Course | Class Starts on 13th January,2025 13th January MON-FRI (Weekday Batch) | View Details |
edureka.co