JUnit5中支持Excel数据驱动


  今天就介绍下如何通过junit5的参数化方法,来支持Excel文件的参数化

  MethodSource

  Junit5当中新增的ParameterizedTest注解,可以在对应的测试方法中携带参数,并且支持多种参数源,参见前文Junit5中实现参数化测试。

  而其中的MethodResource方法可以自己定义一个参数实现方法

  这里MethodSource所使用的参数方法有几个要求:

  返回StreamArguments参数流或集合类型的的参数集

  静态引用

  本身不携带参数

  这就给我们自行扩展通过Excel数据驱动提供了入口。

  如我们定义一个测试用例,使用参数化方法,通过MethodSource使用ExcelMethod参数方法传入参数。代码如:

  @ParameterizedTest@MethodSource(ExcelMethod)publicvoidqiucaoTest(Stringperson,intage,floatsalary){

  System.out.println(person++age++salary);}

  但是因为MethodSource方法的调用限制,本身不能携带参数,所以如果我们希望指定使用的Excel文件路径,以及具体的数据表Sheet。还必须进行一层扩展。ExcelMethod方法定义如下:

  staticStreamArgumentsExcelMethod(){

  returngetTestDataStreamFromExcelFile(.src estdemoData.xlsx,Sheet1);}

  POI库处理excel文件

  ExcelMethod中我们定义了一个处理Excel文件的通用方法。这里可以使用通用的第三方Office文件处理库POI

  使用POI可以通过maven导入。这里主要有poi和ooxml两个依赖库需要使用

  dependency

  groupIdorg.apache.poi/groupId

  artifactIdpoi/artifactId

  version4.0.0/version

  /dependency

  dependency

  groupIdorg.apache.poi/groupId

  artifactIdpoi-ooxml/artifactId

  version4.0.0/version

  /dependency

  引入POI后就可以利用POI提供的便利的excel数据处理功能,完成数据的读取

  publicstaticStreamArgumentsgetTestDataStreamFromExcelFile(StringexcelFullPath,

  StringsheetName){

  StreamArgumentsreturnStream=Stream.empty();

  //定义单元格数据格式处理对象

  DataFormattermyDataFormatter=newDataFormatter();

  //获取工作簿对象

  try(WorkbookexcelFile=WorkbookFactory.create(newFile(excelFullPath),null,true)){

  //获取工作表

  SheetexcelSheet1=excelFile.getSheet(sheetName);

  //行数据处理,忽略标题行,行数据作为后续参数List

  for(Rowrow:excelSheet1){

  if(row.getRowNum()==0){continue;}

  ArrayListObjectrowArrayList=newArrayList();

  //获取单元格数值,存入行List

  for(Cellcell:row){

  rowArrayList.add(myDataFormatter.formatCellValue(cell));

  }

  //转换为MethodSource的Arguments对象

  Argumentsarguments=Arguments.of(rowArrayList.toArray());

  //Arguments转换为Stream

  returnStream=Stream.concat(returnStream,Stream.of(arguments));

  }

  returnreturnStream;

  }catch(IOExceptione){

  e.printStackTrace();

  }

  returnreturnStream;

  }

  如此,我们就完成了通过Excel在Junit5中进行数据驱动测试的支持。

  思考:我们的测试方法,现在需要匹配Excel数据,进行参数的个数和类型的匹配指定,有没有更好的方法可以更加灵活地兼容Excel数据内容呢?

猜你喜欢

转载自blog.csdn.net/qianfeng_dashuju/article/details/83417852
今日推荐