locust压测非http协议
Posted yhleng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了locust压测非http协议相关的知识,希望对你有一定的参考价值。
Locust是以HTTP为主要目标构建的。
但是,通过编写触发器request_success
和 request_failure
事件的自定义客户端,可以轻松扩展到任何基于请求/响应的系统的负载测试 。
我们知道locust默认内部只封装httplocust;使用的是requests中的session进行了封装;
那么问题来了,如果我想测试其它协议怎么办,比如websocket , grpc等等。
在开始之前,需要了解的几点:
1>self.client: locust协议入口实例,我们只要重写一个实例给client即可。
2>以下两个事件,用来收集报告信息,否则写好后执行你会发现收集不到性能数据
events.request_failure.fire()
events.request_success.fire()
具体步骤:
1>编写WebSocketClient类(主要用来替换掉self.client的http实例)
class WebSocketClient(object): def __init__(self, host): self.host = host self.ws = websocket.WebSocket() def connect(self, burl): start_time = time.time() try: self.conn = self.ws.connect(url=burl) except websocket.WebSocketTimeoutException as e: total_time = int((time.time() - start_time) * 1000) events.request_failure.fire(request_type="websockt", name=‘urlweb‘, response_time=total_time, exception=e) else: total_time = int((time.time() - start_time) * 1000) events.request_success.fire(request_type="websockt", name=‘urlweb‘, response_time=total_time, response_length=0) return self.conn def recv(self): return self.ws.recv() def send(self, msg): self.ws.send(msg)
注意:该类中定义了,websocket的常用操作,链接、接收、发送;最主要是events.request_failure.fire和events.request_success.fire这两个用来收集性能数据,如果不写
报告收集不到性能数据。
上边代码只是以websocket举例,其它协议也一样,只要注意收集性能数据就可以。当然也可以不写在这里。这个看代码怎么写了。
2>重写一个HttpLocust类,我们这里叫做WebsoketLoscust类
class WebsocketLocust(Locust): def __init__(self, *args, **kwargs): super(WebsocketLocust, self).__init__(*args, **kwargs) self.client = WebSocketClient(self.host)
注意:WebsocketLocust从Locust继承; 这里主要是将self.client重新实例成,我们第一部写好的websocketClient实例。
这样一来我们通过self.client.xxxx就可以使用其方法
3>编写TaskSet类
以上是关于locust压测非http协议的主要内容,如果未能解决你的问题,请参考以下文章