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. zepto点透解决思路

    首先看几个链接, http://blog.youyo.name/archives/zepto-tap-click-through-research.html youyo的分析 http://softw ...

  2. 告诉你什么是javascript的回调函数

    函数也是对象 想弄明白回调函数,首先的清楚地明白函数的规则.在javascript中,函数是比较奇怪的,但它确确实实是对象.确切地说,函数是用Function()构造函数创建的Function对象.F ...

  3. Android广播接收器里弹出对话框

    不多说,直接上车... public class MyReceiver extends BroadcastReceiver { @Override public void onReceive(fina ...

  4. 【转】总结C++中取成员函数地址的几种方法

    转自:“http://www.cnblogs.com/nbsofer/p/get_member_function_address_cpp.html” 这里, 我整理了4种C++中取成员函数地址的方法, ...

  5. Codeforces 916C - Jamie and Interesting Graph

    916C - Jamie and Interesting Graph 思路:构造. 对于1到n最短路且素数,那么1到n之间连2 对于最小生成树,找一个稍微大点的素数(比1e5大)构造一个和为这个素数的 ...

  6. Lua中Table的学习

    --table 是 Lua 的一种数据结构,用来帮助我们创建不同的数据类型,如:数组.字典等 --Lua也是通过table来解决模块(module).包(package)和对象(Object)的. 例 ...

  7. C++中的构造函数,拷贝构造函数,赋值函数

    C++中一般创建对象,拷贝或赋值的方式有构造函数,拷贝构造函数,赋值函数这三种方法.下面就详细比较下三者之间的区别以及它们的具体实现 1.构造函数 构造函数是一种特殊的类成员函数,是当创建一个类的对象 ...

  8. oracle进行字符串拆分并组成数组

    CREATE OR REPLACE TYPE CUX_STR_SPLIT_TYPE IS TABLE OF VARCHAR2 (4000); CREATE OR REPLACE PACKAGE cux ...

  9. OC 继承

    一.基本概念 程序的世界和人类的“对象”世界在思想上是没有设么区别的,富二代继承了父母,自然就拥有了父母拥有的所有资源,子类继承了父类同样就拥有了父类所有的方法和属性(成员变量). 在这里动物是猫类和 ...

  10. 有名管道mkfifo

    int mkfifo(const char *pathname, mode_t mode); int mknod(const char *pathname, mode_t mode, dev_t de ...