Locust 其他协议
Locust 是基于HTTP作为主要目标构建的,但是他同样可以扩展其他的协议,接受请求与获得返回。在编写的客户端的时候,我们就要使用到最常使用的 request_success 和 request_failure 的事件钩子。
对于HTTP(S)以外的协议,在客户端的具体实现上,可通过注册事件的方式,在请求成功时触发events.request_success,在请求失败时触发events.request_failure即可。
然后创建一个继承自Locust类的类,对其设置一个client属性并与我们实现的客户端进行绑定。
后续,我们就可以像使用HttpLocust类一样,测试其它协议类型的系统。
以下为常用的locust种的5种钩子
request_success:当请求完全成功时被触发,钩子函数需要定义如下参数:
request_type:请求的类型
name:请求的URL或者自定义的统计分组名字(如果请求时提供了name参数的话)
response_time:请求花费的时间(毫秒为单位)
response_length:响应长度request_failure:当请求失败时触发,钩子函数需要定义如下参数:
request_type:请求的类型
name:请求的URL或者自定义的统计分组名字(如果请求时提供了name参数的话)
response_time:请求花费的时间(毫秒为单位)
exception:请求失败抛出的异常locust_error:在Locust实例执行发生异常时触发,钩子函数需要定义如下参数:
locust_instance:发生异常的Locust类的实例
exception:抛出的异常
tb:来自sys.exc_info()[2]的Traceback对象hatch_complete:所有的Locust实例产生完成时触发,钩子函数需要定义如下参数:
user_count:产生的Locust实例(虚拟用户)的数量。
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 其他协议的更多相关文章
- locust压测rpc协议
这里主要是google的grpc接口进行压测的一个栗子. Locust是以HTTP为主要目标构建的. 但是,通过编写钩子触发器request_success和 request_failure事件的自定 ...
- locust压测websocket协议
Locust是以HTTP为主要目标构建的. 但是,通过编写触发器request_success和 request_failure事件的自定义客户端,可以轻松扩展到任何基于请求/响应的系统的负载测试 . ...
- Locust性能测试工具的安装及实际应用
一.安装Locust 安装Locust之前先安装的库:gevent库:第三方库,gevent为python提供了比较完善的协程支持.使用gevent,可以获得极高的并发性能. pip install ...
- Locust性能测试框架,从入门到精通
1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...
- 性能测试工具Locust的使用
一.写在前面 官网:https://www.locust.io/ 官方使用文档:https://docs.locust.io/en/latest/ 大并发量测试时,建议在linux系统下进行. 二.L ...
- Python3中性能测试工具Locust安装使用
Locust安装使用: 安装: python3中 ---> pip3 install locust 验证是否安装成功---> 终端中输入 locust --help ...
- locust安装及其简单使用----基于python的性能测试工具
1.已安装python3.6 ,安装步骤略 pip安装: pip install locust 检查locust是否安装成功 locust --help 2.安装 pyzmq If you inten ...
- locust启动命令
locust运行测试脚本 locust -f .\load_test.py --host=https://www.baidu.com -f 指定性能测试脚本文件. --host 指定被测试应用的URL ...
- 开源性能测试工具Locust使用篇(二)
那如何理解Locust和TaskSet这两个类呢? class HttpLocust(Locust) 在Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...
随机推荐
- hdu 5651 xiaoxin juju needs help 逆元 两种求解方式
xiaoxin juju needs help Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/ ...
- 编写自己的代码库(javascript常用实例的实现与封装)[转]
1.前言 因为公司最近项目比较忙,没那么多空余的事件写文章了,所以这篇文章晚了几天发布.但是这也没什么关系,不过该来的,总是会来的.好了,其他的不多说的,大家在开发的时候应该知道,有很多常见的实例操作 ...
- spring boot: @Entity @Repository一个简单的数据读存储读取
spring boot: @Entity @Repository一个简单的数据读存储读取 创建了一个实体类. 如何持久化呢?1.使用@Entity进行实体类的持久化操作,当JPA检测到我们的实体类当中 ...
- LeetCode--058--最后一个单词的长度
问题描述 给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度. 如果不存在最后一个单词,请返回 0 . 说明:一个单词是指由字母组成,但不包含任何空格的字符串. 示例: 输入: ...
- highcharts图表配置参数汇总
一.chart的部分相关属性说明 renderTo: 'container', //图表的页面显示容器(也就是要显示到的div) chart.events.addSeries:添加数列 ...
- H5基础知识(一)
一.概述 HTML5 是html4.0 升级版 结构 Html5 .样式 css3 .行为: API 都有所增强 HTML5并不仅仅只是做为HTML标记语言的一个最新版本,更重要的是它制定了Web ...
- Java使用POI读取和写入Excel指南
Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃 ...
- ccf窗口
#include<iostream> #include<cstring> #include<algorithm> #include<vector> us ...
- csp公共钥匙盒
1.公共钥匙盒 问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥 ...
- priority_queue与bfs不得不说的古寺
前几天写到bfs,看到之前写的,突然感觉不对,后来发现自己把点权值默认当成了边权值,导致一直走不出来: 点权值嘛,就是经过这个点时,要付出这么多的代价,边权值则是经过边时付出,二者有区别滴: 边权值求 ...