You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用TestNG @DataProvider读取Excel时程序无限运行问题求助

问题解决:TestNG @DataProvider 无限运行排查与修复

核心问题:无限循环的根源

你的代码里的while循环没有对变量i进行递增操作,导致永远停留在第0行,无法推进循环,进而触发无限运行。

修复步骤及优化点

1. 修复循环递增逻辑

在循环体内最后添加i++,让循环能逐行读取数据:

while (!Objects.equals(s, "0")) {
    XSSFRow row = sheet.getRow(i);
    // ... 原有读取单元格逻辑
    data[i][0] = val1;
    data[i][1] = val2;
    i++; // 必须添加这行,推进循环
}

2. 修正文件路径转义问题

Windows系统下路径分隔符需要用双反斜杠\\,或者用正斜杠/避免转义错误:

String filePath = System.getProperty("user.dir") + "/src/test/resources/TestDataProvider/TestDataProvider.xlsx";

3. 优化Excel读取的健壮性

处理空行/空单元格避免空指针异常,同时改用for循环结合getLastRowNum()让逻辑更直观:

public class ExcelDataProvider {
    @DataProvider(name = "excelData")
    public Object[][] getData() throws IOException {
        String filePath = System.getProperty("user.dir") + "/src/test/resources/TestDataProvider/TestDataProvider.xlsx";
        try (FileInputStream fileInputStream = new FileInputStream(filePath);
             XSSFWorkbook workBook = new XSSFWorkbook(fileInputStream)) {
            XSSFSheet sheet = workBook.getSheet("Values");
            if (sheet == null) {
                return new String[0][2];
            }
            int lastRowNum = sheet.getLastRowNum();
            List<String[]> dataList = new ArrayList<>();
            
            for (int i = 0; i <= lastRowNum; i++) {
                XSSFRow row = sheet.getRow(i);
                if (row == null) continue;
                
                XSSFCell cell1 = row.getCell(0);
                if (cell1 == null) continue;
                cell1.setCellType(CellType.STRING);
                String s = cell1.getStringCellValue();
                if ("0".equals(s)) {
                    break;
                }
                
                XSSFCell cell2 = row.getCell(1);
                String val1 = cell1.getStringCellValue();
                String val2 = cell2 != null ? cell2.getStringCellValue() : "";
                
                dataList.add(new String[]{val1, val2});
            }
            
            return dataList.toArray(new String[dataList.size()][2]);
        }
    }
}

4. 资源自动关闭优化

使用try-with-resources语法,确保FileInputStream和XSSFWorkbook自动关闭,避免资源泄漏。

额外注意事项

  • 确认Excel中作为终止标记的0是字符串类型,避免因单元格类型不匹配导致判断失效
  • 测试时可以先打印i的值,验证循环是否正常推进

内容的提问来源于stack exchange,提问作者Sujan Prathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:27:41