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属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我 ...
随机推荐
- IL and 堆于栈
CIL的基本构成+CIL操作码速记表+CIL操作码大全速查 引用类型:引用类型存储在堆中.类型实例化的时候,会在堆中开辟一部分空间存储类的实例.类对象的引用还是存储在栈中. 值类型:值类型总是分配在它 ...
- 关于ES6的箭头函数的详解
ok 坑比函数~~箭头函数~~不自己动手写看懂也不行~~~ 当然你也可以一点一点的把函数复制到Babel里面去将ES6转换成ES5 (斗笔行为) 老谢写的笔记教程就是深入(通俗易懂)哈哈~~~ 第 ...
- 模拟C#的事件添加和删除
从<C# Via CLR>中的演化的一个小demo,探索事件的添加和删除原理,简单明了: using System; using System.Collections.Generic; u ...
- HTML5-form表单
什么是表单? 01.获取用户的输入 ==>收集数据 02.将用户的输入发送到服务器 ==>与服务器进行交互 相关属性: action:我们收集完用户的信息之后,需要提交的服务器地址 ...
- Python day9函数部分
函数的学习:函数对于一门编程语言来说挺重要的,尤其是c语言,是完全使用函数来编写的 1.函数的定义:逻辑结构化和过程化的一种编程方法 def squre(x): "求一个数的平方 retur ...
- 代码中特殊的注释技术 -- TODO、FIXME和XXX的用处
借鉴地址:https://www.cnblogs.com/pengyingh/articles/2445826.html 在阅读一些代码时,经常会遇到诸如:TODO.FIXME和XXX的单词,它们是有 ...
- 使用 XPath 选择器
在前面的内容中,我们掌握了一些 CSS 选择器和它们的使用方法,以及 rvest 包中用于提取网页内容的函数.一般来说,CSS 选择器足够满足绝大部分的 HTML 节点匹配的需要.但是,当需要根据某些 ...
- TypeScript 小记
1. 对比JavaScript TypeScript是JavaScript的超集,可编译为JavaScript,主要提供类型系统等增强代码的可读性和可维护性,适合中大型项目多人协作: TypeScri ...
- Unity 如何在打包的时候执行一些逻辑
1.如果想让unity在打包的过程中,执行一些逻辑,那么该如何做呢?代码如下: using UnityEditor; using UnityEditor.Build; using UnityEngin ...
- robot脚本编写规范
一个robot脚本主要有四部分组成: ***settings*** 设置 ***keywords*** 关键词 ***variables*** 变量 ***test cases*** 测试用例 一般, ...