JMeter之上传文件和下载文件

内容概要

1、上传下载的原理

2、如何在jmeter中实现上传、下载

3、上传文件、下载的接口如何做参数化

4、下载接口如何断言

5、保存jmeter下载的文件

6、内容拓展学习

上传下载的原理

上传原理:浏览器将本地文件内容通过HTTP发送到服务端,服务端接受到数据后,创建创建一个文件

下载原理:同上传原理,下载是服务器把文件内容发送客户端,客户端接收到内容后,创建文件储存;

最终来说:传输的是数据而不是文件!

如何在jmeter中实现上传、下载

文件上传方式

表单方式

上传文件、下载的接口如何做参数化

使用CSV配置元件循环读取,脚本准备如下举例,大小用于断言;

注意:大小值的是文件属性里的字节大小。

下载接口如何断言

针对指定文件上传后,再下载时的对比得知,响应头里的Content-Length(这里文件内容的总长度,包括最后的回车)值等于文件的大小。

 即,可以使用大小断言进行下载结果的断言

 另,不同的接口返回的值可能不一样,可根据实际调试后取不同的断言方式,如下图的请求结果,返回的大小会大于文件的实际大小,是因为这个大小包含了请求头、请求内容等非文件的内容,所以结果上是大于文件的本身,这个时候可以使用大于等于断言。

保存jmeter下载的文件

通过‘上传下载的原理’得知,通过页面下载文件时,创建文件其实是浏览器的行为,并不是HTTP本身提供的能力,而JMeter本身也不会自动帮我们创建。

所以,如下图,请求下载接口后,得到是一串看不懂的数据流,这说明下载接口请求是没有问题的,若想要把下载请求到的内容展示出来,需要在JMeter里额外做处理。

添加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:\\"+System.currentTimeMillis()+".xlsx"; //代表存放文件的位置和文件名,将每次下载的文件都重命名,后缀为xlsx(防止相同文件被覆盖)
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

 下载结果展示:

变量形式下载文件

期望通过${num},使每次下载的文件名自动递增,如:

import java.io.*;
byte[] result = prev.getResponseData(); 

String file_name =  "D:\\六年级\\"+${num}+".jpg";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

 但是发现会有这样的错误:

2022-08-27 11:06:11,121 ERROR o.a.j.u.BeanShellInterpreter: Error invoking bsh method: eval    Sourced file: inline evaluation of: `` import java.io.*; byte[] result = prev.getResponseData();  //这个是获取到请求返回的数据,prev . . . '' Token Parsing Error: Lexical error at line 9, column 25.  Encountered: "\u516d" (20845), after : "\"D:\\"

2022-08-27 11:06:11,121 WARN o.a.j.e.BeanShellPostProcessor: Problem in BeanShell script: org.apache.jorphan.util.JMeterException: Error invoking bsh method: eval    Sourced file: inline evaluation of: `` import java.io.*; byte[] result = prev.getResponseData();  //这个是获取到请求返回的数据,prev . . . '' Token Parsing Error: Lexical error at line 9, column 25.  Encountered: "\u516d" (20845), after : "\"D:\\"

 解决办法是在文件路径再增加一个 \ ,如下: 

import java.io.*;
byte[] result = prev.getResponseData();  

String file_name =  "D:\\\六年级\\\"+${num}+".jpg";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

其实没明白为什么会这样,百度说是$转义了。

内容拓展学习

1、上传文件multipart form-data与boundary 说明

2、MIME 参考手册MIME 参考手册

3、ContenType类型大全

4、文件的上传和下载

5、Jmeter 下载文件路径报错排查 - 博客园

  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值