这是个坑啊~
准备用Jmeter做压力测试,实现把单个接口的相关参数在Postman里面调试通过,然后搬运到Jmeter上面来,先跑一次看是否通过。
诡异的事情出现了:居然不行!
仔仔细细的比对了两个工具里该请求的相关参数:
- 是Post请求,地址没写错;
-
请求body是form-data,参数也都一致;
postman的body配置
![](https://img.haomeiwen.com/i9701136/97ebcdf37939939f.png)
-
header所需的所有参数也都一样,并且都按照开发文档的要求填上了Content-Type: multipart/form-data
postman的header配置
![](https://img.haomeiwen.com/i9701136/b1ffff3355b7f5c8.png)
可以说是一模一样了!
由于Jmeter的header是单独用HTTP Header Manager来管理的,因此还特意检查了它的作用域(和HTTP request平级或者是其子级,可以被使用到),也是OK的。
无意中禁用了HTTP Header Manager,然后再请求,居然这次jmeter请求成功了!
由于这个请求的header里面参数较少,只有Content-Type,所以推测是和它有关系。
检查了jmeter中,这次请求成功的request数据,发现有这么一行:Content-Type: multipart/form-data; boundary=wVDFbKOrJUSR6pzaJkPhlIWnwLcdmKHHV9
,也就是说,好像自动加上了Content-Type。仔细想想,在body里面是有勾选```Use multipart/form-data``的,所以应该和这项配置有关。
所以这么说,我在header里面再写一遍反而是冗余的?于是尝试把postman里这一项也给删掉,同样也能请求成功。
那么加上它,request数据会有什么不同吗?检查后发现有这么一行:Content-Type: multipart/form-data
和上面的相比缺少了boundary。虽然不知道为什么这一点点区别就会导致jmeter请求失败,总算是把问题给解决了。
个人猜测,可能不同工具对待冗余参数的处理方式不同,所以postman是可以兼容的,而jmeter不行。
网友评论