问题描述:
在用Jmeter测试 WebSocket 接口时遇到了这种情况,Jmeter请求一个wss协议的Websocket 接口,各项参数都填写正确,可是取样器结果是403(见下图),同一个请求在 websocket 在线测试工具中连接就没有问题。
错误代码如下:
Thread Name: 线程组 1-1
Sample Start: 2019-09-04 17:47:20 CST
Load time: 504
Connect Time: 0
Latency: 0
Size in bytes: 0
Sent bytes:0
Headers size in bytes: 0
Body size in bytes: 0
Sample Count: 1
Error Count: 1
Data type ("text"|"bin"|""):
Response code: 403
Response message: Http Upgrade failed with status code 403
SampleResult fields:
ContentType:
DataEncoding: null
同样,HTTP请求有时也会遇到相同的问题,这是因为被请求的网站做了请求来源过滤,来源不明的请求拒绝访问,我们需要在jmeter中添加模拟浏览器信息。
举个例子,优快云博客(blog.youkuaiyun.com)就有这样的机制。
用jmeter请求blog.youkuaiyun.com。参考https://blog.youkuaiyun.com/weixin_33901641/article/details/85903493
解决方法:
1、在浏览器中用websocket在线测试连接请求地址,按F12开发者工具,找到该请求的 Request Headers 请求头信息(参见下图);
2、线程组→添加→配置元件→HTTP信息头管理器。将 Request Headers 中的请求头信息复制添加到Jmeter 的HTTP信息头管理器中(参见下图);
3、HTTP信息头管理器添加完成后,运行Jmeter线程组,察看结果树-取样器结果请求成功(如下图)。若取样器结果仍未成功,根据取样器结果提示删除部分HTTP请求头信息即可。
HTTP请求不成功或报403错误解决方法同上。