客户端发送主动断开连接的请求,服务端断开该连接
在WebSocketAPI中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
有可能造成数据更新不及时,如果前端轮询频率为5s,也许数据在这5s内已经更新多次了。
HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议-WebSocket,很好地解决了http轮询的弊端。
要经过请求和响应两次交互,增加了耗时,而且http请求可能携带大量的header信息,增加网络带宽占用
也就是说,http轮询机制,主动权完全在客户端,而WebSocket机制中,主动权可以交给服务端,数据推送可以更精确,包括何时推送,推送什么数据。
零基础转行软件测试:自学完软件测试,拿到了字节的测试岗offer,堪称B站最好的视频!
建立连接后,客户端需要定时向服务端发送ping-pong消息,维持心跳
这个请求要与连接请求是同一个线程,并且要定时运行,因此设计脚本结构如下:注意两点:
有可能对数据库造成额外压力,例如一个用户资产长时间不变化,但客户端还是要定时去查询,这种无意义查询占比相当高,对服务器造成不必要的压力。
Connection项一定要选择useexistingconnection,表示使用该线程已经建立的连接,否则就重新创建连接了。
客户端向服务端发送请求,建立连接
一般的websocket推送服务,会设计定时心跳检测机制,也就是客户端定时向服务端发送一条特定的消息,这样服务端就会保持这个连接,否则的话,这个客户端就被服务端判定为不活跃而被断掉连接。为了让我们的脚本持续跑下去,就需要加入心跳检测请求。
Connection:有useexistingconnection和setupnewconnection两种模式,前者是使用已有连接,即上一个websocket请求所建立的连接通道,选择后ServerURL全置灰只读不可操作。后者指新建连接通道。
下面内容基于JMeter1
准备工作JMeter可以非常便利地进行WebSocket接口测试,但需要引入下列依赖:
Data:发送数据,可以选择Text和Binary形式,也可以通过勾选Readrequestdatafromfile来从文件中获取data。
Requestdata根据服务端的实现而定。
相关依赖下载:
建立连接,使用【WebSocketrequest-responseSampler】,顾名思义,这个取样器既能发送请求也能接收响应。说明一下各项内容:
ServerURL:ws协议和wss可选,severnameorIP、Port、Path、Connectiontimeout这些含义也很明了。
想要建立3000个连接的话,一定是将【线程数】设置为3000,循环次数设置为而不是相反,这是许多人容易弄混淆的。
【Ramp-up时间】这个参数是全部线程启动的时间,如果想给服务器较大的瞬时压力,就把时间设置短一些。经过实测,这个时间太短的话,最终成功建立的连接会明显少于设置的【线程数】,所以一般设置长一点。
因为线程循环次数是1次,因此我们要把【心跳检测】放到一个循环控制器中。而【固定定时器】的作用,就是控制【心跳检测】发送的频率:心跳检测:尤其要注意两点:
如果你不想一个人野蛮生长,找不到系统的资料,问题得不到帮助,坚持几天便放弃的感受的话,可以点击下方小卡片加入我们群,大家可以一起讨论交流,里面会有各种软件测试资料和技术交流。
文章为作者独立观点,不代表股票交易接口观点