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. 机器学习-数据可视化神器matplotlib学习之路(五)

    这次准备做一下pandas在画图中的应用,要做数据分析的话这个更为实用,本次要用到的数据是pthon机器学习库sklearn中一组叫iris花的数据,里面组要有4个特征,分别是萼片长度.萼片宽度.花瓣 ...

  2. 用python生成器实现杨辉三角

    先看杨辉三角的形态: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 上学的时候大多是用c语言的两层for循环在实现,现在我们尝试用生成器来实现. 先说思路:我 ...

  3. Python matplot画散列图

    同matlab一样,matplot也可画散列图scatter. import numpy as np import matplotlib.pyplot as plt #fig = plt.figure ...

  4. ubuntu16.04上安装Java

    1.下载jdk8 登录网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 选择 ...

  5. python 斐波那契查找

    def fibonacci_search(lis, key): # F = [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987 ...

  6. Selenium UI 举例 getCssValue

    selenium jar包中,在WebElement的接口中, String getCssValue(String var1); 可以通过标签,获取对应的css值.具体要怎么用呢,如下: WebEle ...

  7. C++中int、string等常见类型转换

    1.int型与string型的互相转换 最佳实践: int型转string型 void int2str(const int &int_temp,string &string_temp) ...

  8. Rspec: everyday-rspec实操: 第8章DRY. (6个方法,其中3个方法好上手)

    Don't Repeat Yourself. • 把操作步骤提取到辅助模块中;✅ • 通过let复用测试中的实例变量;✅ • 把通用的设置移到共享的情景中;⚠️(不喜欢) • 在RSpec和rspec ...

  9. dubbo监控报错Error creating bean with name 'uriBrokerService'

    在jdk1.8下面会出现此错误 解决方法: 1.更换服务器jdk版本.(会影响其他项目环境) 2.修改dubbo-admin tomcat默认jdk版本. 3.修改dubbo-admin项目依赖(de ...

  10. hdu3068 manacher模板题

    给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 回文就是正反读都是一样的字符串,如aba, abba等 Input输入有多组case,不超过120组,每组输入为 ...