Locust 是基于HTTP作为主要目标构建的,但是他同样可以扩展其他的协议,接受请求与获得返回。在编写的客户端的时候,我们就要使用到最常使用的 request_success 和 request_failure 的事件钩子。

对于HTTP(S)以外的协议,在客户端的具体实现上,可通过注册事件的方式,在请求成功时触发events.request_success,在请求失败时触发events.request_failure即可。

然后创建一个继承自Locust类的类,对其设置一个client属性并与我们实现的客户端进行绑定。

后续,我们就可以像使用HttpLocust类一样,测试其它协议类型的系统。

以下为常用的locust种的5种钩子

    1. request_success:当请求完全成功时被触发,钩子函数需要定义如下参数:

      request_type:请求的类型 
      name:请求的URL或者自定义的统计分组名字(如果请求时提供了name参数的话) 
      response_time:请求花费的时间(毫秒为单位) 
      response_length:响应长度

    2. request_failure:当请求失败时触发,钩子函数需要定义如下参数:

      request_type:请求的类型 
      name:请求的URL或者自定义的统计分组名字(如果请求时提供了name参数的话) 
      response_time:请求花费的时间(毫秒为单位) 
      exception:请求失败抛出的异常

    3. locust_error:在Locust实例执行发生异常时触发,钩子函数需要定义如下参数:

      locust_instance:发生异常的Locust类的实例 
      exception:抛出的异常 
      tb:来自sys.exc_info()[2]的Traceback对象

    4. hatch_complete:所有的Locust实例产生完成时触发,钩子函数需要定义如下参数:

      user_count:产生的Locust实例(虚拟用户)的数量。

    5. quitting:Locust进程退出时被触发,钩子函数不需要提供参数。

一个websocket的简单例子

from locust import Locust, events, task, TaskSet
import websocket
import time class WebSocketClient():
def __init__(self, host, port):
self.host = host
self.port = port
self.ws = websocket.WebSocket() def connect(self, url):
self.ws.connect(url) class WebSocketLocust(Locust):
def __init__(self, *args, **kwargs):
super(WebSocketLocust, self).__init__(*args, **kwargs)
self.client = WebSocketClient(host='', port=1234) class UserBehavior(TaskSet):
def on_start(self):
self.ws = WebSocketLocust() @task
def connect(self):
start_time = time.time()
try:
self.ws.client.connect("ws://x.x.x.x:x")
except Exception as e:
total_time = int((time.time() - start_time) * 1000)
events.request_failure.fire(request_type="Websockt", name="WSconnect", response_time=total_time, exception=e)
else:
total_time = int((time.time()-start_time) * 1000)
events.request_success.fire(request_type="Websockt", name="WSconnect", response_time=total_time, response_length=0) #hardcode length to 0 size  class WebSocketUser(WebSocketLocust):
min_wait = 3000
max_wait = 6000
task_set = UserBehavior

1. 先定义一个Websocket协议类,可以封装该协议写一些自己得方法作为一个Client。

2. 重新定义Locust类中得Client,把自己定义得Websocket类赋给Locust中得Client

3. 通过Client调用封装得方法,并使用locust中得钩子方法获取到并发时得响应时间

4. 设置用户操作间隔时间以及测试用例集

Locust 其他协议的更多相关文章

  1. locust压测rpc协议

    这里主要是google的grpc接口进行压测的一个栗子. Locust是以HTTP为主要目标构建的. 但是,通过编写钩子触发器request_success和 request_failure事件的自定 ...

  2. locust压测websocket协议

    Locust是以HTTP为主要目标构建的. 但是,通过编写触发器request_success和 request_failure事件的自定义客户端,可以轻松扩展到任何基于请求/响应的系统的负载测试 . ...

  3. Locust性能测试工具的安装及实际应用

    一.安装Locust 安装Locust之前先安装的库:gevent库:第三方库,gevent为python提供了比较完善的协程支持.使用gevent,可以获得极高的并发性能. pip install ...

  4. Locust性能测试框架,从入门到精通

    1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...

  5. 性能测试工具Locust的使用

    一.写在前面 官网:https://www.locust.io/ 官方使用文档:https://docs.locust.io/en/latest/ 大并发量测试时,建议在linux系统下进行. 二.L ...

  6. Python3中性能测试工具Locust安装使用

    Locust安装使用: 安装: python3中           ---> pip3 install locust 验证是否安装成功---> 终端中输入 locust --help  ...

  7. locust安装及其简单使用----基于python的性能测试工具

    1.已安装python3.6 ,安装步骤略 pip安装: pip install locust 检查locust是否安装成功 locust --help 2.安装 pyzmq If you inten ...

  8. locust启动命令

    locust运行测试脚本 locust -f .\load_test.py --host=https://www.baidu.com -f 指定性能测试脚本文件. --host 指定被测试应用的URL ...

  9. 开源性能测试工具Locust使用篇(二)

    那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...

随机推荐

  1. [原][osg][osgEarth][粒子特效]关于粒子特效库在osgEarth中,位置摆放问题,跟踪节点移动问题

    首先粒子在地球上位置摆放很简单: //传入的经纬度坐标 osg::Vec3d geoPoint; const SpatialReference* latLong = SpatialReference: ...

  2. spring boot开发 静态资源加载不出来

    spring boot 1.5 版本之前 不拦截静态资源 springboot 2.x版本 拦截静态资源 private static final String[] CLASSPATH_RESOURC ...

  3. VS 2013 无法启动IIS Express Web 服务器

    之前程序好好的没什么问题,可是今天一大早来到公司后打开VS2013运行Web程序,然后就弹出提示信息:无法启动IIS Express Web 服务器,思来想去昨天都好好的,今天怎么会出现如此问题呢? ...

  4. "is not allowed to connect" mysql

    好像过几次,安装mysql时,总会遇到这个问题. 每次都忘怎么解决. 这回写下来吧. 编辑 mysql数据库的 user表太麻烦了, 最简单的方法是加一个用户,以后就用这个用户登录 CREATE US ...

  5. Assert.IsNotNull 方法(判断对象不为NULL)

    Assert.IsNotNull 方法 Visual Studio 2012   其他版本 Visual Studio 2010 Visual Studio 2008 Visual Studio 20 ...

  6. codeforces 571a//Lengthening Sticks// Codeforces Round #317

    题意:三角形3条边,最多共添加ll长,问组成的合法三角形个数. 本来想用暴搜,觉得会超时就搜题解了.不过保证我解释得更清晰. 先计算ll长分配给3条边有几种分法?由于不分也是合法的,因此最后实际分出去 ...

  7. Maven部署web应用到远程服务器

    Maven部署web应用到远程服务器 找到了一个很详细的地址:http://www.mkyong.com/maven/how-to-deploy-maven-based-war-file-to-tom ...

  8. Travelling Salesman and Special Numbers CodeForces - 914C (数位dp)

    大意: 对于一个数$x$, 每次操作可将$x$变为$x$二进制中1的个数 定义经过k次操作变为1的数为好数, 求$[1,n]$中有多少个好数 注意到n二进制位最大1000位, 经过一次操作后一定变为1 ...

  9. 牛客网——E求最值

    链接:https://www.nowcoder.com/acm/contest/59/E来源:牛客网 题目描述 给你一个长为n的序列a 定义f(i,j)=(i-j)2+g(i,j)2 g是这样的一个函 ...

  10. MySQL查询性能优化---高性能(二)

    转载地址:https://segmentfault.com/a/1190000011330649 避免向数据库请求不需要的数据 在访问数据库时,应该只请求需要的行和列.请求多余的行和列会消耗MySql ...