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();

 

 运行

 

posted on 2021-04-29 11:07  uestc2007  阅读(408)  评论(0编辑  收藏  举报

导航