工具: Jmeter, 用到插件jmeter-websocket-samplers
要求:
每个线程建立一个长连接,中间不停的收发消息消息数也是并发考量点。一共两个考量点,连接同时在线数,每个连接接受/发送的消息处理数。
备注:
本次例子中连接不必要求建立连接过程的强并发,只是需要考量在一定数量的连接下,系统消息的处理能力,所以在创建连接的过程可以是阶梯式的创建,等所有连接创建好后再进行消息的发送/接收。
一, 自发自收型:
自收自发型比较简单
1, 线程中中添加 WebSocket Open Connection, 建立长连接
2, 添加循环控制器
3,再循环控制器中添加 WebSocket Request-Response Sampler 选择使用已建立的连接,并设置发送的消息信息以及响应断言
4,循环之外关闭连接
二,甲发乙收型
发给第三方收稍微复杂点。首先要清楚一个概念,发消息的连接和收消息的连接必须同时在线时,这一组消息才会被成功处理,比如甲为消息发送方,发消息给乙, 如果甲发送消息的时候,乙还没有建立连接已经错过甲发送的消息了,等乙再建立连接时也无法再收到甲之前发送过的消息了,只能接收建立连接之后甲发送的消息。
另外如果一个连接在长时间内一条消息都没有发送,只是收消息的话,会被自动关掉, 所以为了能够顺利进行压测,乙在接收消息的同时需要给一段时间发送一条消息以免被迫下线。
1, 首先新建两个线程一个用来放甲方专门发送消息的,一个方乙方专门验证收消息的。为了减小创建连接的压力将甲乙创建连接的时间点错开,且设置20-30秒内完成连接即可,另为了所有连接在线后再开始接收、发送消息,这里再建立连接后添加一个同步定时器。
2,添加计数器,和循环控制器. 计数器用来放在消息体中区分不通的消息,好断言判断收到的消息时正确的
3,循环控制器中添加接收、发送消息的sampler,
比较麻烦的点:
连接并发量大的时候,系统支撑不了那么大的并发连接,实际也不存在这种情况需要错开连接,但是又得保证发送方和接收方得连接同时建立后,才开始收发消息,至少发消息要等到连接都建立后,不然会导致消息丢失,整个压测得结果就会收到影响。所以错开延时时间以及Ramp-up得时间需要根据实际情况调整
另,接收消息得超时时间可以设置大点,以防消息延迟,或者再发送得时候刚好错过接收,这里做了2次重试处理,即:第一次断言是否收到消息n时,失败了收到得时消息n-1,那么有两次重试得机会直到成功。