如何筛选execute=yes的Excel行数据传递给DataProvider
Excel指定execute标识行筛选传递给DataProvider实现方案
核心实现思路
不需要对原始读取结果做全量HashMap转换,你之前转换失败本质是没有区分两层Map结构——外层key是Excel行号,内层Map才是存name/execute等业务字段的容器,直接分层遍历筛选即可。
具体实现步骤
- 遍历原始Excel读取结果的外层数组,拿到每个以行号为key的行映射对象
- 跳过外层行号key,直接取每个行映射对应的内层字段Map,做非空校验
- 判断内层Map中
execute字段值是否为yes(建议忽略大小写、做字符串trim处理,避免Excel单元格格式导致判断失效) - 收集所有符合条件的内层字段Map,最终转换为DataProvider要求的二维数组格式直接传递
参考代码实现(Java+TestNG DataProvider场景)
import java.util.ArrayList; import java.util.List; import java.util.Map; public class ExcelDataProviderUtil { public Object[][] getFilteredExcelData(List<Map<Integer, Map<String, String>>> rawExcelData) { List<Map<String, String>> targetRows = new ArrayList<>(); // 遍历原始Excel读取结果 for (Map<Integer, Map<String, String>> rowWrap : rawExcelData) { // 取内层实际存储字段的Map,跳过外层行号key for (Map<String, String> fieldMap : rowWrap.values()) { // 空值校验 + execute标识判断,兼容大小写、前后空格 if (fieldMap != null && "yes".equalsIgnoreCase(String.valueOf(fieldMap.getOrDefault("execute", "")).trim())) { targetRows.add(fieldMap); } } } // 转换为DataProvider要求的二维数组格式返回 return targetRows.toArray(new Object[0][]); } }
之前HashMap转换失效的常见原因
- 把两层嵌套Map直接拍平成单层HashMap,导致行号和业务字段同级,无法正确读取
execute字段值- 没有做值的兼容处理:比如Excel单元格值为
YES、Yes或者带前后空格,直接做字符串等值判断会匹配失败- 未做非空校验,遇到空行、空单元格时直接抛出空指针,中断筛选流程
内容的提问来源于stack exchange,提问作者sougata das
相关产品推荐
相关产品推荐

