Jmeter对excel文件流进行内容判断

使用Jmeter调用下载excel文件的接口时,需要判断文件内容是否包含指定的字符串,进而在文件名称中进行标识,方便对下载的excel文件进行管理。

实现以上需求,要在BeanShell PostProcessor中编写代码,对接口返回的数据进行处理,具体代码内容为:

import java.util.regex.*;
import java.io.*;
import java.net.URLDecoder;
import org.apache.jmeter.services.FileServer;
import org.apache.poi.ss.usermodel.*;

String baseDir=FileServer.getFileServer().getBaseDir();  //获取当前脚本的路径
byte[] responseData=prev.getResponseData();  //获取响应数据,这里是文件流
String headers= prev.getResponseHeaders();   //获取响应头信息

String pattern="Content-Disposition:(.*)";  //正则表达式,用于提取文件名
Pattern r=Pattern.compile(pattern);  //创建Pattern对象
Matcher m = r.matcher(headers);  //创建matcher对象
String fileName = "";
if (m.find()){
	token=m.group(1).trim();
	String[] str = token.split(";");
	String a = str[1];
	String[] str1 = a.split("=");
	fileName = URLDecoder.decode(str1[1], "UTF-8");
}else{
	log.info("No Match!");
     fileName=vars.get("ecuid");
}

//判断是否有解析失败的数据
InputStream excelFile = new ByteArrayInputStream(responseData);
Workbook workbook = WorkbookFactory.create(excelFile);
Sheet sheet = workbook.getSheetAt(0);
for (Row row : sheet) {
    for (Cell cell : row) {
    	    String cellvalue = cell.getStringCellValue();
         if (cellvalue.contains("解析失败")){
         	  fileName="【有解析失败数据】" + fileName;
         	  break;
         	}
     }
}
workbook.close();

fileName = baseDir +"\\result\\" + fileName; 
File file = new File(fileName);
FileOutputStream out = new FileOutputStream(file);
out.write(responseData);           //文件流写入到文件
out.close();

说明:

  • Excel文件是二进制文件,其中包含大量的元数据和格式信息,它需要特殊的软件(如MS Excel)才能正常打开、读取和编辑。对于Excel文件,需要使用特定的库或工具来读取和处理,例如Apache POI和 JExcelAPI。这些库提供了一组API来读取和写入Excel文件的内容,并处理其中的元数据和格式信息。(对于txt文件,可以使用Java的标准输入/输出流或者使用更高级别的字符流或缓冲流来读取和处理其内容)
  • org.apache.poi.ss.usermodel是Apache POI库中用于处理电子表格的Java包。其中,ss表示“SpreadSheet”,即电子表格的意思。在这个包中,包含了许多用于操作Excel文件的类和接口,如Workbook、Sheet、Row、Cell等。这些类和接口可以使开发人员在Java程序中读取、修改和创建Excel文件,实现与Excel文件的交互。
  • Jmeter文件的上传和下载操作,这里不再说明,需要的可以参看另一篇文章《Jmeter文件上传和下载实践》

你可能感兴趣的:(JMeter,jmeter,excel,java)