背景
一般在做接口有上传或是下载文件时会涉及到文件路径,当跨平台时路径的格式也会不一样,如:windows下分隔符是"/",而linux下是“\”,jmeter脚本跨平台执行时就会出错,为避免此问题,引用变量,路径使用相对值,分隔符自动获取。
具体操作
获取jmeter执行脚本的当前路径,可以使用下面脚本
${__BeanShell(import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();)}
而分隔符可以用变量
${__property(file.separator)}
如:数据文件filename存在脚本执行目录下的data时,就可以写作
${__BeanShell(import org.apache.jmeter.services.FileServer;FileServer.getFileServer().getBaseDir();)}${__property(file.separator)}data${__property(file.separator)}filename
当在实际的脚本中使用时需要注意的是分隔符是属于系统变量,所以书写形式需要注意,要使用"System.getProperty(“file.separator”)}",具体脚本如下
import org.apache.jmeter.services.FileServer;
//获取当前脚本执行路径及系统分隔符,此变量解决了跨平台的路径问题
String JmeterPath = FileServer.getFileServer().getBaseDir()+System.getProperty("file.separator");
String resPonseCode = prev.getResponseCode();
if(resPonseCode.equals("200")){
ResponseData = prev.getResponseData();
String ResponseDataType = ResponseData.getClass().getName();
if(ResponseDataType.equals("[B")){
byte[] result = ResponseData; //这个是获取到请求返回的数据,prev是获取上个请求的返回
log.warn(result.getClass()+"");
String file_name = JmeterPath+"template"+System.getProperty("file.separator")+"角色.xlsx";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();
if(file.exists()){
//根据实际情况各业务自己判断是否需要补充对导出文件的内容验证,此处暂时只判断文件是否存在
prev.setResponseData("下载成功","UTF-8");
log.warn("下载成功");
}
else{
prev.setResponseData("下载失败","UTF-8");
log.warn("下载失败");
}
}
}