0
点赞
收藏
分享

微信扫一扫

性能工具之Jmeter上传与下载介绍

了解

       性能测试工作中,文件上传也是经常见的性能压测任务之一,之前工作中一直使用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数组

创建工程

新建文件上传与下载工程代码

  • 创建后端上传代码
  • 创建后端下载代码
  • 创建前端上传与下载代码

后端下载代码


1. /**
2.  * @author liwen
3.  * @Title: FileController
4.  * @Description: 文件操作类
5.  * @date 2019/12/13 / 21:00
6.  */
7. @Controller
8. @RequestMapping("/file/")
9. public class FileController {
10. 
11. 
12.     /**
13.      * 文件上传
14.      *
15.      * @param fileupload 文件
16.      * @return msg
17.      */
18.     @PostMapping("fileupload")
19.     @ResponseBody
20.     public Msg upload(@RequestParam("fileupload") MultipartFile fileupload) {
21. 
22.         if (fileupload.isEmpty() || fileupload.getSize() < 0) {
23.             return Msg.fail().add("mgs", "文件为空,上传失败!");
24.         }
25.         // 获取文件名字
26.         String fileName = fileupload.getOriginalFilename();
27.         // 获取后缀名
28.         // String suffixName = fileName.substring(fileName.lastIndexOf("."));
29.         // 文件保存路径
30.         String filePath = "E:\\test\\7d\\upload\\";
31.         // 文件重命名,防止重复
32.         fileName = filePath + UUID.randomUUID() + fileName;
33.         // 文件对象
34.         File dest = new File(fileName);
35.         // 判断路径是否存在,如果不存在则创建
36.         if (!dest.getParentFile().exists()) {
37.             dest.getParentFile().mkdirs();
38.         }
39.         try {
40.             // 保存到服务器中
41.             fileupload.transferTo(dest);
42.             return Msg.success().add("mgs", "文件上传成功");
43.         } catch (Exception e) {
44.             e.printStackTrace();
45.         }
46.         return Msg.fail().add("mgs", "文件上传失败");
47.     }
48. 
49. 
50.     /**
51.      * 文件下载
52.      *
53.      * @param name     下载文件名字
54.      * @param response 响应流
55.      * @return mgs
56.      * @throws Exception 异常处理
57.      */
58.     @GetMapping("download")
59.     public void download(@RequestParam("filedown") String name, HttpServletResponse response) throws Exception {
60.         if (name.isEmpty()) {
61.             return;
62.         }
63.         // 文件地址,真实环境是存放在数据库表中
64.         File file = new File("E:\\test\\7d\\upload\\" + name);
65.         //判断文件是否存在
66.         if (!file.exists()) {
67.             return;
68.         }
69.         // 文件对象输入流
70.         FileInputStream fis = new FileInputStream(file);
71.         // 设置相关格式
72.         response.setContentType("application/force-download");
73.         // 设置下载后的文件名以及header
74.         response.addHeader("Content-disposition", "attachment;fileName=" + name);
75.         // 创建输出对象
76.         OutputStream os = response.getOutputStream();
77.         // 常规操作
78.         byte[] buf = new byte[1024];
79.         int len = 0;
80.         while ((len = fis.read(buf)) != -1) {
81.             os.write(buf, 0, len);
82.         }
83.         fis.close();
84.         return;
85.     }
86. 
87. }

新建前端代码


1. <!DOCTYPE html>
2. <html lang="zh-CN" xmlns:th="http://www.thymeleaf.org">
3. <head>
4.     <meta charset="utf-8">
5.     <meta http-equiv="X-UA-Compatible" content="IE=edge">
6.     <meta name="viewport" content="width=device-width, initial-scale=1">
7.     <!-- 上述3个meta标签*必须*放在最前面,任何其他内容都*必须*跟随其后!-->
8.     <title>文件上传下载</title>
9.     <meta name="description" content="文件上传下载">
10.     <meta name="author" content="liwen">
11.     <!-- Bootstrap -->
12.     <link href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" rel="stylesheet">
13. 
14.     <!-- HTML5 shim 和 Respond.js 是为了让 IE8 支持 HTML5 元素和媒体查询(media queries)功能 -->
15.     <!-- 警告:通过 file:// 协议(就是直接将 html 页面拖拽到浏览器中)访问页面时 Respond.js 不起作用 -->
16.     <!--[if lt IE 9]>
17.     <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script>
18.     <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script>
19.     <![endif]-->
20. </head>
21. <body>
22. <div class="container">
23.     <h1>你好,我好,大家好!</h1>
24.     <br>
25.     <div>
26.         <h2>文件上传</h2>
27.         <form id="fileupload" enctype='multipart/form-data'>
28.             <input type='file' name='fileupload'>
29.             <button type='button' class="btn  btn-primary" onclick="uploadFile()">上传</button>
30.         </form>
31.     </div>
32. 
33.     <div>
34.         <h2>文件下载</h2>
35.         <form th:action="@{/file/download}" action="/file/download" method="get">
36.             <input type='text' name='filedown'>
37.             <button type='submit' class="btn  btn-primary">下传</button>
38.         </form>
39.     </div>
40. 
41.     <!-- jQuery (Bootstrap 的所有 JavaScript 插件都依赖 jQuery,所以必须放在前边) -->
42.     <script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script>
43.     <!-- 加载 Bootstrap 的所有 JavaScript 插件。你也可以根据需要只加载单个插件。-->
44.     <script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js"></script>
45. </div>
46. </body>
47. <script>
48. 
49.     //文件上传
50.     function uploadFile() {
51.         //FormData是html5的接口,使用它一行代码便可以拿到整个form表单对象:
52.         var form = new FormData(document.getElementById("fileupload"));
53.         $.ajax({
54.             url: "/file/fileupload",
55.             type: "post",
56.             data: form,
57.             cache: false,
58.             processData: false,
59.             contentType: false,
60.             success: function (data) {
61.                 if (data.code == 100) {
62.                     alert(data.extend.mgs);
63.                 } else {
64.                     alert(data.extend.mgs);
65.                 }
66.             },
67.             error: function (e) {
68.                 alert("网络错误,请重试!!");
69.             }
70.         });
71.     }
72. 
73. </script>
74. </html>

运行效果

性能工具之Jmeter上传与下载介绍_文件上传

Jmeter操作

-打开Jmeter并且创建线程组、http请求

文件上传:

性能工具之Jmeter上传与下载介绍_文件上传_02

编写关键点

性能工具之Jmeter上传与下载介绍_路径名_03


注意点

性能工具之Jmeter上传与下载介绍_文件上传_04


验证结果:

性能工具之Jmeter上传与下载介绍_路径名_05

文件存放位置验证:

性能工具之Jmeter上传与下载介绍_文件上传_06

Jmeter附件下载

性能工具之Jmeter上传与下载介绍_文件上传_07

编写下载位置代码

性能工具之Jmeter上传与下载介绍_上传_08


参考代码

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请求等信息,高老师经典一句《看到数据,推断什么地方有性能问题,背后的知识点需要积累多少日月》。


     送大家一句:


静中静非真静,动处静得来,才是性天之真境;乐处乐非真乐,苦中乐得来,才是心体之真机。

    

性能工具之Jmeter上传与下载介绍_路径名_09


举报

相关推荐

0 条评论