接到一个应用测试,应用实现主要使用websocket保持长链接,使用protobuf格式交换数据,用途为发送消息,需要我们测试评估性能,初步评估需要测试长链接数、峰值消息数以及长期运行稳定性
整体需求不难,主要困难是第一次接触websocket和protobuf,同时也没有现成的脚本可以使用,jmeter原生也不支持websocket协议,需要安装插件支持,protobuf格式也需要重新编译大包使用
万里长征第一步,先开发测试脚本,由于目前一直在使用python开发,评估项目的性能要求,不需要严格性能指标,所以直接使用python作为开发语言编写脚本,主要实现脚本如下
入口主文件,mulitprocess.py,多进程发起建立链接
1 # -*- coding: utf-8 -*- 2 # @Author : monleylu 3 # @Time : 2018/7/5 12:22 PM 4 5 from multiprocessing import Process,Pool 6 import os 7 from data import user 8 from protobufcon import ProtoService 9 import tnlog,logging 10 11 def consumer(host,port,username): 12 logging.error('启动子进程: %s...' % (os.getpid())) 13 kwargs = {"host": host, "port": port, "username": username } 14 pro=ProtoService(**kwargs) 15 pro.startWebsocket() 16 17 18 def consumer2(*args,**kwargs): 19 logging.error('启动子进程: %s...' % (os.getpid())) 20 pro = ProtoService(**kwargs) 21 pro.startWebsocket() 22 23 24 25 if __name__ =="__main__": 26 logging.error('启动主进程 %s.' % os.getpid()) 27 28 p = Pool(450) 29 for i in range(450): 30 #第一种传参数方法 31 # p.apply_async(consumer, args=("11.31.60.10",8880,user.pop(),)) 32 33 #第二种传参数方法 34 kw={"host": "11.31.60.10", "port": 8880, "username": user.pop()} 35 p.apply_async(consumer, args=(),kwds=kw) 36 37 logging.error('Waiting for all subprocesses done...') 38 39 p.close() 40 p.join() 41 logging.error('All subprocesses done.')