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

使用Data Provider读取Excel(Map格式):按测试名过滤数据并解决null行问题

解决Excel Data Provider过滤后返回null行的问题

首先,你的代码当前会返回包含null的数组,核心问题是你预先按总行数初始化了数组,但只有匹配的行才会赋值,不匹配的位置自然留空成null。另外还有个隐藏坑:如果datamap是在循环外声明的,所有行都会复用同一个Map实例,最终所有元素都会是最后一次赋值的内容。

下面是修正后的代码,一次性解决这两个问题:

String m1 = m.getName();
int lastRowNum = sheet.getLastRowNum();
int lastCellNum = sheet.getRow(0).getLastCellNum();

// 先收集所有匹配的数据,避免出现null占位
List<Map<String, String>> matchedData = new ArrayList<>();

for (int i = 0; i < lastRowNum; i++) {
    Row row = sheet.getRow(i + 1);
    if (row == null) continue; // 跳过Excel里的空行
    
    Cell testNameCell = row.getCell(0);
    String tn = testNameCell == null ? "" : testNameCell.toString();
    
    if (m1.equalsIgnoreCase(tn)) {
        // 每次循环新建Map,确保每行数据独立不覆盖
        Map<String, String> dataMap = new HashMap<>();
        for (int j = 0; j < lastCellNum; j++) {
            Cell headerCell = sheet.getRow(0).getCell(j);
            Cell valueCell = row.getCell(j);
            
            // 处理空单元格的情况,避免空指针
            String header = headerCell == null ? "" : headerCell.toString();
            String value = valueCell == null ? "" : valueCell.toString();
            
            dataMap.put(header, value);
        }
        matchedData.add(dataMap);
    }
}

// 把收集到的有效数据转成Data Provider需要的Object[][]格式
Object[][] obj = new Object[matchedData.size()][1];
for (int k = 0; k < matchedData.size(); k++) {
    obj[k][0] = matchedData.get(k);
}
return obj;

关键改进点:

  • 用List先收集有效数据:不再提前创建固定大小的数组,而是先把符合条件的行数据存到List里,最后再转成目标格式,返回的数组里就不会有多余的null了。
  • 每次循环新建Map实例:确保每一行的Map都是独立的,不会出现后续行覆盖前面行数据的问题。
  • 增加空值防护:处理Excel中可能存在的空行、空单元格,避免出现NullPointerException。

这样修改后,你的Data Provider就只会返回过滤后的有效测试数据啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:01:44