jmeter实现文件上传和下载
一、简介
http请求常见的content-type分为3种:application/json、x-www-form-urlencoded、multipart/form-data,这里重点说下multipart/form-data。
multipart/form-data主要用于post请求体中需要上传文件的场景或表单场景,在项目实践中遇到过当post请求体中既需要上传文件,又需要传一般的json格式参数这种场景,下面是在我实际测试中遇到的multipart/form-data格式请求的发送:
二、文件上传
请求设置:
1、填写protocal、host、port、method、url、encoding等;
2、勾选Use multipart/form-data for POST;
3、在Files Upload中填写需要上传的文件路径、参数名、MIME类型
如下图可确定参数名称,MIME类型
jmeter文件上传http请求配置
参数封装为json格式:
在Files Upload中填写需要上传的文件路径、参数名、MIME Type(multipart/form-data);如果这里没有需要上传的文件,也可以不填,只发送parameters中的参数,前提是后端接口认为这个参数不是必传参数
注意事项:http头信息中输入cookie等信息,这里千万不要输入content-type为multipart/form-data,在请求那里已经勾选了Use multipart/form-data for POST(注:如果头信息这里输入了content-type为multipart/form-data,那么所有的参数都会被当成文件以二进制形式传输,我们parameter里的文本格式参数就不会被识别,接口会提示那些参数为空)
三、文件下载
1、通过文件地址直接下载
配置HPPT请求:
添加BeanShell 取样器(BeanShell Sampler)并配置:
代码如下:
import java.io.*; byte[] result = prev.getResponseData(); //这个是获取到请求返回的数据,prev是获取上个请求的返回 //单个下载
//String file_name = "D:\\apache-jmeter-5.1.1\\data\\123.mp4";
//批量下载
String file_name = "D:\\apache-jmeter-5.1.1\\data\\"+System.currentTimeMillis()+".mp4"; //代表存放文件的位置和文件名,将每次下载的文件都重命名,后缀为mp4(防止相同文件被覆盖) File file = new File(file_name); FileOutputStream out = new FileOutputStream(file); out.write(result); out.close();
运行:
注意事项:
1)批量下载时,不要使用监听器,监听器会占用大量内存,会出现内存溢出问题。(如关闭监听器还是出现内存溢出问题,那就需要修改jmeter配置文件)
2、通过接口下载文件
配置HPPT请求:
添加BeanShell 后置处理程序并配置:
代码如下:
import java.io.*; byte[] result = prev.getResponseData(); //这个是获取到请求返回的数据,prev是获取上个请求的返回 //单个下载 //String file_name = "D:\\apache-jmeter-5.1.1\\data\\7891.xls"; //批量下载 String file_name = "D:\\apache-jmeter-5.1.1\\data\\"+System.currentTimeMillis()+".xls"; //代表存放文件的位置和文件名,将每次下载的文件都重命名,后缀为mp4(防止相同文件被覆盖) File file = new File(file_name); FileOutputStream out = new FileOutputStream(file); out.write(result); out.close();
运行