压测工具 Locust
一、认识Locust
定义
Locust是一款易于使用的分布式负载测试工具,完全基于事件,即一个locust节点也可以在一个进程中支持数千并发用户,不使用回调,通过gevent使用轻量级过程(即在自己的进程内运行)。
特点
①、不需要编写笨重的UI或者臃肿的XML代码,基于协程而不是回调,脚本编写简单易读;
②、有一个基于we简洁的HTML+JS的UI用户界面,可以实时显示相关的测试结果;
③、支持分布式测试,用户界面基于网络,因此具有跨平台且易于扩展的特点;
④、所有繁琐的I / O和协同程序都被委托给gevent,替代其他工具的局限性;
安装
pip install locust
Locust有六个依赖的python模块,一并安装好。
- gevent:在Python中实现协程的第三方库。协程又叫微线程Corouine。使用gevent可以获取极高的并发能力;
- flask:Python的一个web开发框架,和django相当;
- requests:支持http/https访问的库;
- msgpack-python:一种快速、紧凑的二进制序列化格式,使用与类似json的数据;
- six:提供了一些简单的工具封装Python2和Python3 之间的差异;
- pyzmq:安装这个第三方库,可以把Locust运行在多个进程或多个机器(分布式)
检测安装是否成功
(demo) root@ubuntu1804:/opt/other# locust --version
locust 2.5.0
二、使用
简单使用
编写测试脚本 locust_test.py
from locust import HttpUser, TaskSet, task
class UserBehavior(HttpUser):
@task(1)
def baidu_index(self):
self.client.get("/")
UserBehavior()类用户设置测试具体方法:
UserBehavior继承HttpUser,拥有request等方法。
@task装饰该方法表示为用户行为,括号里面参数表示该行为的执行权重:数值越大,执行频率越高,不设置默认是1;
baidu_index 是具体的测试方法,可以设置GET、POST请求,可以设置请求携带信息,可以设置请求的结果处理。
(demo) root@ubuntu1804:/opt/other# locust -f locust_test.py
/root/.virtualenvs/demo/lib/python3.8/site-packages/locust/util/deprecation.py:14: DeprecationWarning: Usage of User.task_set is deprecated since version 1.0. Set the tasks attribute instead (tasks = [UserBehavior])
warnings.warn(
[2021-11-29 11:36:29,324] ubuntu1804/INFO/locust.main: Starting web interface at http://0.0.0.0:8089 (accepting connections from all network interfaces)
[2021-11-29 11:36:29,356] ubuntu1804/INFO/locust.main: Starting Locust 2.5.0
UI界面
打开网页:http://localhost:8089,进入UI界面。
UI界面的菜单
● Statistics:类似于jmeter中Listen的聚合报告;
● Charts:测试结果变化趋势的曲线展示图,分别为每秒完成的请求数(RPS)、响应时间、不同时间的虚拟用户数;
● Failures:失败请求的展示界面;
● Exceptions:异常请求的展示界面;
● Download Data:测试数据下载模块, 提供三种类型的CSV格式的下载,分别是:Statistics、responsetime、exceptions;
统计信息:
Type:请求类型,即接口的请求方法;
Name:请求路径;
requests:当前已完成的请求数量;
fails:当前失败的数量;
Median:响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒;
Average:平均响应时间,单位为毫秒;
Min:最小响应时间,单位为毫秒;
Max:最大响应时间,单位为毫秒;
Content Size:所有请求的数据量,单位为字节;
reqs/sec:每秒钟处理请求的数量,即QPS;
QPS图信息
官方文档:
https://docs.locust.io/en/stable/what-is-locust.html
三、进阶使用
控制RPS
wait_time 是请求的间隔时间
用户数 是开启的协程数
RPS = 间隔 x 用户数,要求的RPS可以根据这个公式调整。
class UserBehavior(HttpUser):
wait_time = constant_throughput(0.5)
@task(1)
def get_ticket_user(self):
url = "https://apiv3.shanbay.com/tickethub/ticket/user?code=2021-06-cet"
cookies = {"auth_token": random.choice(token_list)}
self.client.get(url, cookies=cookies)
压测工具 Locust的更多相关文章
- python压测工具Locust
python压测工具Locust Locust介绍 Locust作为基于Python语言的性能测试框架. 其优点在于他的并发量可以实现单机10倍于LoadRunner和Jmeter工具.他的工作原理为 ...
- 一键压测工具改造(locust)
本文内容来自“天外归云”大神,原文链接http://www.cnblogs.com/LanTianYou/p/5987741.html,目前只对启动脚本做了一些改造,应该说是,不适用powershel ...
- 压测工具Locuse的使用
我是听朋友提起的"蝗虫"(Locust),然而她不想用python,我就拿来试一试~ http的 各种压测工具也已经太多了,所以主要是试试locust在当前比较流行的rpc协议上的 ...
- Http压测工具wrk使用指南
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- web压测工具http_load原理分析
一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...
- [软件测试]网站压测工具Webbench源码分析
一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...
- Http压测工具wrk使用指南【转】
用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...
- python服务端多进程压测工具
本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...
- 内存压测工具Memtester
在做压力测试时,发现一个内存压测工具Memtester,可以随意设置内存占用大小,非常方便 下载地址:http://pyropus.ca/software/memtester/old-versions ...
- Http 压测工具 wrk 基本使用
Http 压测工具 wrk 基本使用 Intro wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载.它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合 ...
随机推荐
- 【scipy 基础】--线性代数
SciPy的linalg模块是SciPy库中的一个子模块,它提供了许多用于线性代数运算的函数和工具,如矩阵求逆.特征值.行列式.线性方程组求解等. 相比于NumPy的linalg模块,SciPy的li ...
- windows10 使用 USB 无线网卡的热点功能
一.概述 在某宝上买了一个 COMFAST CF-727B 的无线模块,由于笔记本电脑一直使用不上,所以放了很久.多年后我来到了一个公司,遇到了我此生最想吐槽的网管,简直不敢想象几十人的办公室,居然能 ...
- Flutter搭建
目录 下载 Flutter SDK 配置 Flutter 环境变量及镜像 检查开发环境 参考 下载 Flutter SDK flutter官网下载:https://flutter.io/sdk-arc ...
- 数据分析人员需要掌握sql到什么程度?
SQL(Structured Query Language)是用于管理和操作关系型数据库的标准化语言,对于数据分析人员来说,掌握SQL是至关重要的. 在本文中,我们将详细探讨数据分析人员需要掌握SQL ...
- [python][图像切割]给定手写数字图片完成数字切割
import torch import torch.nn as nn from torchvision import transforms from PIL import Image, ImageOp ...
- 文心一言 VS 讯飞星火 VS chatgpt (154)-- 算法导论12.3 1题
一.用go语言,给出 TREE-INSERT 过程的一个递归版本. 文心一言,代码不能运行: 下面是用 Go 语言实现一个递归版本的 TREE-INSERT 过程的代码: package main i ...
- [ABC282Ex] Min + Sum
Problem Statement You are given two sequences of integers of length $N$: $A = (A_1, A_2, \ldots, A_N ...
- CompletableFuture异步编程
1.创建 /** * public static <U> CompletableFuture<U> supplyAsync(Supplier<U> supplier ...
- redis集群搭建注意事项
官方教程:https://redis.io/docs/management/scaling/ 其他参考: https://note.youdao.com/ynoteshare/index.html?i ...
- NetSuite 开发日记 —— 非空判断
使用N/util模块进行非空判断,N/util模块说明:https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_45 ...