Data-Driven Testing
Learn data-driven testing techniques to test with multiple data sets. This is a foundational concept in quality assurance and test automation that professional developers rely on daily. The explanations below are written to be beginner-friendly while covering the depth and nuance that comes from real-world Software Testing experience. Take your time with each section and practice the examples
40 min•By Priygop Team•Last updated: Feb 2026
Data-Driven Testing Benefits
- Multiple Test Scenarios: Test with various data sets
- maintainability: Data changes don't require code changes
- Coverage: Test more scenarios with less code
- reusability: Same test logic with different data
- Scalability: Easy to add new test data
Data-Driven Testing Implementation
Example
// Test Data Provider
@DataProvider(name = "loginData")
public Object[][] getLoginData() {
return new Object[][] {
{"validuser", "validpass", true, "Login successful"},
{"invaliduser", "validpass", false, "Invalid username"},
{"validuser", "invalidpass", false, "Invalid password"},
{"", "validpass", false, "Username required"},
{"validuser", "", false, "Password required"}
};
}
// CSV Data Provider
@DataProvider(name = "csvData")
public Object[][] getCSVData() throws IOException {
List<Object[]> data = new ArrayList<>();
BufferedReader reader = new BufferedReader(new FileReader("src/test/resources/testdata/login_data.csv"));
String line;
while ((line = reader.readLine()) != null) {
String[] values = line.split(",");
data.add(new Object[]{values[0], values[1], Boolean.parseBoolean(values[2]), values[3]});
}
reader.close();
return data.toArray(new Object[0][]);
}
// Excel Data Provider
@DataProvider(name = "excelData")
public Object[][] getExcelData() throws IOException {
FileInputStream fis = new FileInputStream("src/test/resources/testdata/test_data.xlsx");
XSSFWorkbook workbook = new XSSFWorkbook(fis);
XSSFSheet sheet = workbook.getSheet("LoginData");
int rowCount = sheet.getLastRowNum();
int colCount = sheet.getRow(0).getLastCellNum();
Object[][] data = new Object[rowCount][colCount];
for (int i = 1; i <= rowCount; i++) {
XSSFRow row = sheet.getRow(i);
for (int j = 0; j < colCount; j++) {
data[i-1][j] = row.getCell(j).getStringCellValue();
}
}
workbook.close();
fis.close();
return data;
}
// Test with Data Provider
@Test(dataProvider = "loginData")
public void testLoginWithData(String username, String password, boolean expectedResult, String expectedMessage) {
LoginPage loginPage = new LoginPage(driver);
loginPage.enterUsername(username);
loginPage.enterPassword(password);
loginPage.clickLoginButton();
if (expectedResult) {
DashboardPage dashboardPage = new DashboardPage(driver);
Assert.assertTrue(dashboardPage.getWelcomeMessage().contains("Welcome"));
} else {
Assert.assertTrue(loginPage.isErrorMessageDisplayed());
Assert.assertEquals(loginPage.getErrorMessage(), expectedMessage);
}
}
// JSON Data Provider
@DataProvider(name = "jsonData")
public Object[][] getJSONData() throws IOException {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(new File("src/test/resources/testdata/test_data.json"));
List<Object[]> data = new ArrayList<>();
for (JsonNode node : jsonNode) {
data.add(new Object[]{
node.get("username").asText(),
node.get("password").asText(),
node.get("expectedResult").asBoolean(),
node.get("expectedMessage").asText()
});
}
return data.toArray(new Object[0][]);
}Try It Yourself — Automation Testing Fundamentals
Try It Yourself — Automation Testing FundamentalsHTML
HTML Editor
✓ ValidTab = 2 spaces
HTML|32 lines|1605 chars|✓ Valid syntax
UTF-8