参考文档:
Jmeter接口测试-文件上传(全网最详细的教程)_jmeter 文件上传-CSDN博客
1、首先通过fiddler抓取文件上传接口,在Raw的tab页中查看默认请求头以及请求参数 如图所示

2、在jmeter中导入抓取的接口,首先需要配置token传递(有教程不赘述),然后配置默认消息请求头,因为该接口与其它接口的默认请求头不一致最简单的方式就是每个接口配置一个请求头,该上传文件请求头配置如下

如步骤1获取到的接口请求头所示,直接将请求头的信息复制过来即可,但是需要修改获取新的token,以及删除如下图所示的两个请求头,Content-Disposition只需输入form-data; name="file"即可,最终配置如上图所示。

3、接口的默认请求消息头配置完成后m,需要对接口进行配置;首先需要勾选对POST使用multipart/form-data;其次查看fiddler的接口消息头中是否有其他参数如果有则添加在对应的参数/消息体数据中,没有的话就只需要配置文件上传tab,我这边是没有的。只需要配置文件文件上传即可。
4、在文件上传的接口界面,点击文件上传tab,点击浏览在本地选择需要上传的文件,输入参数名以及MIME类型;
file和MIME类型对应关系如下图所示:
- 参数名称根据fillder中的Content-Disposition: form-data; name="file"; 填写file;
-
- MIME类型根据fiddler中的Content-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document;填写 application/vnd.openxmlformats-officedocument.wordprocessingml.document;
配置完成如图所示:

file和MIME类型对应关系如下图所示

5、上述步骤完成后就可以实现接口上传文件的效果了,这时可以通过添加其他组件来实现接口响应结果的参数传递;我这边一般是用正则表达式提取器,之前token传递教程中有使用,这次就换个组件使用Json提取器。
6、在对应接口下添加JSON提取器,添加步骤如下图所示。

7、添加JSON提前器之后,需要根据该接口的响应数据以及所需要提取的参数对该组件进行配置,接口响应参数如下(使用JSON格式显示);
我这边需要提取接口结果中的createTime;imageUrl;id

8、查看接口响应数据以及找到需要提取的参数后,则需要配置JSON提取器组件,
8.1:第一行参数名,需要几个参数则写几个参数,直接用;隔开;如:imageUrl;createTime;id
8.2:第二行提取表达式,有几个参数则需要写几个对应表达式;如:$.data.imageUrl;$.data.createTime;$.data.id ;$.是固定格式;data代表接口响应数据中的大括号的参数(如步骤7的图中所示);imageUrl则是接口响应数据中所需要抓取的参数值。
8.3:第三行默认取值范围,都取找到的第一个值 如:1;1;1
8.4:最后一行则表示默认值,抓取不到数据显示的值,如:error1;error2;error3
8.5:有几个参数,下方对应必须有几个。如上方,有3个参数名(imageUrl;createTime;id),下方一一对应,每行有3个

9、获取到上传文件响应数据的参数值后,可以将参数传递给与上传文件相关联的添加数据接口。
在对应的参数上填写:${id} ${imageUrl} ${createTime};如下图所示

10、在步骤8配置完JSON提取器后可以在该接口下再添加一个JSON断言来判断是否提取到对应的参数值。

11、在JSON断言中配置,根据上传文件接口的响应数据
"code": 200,来填写,AssertJSON Path exists(JSON断言路径)输入$.code;在Expected Value:输入200


至此上传文件接口以及相关的参数值传递就配置完成了。
下面链接是接口上传图片的相关教程,过程应该是上传文件差不多。
JMeter接口测试之文件上传!_jmeter图片上传(2),2024年最新被大佬问到自闭_jmeter 文件上传-CSDN博客
问题解决:
问题1:
今天上传图片的时候遇到了一个问题,发现返回时显示成功,但是data里面是空的,配置也没有问题

正常应该是这种

又来经过挺长时间排查,原来是一个非常愚蠢的操作导致的,就是我这边为了方便,直接在所有接口前面通用一个HTTP信息头管理器如图

因为上传文件接口是multipart/form-data类型的,因此在请求头中不能有Content-type字段,因此在这边把最上面默认请求头的该字段信息带过来了,因此无法上传成功。
解决办法就是将最上面的通用默认请求头中的Content-type字段删除,单独为下面需要的接口加上,上传文件接口再单独配置默认请求头的相关信息即可。其它配置跟上面步骤一样
像下图所示配置就行了

问题2:
有次搞上传文件接口,根据fiddler抓取的接口进行配置,且请求头也没有错误,但是当发送请求时就一直失败,后来经常很长时间的排查才找到问题所在,如图,我一般习惯于看fiddler中Raw窗口中参数,一般来说,请求参数都在红框处,因为后面的都是乱码,结果在乱码的下面还有一个请求参数,这个我没有看到 导致少传了一个参数,一直请求失败。,

把Raw窗口拉到最下面,可以看到少的一个参数,

在jmeter上传文件接口中,将该参数加上就可以请求成功了。

通过这个问题,为了防止我们有遗漏的参数,在fiddler中可以以Raw窗口中信息的为主,WebForms为辅,该窗口会显示所有的请求参数。 name后面的就是参数名,Value就是参数值。
