• 1
  • 0
分享

3. WebSocket并发实战

3.1 整理并发需求

为了便于理解,咱们的并发需求及指标,还是参照小鱼的这篇《接口并发性能测试开发之:从测试方案设计、测试策略、指标分析到代码编写,这一篇全搞定。》。

需求内容:

中午和晚上是订餐的高峰期,除了订单的并发量很大以外,对老板的并发量也很大,而老板的订单通知则是通过WebSocket来发送,获取订单通知之前需要建立WebSocket连接,所以需要通过并发来测试客户端对服务器的WebSocket并发连接成功率。

3.2 提取性能指标

性能指标提取

这个场景,仅仅测试WebSocket并发连接成功率即可。

以客户端向服务器发送100个并发的WebSocket请求为例,需要提取并发指标如下:

    · 连接数

    · 成功连接数

    · 成功连接率

    · 性能指标分析

连接数就是自定义的并发,因为请求简单而且执行比较快,所以直接用100个线程并发,不需要循环次数。

连接成功数就是获取WebSocket的响应数,

连接成功率只需要把成功连接数/总连接数。

3.3 代码编写

还是老规矩,直接上代码,在代码中分析

# -*- coding:utf-8 -*-
# @Time   : 2022-05-20
# @Author : carl_DJ

import threading
import websocket

#初始化几个全局变量
#定义并发数100
THREAD_NUM = 100
#自定义全局变量每个线程需要循环的数量,1
ONE_WORKER_NUM = 1
#设定最开始的成功连接数
success_count = 0

#编写WebSocket连接请求
def websockettest():
	
	global success_count
	#定义url
	url = "ws://www.xxx.com/serv/push?chann = delivery"
	
    #使用create_connection方法发送url连接
	ws = websocket.create_connetcion(url)
	
	#连接完成之后通过send()方法发送请求内容
	ws.send("{'type':'heartbeat','username':'13600001111','message':'ok'}")
	
	#将返回的信息赋值给new_masc
	msg = ws.recv()
	#连接成功就+1,获取成功次数
	success_count = success_count + 1

'''嵌套指定循环次数的order()函数'''

def  working():
	global ONE_WORKER_NUM
	for i in range(0,ONE_WORKER_NUM):
		websockettest()

 '''自定义main()函数,来执行线程'''
def t():
    #自定义一个空的数组,用来存放线程组
	Threads = []
	#设置循环次数
	for i in range(THREAD_NUM):
		#将working()函数存放到线程中
        t = threading.Thread(target=working,name="T"+ str(i))
         #设定守护线程
        t.setDaemon(True)
        threads.append(t)
     
    #启动循环次数
	for  t in Threads():
		t.start()
    ##设置阻塞线程
	for t in Threads:
        t.join()
    print ("main thread end")

if __name__ == "__main__":
	t()
	# 结果写入文件
	result = open("E:\Progect\resut.txt","a")
	#总连接次数
	result.write("发起连接数:" + str(THREAD_NUM) + "\n" )
	#成功连接次数
	result.write("成功连接数:" + str(success_count) + "\n" )
	#成功链接率
	result.write("成功链接率:" + str(success_count/THREAD_NUM *100) + "%" + "\n" )
	result.close()	
  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          •   每个载入浏览器的HTML文档都会成为Document对象,Document对象,是所有Anchor、Applet、Area、Form、Image、Link、Plugin等对象的祖先对象。  Document 对象使我们可以从脚本(例如javascript)中对 HTML 页面中的所有元素进行访问,比如通过标签操作元素。  一起来看看javascript(以下简称js)是如何操作Document对象及通过Document方法操作其他对象的。  Document方法列表  以chrome浏览器为例,js对document对象及其子对象常用操作方法列表如下(按字母顺序排列)。表1 Documen...
            13 13 1094
            分享
          •   质量监控的范围和概念  1.用户体验是否舒服:  以用户的角度对产品进行使用,以找到不合理,体验差的功能点。  2.产品设计是否符合:  以产品的角度对产品设计的完整性进行检验。  3.性能状况是否稳定:  以系统运维的角度找到产品性能的瓶颈。  4.逻辑设计是否存在漏洞:  以开发人员的角度检测产品的逻辑合理性。  5.系统安全,数据安全是否有保障:  以不法分子,黑客的角度对产品进行攻击,以检测产品的安全性。  测试用例设计方法:  软测行内共识的设计方法不再赘述,转帖一篇文章小白们可以自己去看:  测试用例的几种常见设计方法:  已有的常规方法我们可以照搬照用,但是从质量管理的整体性...
            11 10 1417
            分享
          • 软件测试:在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。一、软件的分类1、按照功能划分:【系统软件】:如操作系统、数据库管理系统,各种驱动软件等;【应用软件】:如Office、有道翻译、QQ等;2、按照技术结构划分:【单机版本】:如Office,画图工具等;【C/S结构软件】:如QQ、微信等;【B/S结构软件】:如新浪、搜狐、google等;3、按照使用终端划分:【PC端】:电脑版QQ等安装在电脑端的软件;【移动端】:如手机版QQ、微信等安装在移动端的软件;4、按照用户划分:【产品软件】:Office、财务处理软件、360卫士等;【项目软件...
            1 1 1727
            分享
          • 这个问题是我之前笔试的时候碰到的一道题,今天来详细展开写写解答思路:仔细分析一下这道题目,他的核心考察是循环语句的用法,还有date命令的用法。date命令是linux系统中比较常用的命令,就是跟时间挂钩,包括查看时间,修改时间,转换时间戳格式,加减时间等等。这道题目相对较为宽松,他并没有要求具体的时间格式要求,比如年月日时分秒等,那么我们就打印最常见的时间格式就好。linux中bash的循环用法有很多,包括for循环,while循环和until循环,相对于for循环,前提我们需要知道循环次数,如果想无限循环,只能把次数写大点;当我们只知道停止条件,不知道次数,就需要使用while循环;当重复...
            1 0 5231
            分享
          •   乔梁在MTSC大会上分享了主题为《一致性是研效提升的必经之路》的演讲,演讲内容主要是如何提高软件研发效率。他从香农在信息论中的熵增定律出发,讲到像软件这样的复杂系统,必须尽可能减少不确定性因素的影响,努力提高软件研发的一致性,从而达到提高软件研发效率的目的。本文主要基于熵增定律,探讨该定律对软件测试行业是否存在指导作用。  首先,我们回顾一下什么是熵增定律。这原本是热力学中的概念,一个孤立系统总是趋向于熵增,最终达到熵的最大状态,也就是系统的最混乱无序状态。1948年,香农将热力学的熵,引入到信息论。  对于一个信息系统,如果没有外力作用,最终也会达到信息熵最大的状态,信息系统会越来越混乱...
            0 0 866
            分享
      • 51testing软件测试圈微信