了解
性能测试工作中,文件上传也是经常见的性能压测任务之一,之前工作中一直使用loadrunner做文件上传与下载压测,近几年开始使用Jmeter做性能测试,那么文件上传下载脚本怎么做,今天分享Jmeter文件上传与下载脚本怎么做.
知识点
- java文件上传下载代码
- jmeter脚本中上传与下载
java文件目录文件操作复习
先学习下java Api关于文件操作的API,这样方便咱们进一步工作
构造方法
- File(File parent, String child) 根据 parent 抽象路径名和 child 路径名字符串创建一个新 File 实例。
- File(String pathname) 通过将给定路径名字符串转换为抽象路径名来创建一个新 File 实例。
- File(String parent, String child) 根据 parent 路径名字符串和 child 路径名字符串创建一个新 File 实例。
- File(URI uri) 通过将给定的 file: URI 转换为一个抽象路径名来创建一个新的 File 实例。
- public boolean createNewFile():创建文件 如果存在这样的文件,就不创建了
创建功能
- public boolean mkdir():创建文件夹 如果存在这样的文件夹,就不创建了
- public boolean mkdirs():创建文件夹,如果父文件夹不存在,会帮你创建出来
重命名和删除功能
- public boolean renameTo(File dest):把文件重命名为指定的文件路径
- public boolean isDirectory():判断是否是目录
- public boolean isFile():判断是否是文件
- public boolean exists():判断是否存在
- public boolean canRead():判断是否可读
- public boolean canWrite():判断是否可写
- public boolean isHidden():判断是否隐藏
获取功能
- public String getAbsolutePath():获取绝对路径
- public String getPath():获取路径
- public String getName():获取名称
- public long length():获取长度。字节数
- public long lastModified():获取最后一次的修改时间,毫秒值
- public String[] list():获取指定目录下的所有文件或者文件夹的名称数组
- public File[] listFiles():获取指定目录下的所有文件或者文件夹的File数组
创建工程
新建文件上传与下载工程代码
- 创建后端上传代码
- 创建后端下载代码
- 创建前端上传与下载代码
后端下载代码
/**
* @author liwen
* @Title: FileController
* @Description: 文件操作类
* @date 2019/12/13 / 21:00
*/
@Controller
@RequestMapping("/file/")
public class FileController {
/**
* 文件上传
*
* @param fileupload 文件
* @return msg
*/
@PostMapping("fileupload")
@ResponseBody
public Msg upload(@RequestParam("fileupload") MultipartFile fileupload) {
if (fileupload.isEmpty() || fileupload.getSize() < 0) {
return Msg.fail().add("mgs", "文件为空,上传失败!");
}
// 获取文件名字
String fileName = fileupload.getOriginalFilename();
// 获取后缀名
// String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 文件保存路径
String filePath = "E:\\test\\7d\\upload\\";
// 文件重命名,防止重复
fileName = filePath + UUID.randomUUID() + fileName;
// 文件对象
File dest = new File(fileName);
// 判断路径是否存在,如果不存在则创建
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
try {
// 保存到服务器中
fileupload.transferTo(dest);
return Msg.success().add("mgs", "文件上传成功");
} catch (Exception e) {
e.printStackTrace();
}
return Msg.fail().add("mgs", "文件上传失败");
}
/**
* 文件下载
*
* @param name 下载文件名字
* @param response 响应流
* @return mgs
* @throws Exception 异常处理
*/
@GetMapping("download")
public void download(@RequestParam("filedown") String name, HttpServletResponse response) throws Exception {
if (name.isEmpty()) {
return;
}
// 文件地址,真实环境是存放在数据库表中
File file = new File("E:\\test\\7d\\upload\\" + name);
//判断文件是否存在
if (!file.exists()) {
return;
}
// 文件对象输入流
FileInputStream fis = new FileInputStream(file);
// 设置相关格式
response.setContentType("application/force-download");
// 设置下载后的文件名以及header
response.addHeader("Content-disposition", "attachment;fileName=" + name);
// 创建输出对象
OutputStream os = response.getOutputStream();
// 常规操作
byte[] buf = new byte[1024];
int len = 0;
while ((len = fis.read(buf)) != -1) {
os.write(buf, 0, len);
}
fis.close();
return;
}
}
新建前端代码
lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
charset="utf-8">
http-equiv="X-UA-Compatible" content="IE=edge">
name="viewport" content="width=device-width, initial-scale=1">
文件上传下载
name="description" content="文件上传下载">
name="author" content="liwen">
href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
class="container">
你好,我好,大家好!
文件上传
id="fileupload" enctype='multipart/form-data'>
type='file' name='fileupload'>
type='button' class="btn btn-primary" onclick="uploadFile()">上传
文件下载
th:action="@{/file/download}" action="/file/download" method="get">
type='text' name='filedown'>
type='submit' class="btn btn-primary">下传
//文件上传
function uploadFile() {
//FormData是html5的接口,使用它一行代码便可以拿到整个form表单对象:
var form = new FormData(document.getElementById("fileupload"));
$.ajax({
url: "/file/fileupload",
type: "post",
data: form,
cache: false,
processData: false,
contentType: false,
success: function (data) {
if (data.code == 100) {
alert(data.extend.mgs);
} else {
alert(data.extend.mgs);
}
},
error: function (e) {
alert("网络错误,请重试!!");
}
});
}
运行效果
Jmeter操作
-打开Jmeter并且创建线程组、http请求
文件上传:
编写关键点
注意点
验证结果:
文件存放位置验证:
Jmeter附件下载
编写下载位置代码
参考代码
import java.io.*;byte[] result = prev.getResponseData();String file_name = "E:\\test\\7d\\data\\2222.ico";File file = new File(file_name);FileOutputStream out = new FileOutputStream(file);out.write(result);out.close();
总结
上面是简单的介绍,知识点很多java文件操作,目录操作,http请求等信息,高老师经典一句《看到数据,推断什么地方有性能问题,背后的知识点需要积累多少日月》。
送大家一句:
静中静非真静,动处静得来,才是性天之真境;乐处乐非真乐,苦中乐得来,才是心体之真机。