简介

locust是一个开源的分布式用户负载压力测试工具,对网站(其他系统,例如接口等)进行负载测试,并确定可以处理多少的并发用户,locust特点利用了协程支持,达到高数量级别的并发,以及基于事件驱动使用gevent库来实现网络并发请求。https://www.locust.io/

环境配置

  • Python 3.8.2
  • pycharm
  • window or linux

安装locust

pip install locust

依赖库

安装locust后,会自动下载对应的依赖库

  1. gevent: gevent是第三方库,通过greenlet实现协程, 当访问网络时,IO操作会消耗很长时间出现等待情况,greenlet会自动切换其他greenlet,直到IO操作完成,再切换回来,保证greenlet始终再运行,而不是再等待

  2. requests: requests库,http库,实现各种请求,get,post,put,delete, 这边在locust封装后与requests库对应使用

request locust
request.post() client.post()
request.get() client.get()
request.delete() client.delete()
request.put() client.put()
  1. psutil:是一个监控库,监控cpu, 内存,磁盘等

  2. flask, Flask-BasicAuth: flask web第三方框架,Flask-BasicAuth:权限验证

  3. pyzmq: 可用于Locust分布运行在多个进程/机器上

实现原理

locust有比较重要的概念,一个定义用户行为(继承TaskSet), 一个是用户类(继承HttpUser)

TaskSet

定义一组用户将要执行的tasks场景,实现了虚拟用户所执行任务的调度算法,TaskSet子类重定义任务,采用@task装饰器

例子

  • @task(1) 权重为1,@task(2)权重为2, 意思就是test_job2执行的频率是test_job1的两部
from locust import TaskSet, task

class UserBehavior(TaskSet):
@task(1)
def test_job1(self):
self.client.get('/job1') @task(2)
def test_job2(self):
self.client.get('/job2')
  • 第二种权重写法
from locust import TaskSet, task

class UserBehavior(TaskSet):
@task
def test_job1(self):
self.client.get('/job1') @task
def test_job2(self):
self.client.get('/job2') class WebUser(HttpUser):
tasks = [test_job1, test_job2] # 不写的话比重就是1:1
# tasks = {test_job1:1, test_job2:2} # 两种方式等价

HttpUser

代替了之前版本的Httplocust实例化时创建一个client属性,该属性是一个具有支持的HTTP客户端用于在请求之间保持用户会话,创建的HttpSession的实例。客户端支持cookies,因此在HTTP请求之间保持会话,由于request.Session, 再登陆系统后维持了登陆的seesion, 后面的task脚本操作都带上了session

简单示例

代码示例

__author__ = 'wangxiao'

import os

# 导入包
from locust import HttpUser, task, between, TaskSet # 定义task行为类继承TaskSet
class SouMiSearch(TaskSet):
#
@task
def search(self):
url = "/api/p/search/"
body = {"keywords": "ceess"}
with self.client.post(url, json=body) as response:
print(response.text) class WebUser(HttpUser):
tasks = [SouMiSearch]
wait_time = between(2, 5)
host = "http://api.shoumilive.com:83" if __name__ == '__main__':
os.system("locust -f test_search.py") # 运行 [2020-08-19 09:59:48,212] md2bkpyc/WARNING/locust.main: System open file limit setting is not high enough for load testing, and the OS wouldnt allow locust to increase it by itself. See https://docs.locust.io/en/stable/installation.html#increasing-maximum-number-of-open-files-limit for more info.
[2020-08-19 09:59:48,212] md2bkpyc/INFO/locust.main: Starting web interface at http://:8089
[2020-08-19 09:59:48,229] md2bkpyc/INFO/locust.main: Starting Locust 1.1.1

默认端口8089, 浏览器访问127.0.0.1:8089

  1. Number of total users to simulate: 设置总共的模拟用户总数
  2. Hatch rate (users spawned/second):每秒启动的虚拟用户数

场景设置

  • 设置用户总数10个,每秒启动5个

测试监控界面

Statustics

页面指标 解析 备注
type 请求类型
Name 请求名称 这个可以自定义,传name参数即可
Requests 当前已完成的请求数量
Fails 失败的请求数量
Requests 当前已完成的请求数量
Median 响应时间的中间值,即50%的响应时间在这个数值范围内,单位为毫秒
90%ile 90%的响应时间在正态分布平均值下方,即小于这个值
Min 最小响应时间,单位为毫秒
Max 最大响应时间,单位为毫秒
average Size 平均每个请求的数据量,单位为字节
current RPS 每秒钟处理请求的数量

【性能测试】【locust】快速入门的更多相关文章

  1. [你必须知道的NOSQL系列]专题二:Redis快速入门

    一.前言 在前一篇博文介绍了MongoDB基本操作,本来打算这篇博文继续介绍MongoDB的相关内容的,例如索引,主从备份等内容的,但是发现这些内容都可以通过官方文档都可以看到,并且都非常详细,所以这 ...

  2. jmeter5.0生成html报告 快速入门

    JMeter性能测试5.0时代之-多维度的图形化HTML报告 快速入门 1.确认基本配置 在jmeter.properties或者user.properties确认如下配置项: jmeter.save ...

  3. Web Api 入门实战 (快速入门+工具使用+不依赖IIS)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html 屁话我也就不多说了,什么简介的也省了,直接简单概括+demo ...

  4. SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=》提升)

     SignalR快速入门 ~ 仿QQ即时聊天,消息推送,单聊,群聊,多群公聊(基础=>提升,5个Demo贯彻全篇,感兴趣的玩才是真的学) 官方demo:http://www.asp.net/si ...

  5. 前端开发小白必学技能—非关系数据库又像关系数据库的MongoDB快速入门命令(2)

    今天给大家道个歉,没有及时更新MongoDB快速入门的下篇,最近有点小忙,在此向博友们致歉.下面我将简单地说一下mongdb的一些基本命令以及我们日常开发过程中的一些问题.mongodb可以为我们提供 ...

  6. 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  7. 【番外篇】ASP.NET MVC快速入门之免费jQuery控件库(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. Mybatis框架 的快速入门

    MyBatis 简介 什么是 MyBatis? MyBatis 是支持普通 SQL 查询,存储过程和高级映射的优秀持久层框架.MyBatis 消除 了几乎所有的 JDBC 代码和参数的手工设置以及结果 ...

  9. grunt快速入门

    快速入门 Grunt和 Grunt 插件是通过 npm 安装并管理的,npm是 Node.js 的包管理器. Grunt 0.4.x 必须配合Node.js >= 0.8.0版本使用.:奇数版本 ...

  10. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

随机推荐

  1. 图的全部实现(邻接矩阵 邻接表 BFS DFS 最小生成树 最短路径等)

    1 /** 2 * C: Dijkstra算法获取最短路径(邻接矩阵) 3 * 6 */ 7 8 #include <stdio.h> 9 #include <stdlib.h> ...

  2. mysql在DOS环境下操作的命令

    管理员运行cmd,执行启动mysql命令:net start MySQL版本号 登录数据库:mysql -u root -p 输入密码 创建数据库:drop database if exists 数据 ...

  3. Jenkins部署分支报Finished: UNSTABLE的问题解决

    近期将代码分支部署到Jenkins上时报Finished: UNSTABLE,检查服务器无报错日志.怀疑是磁盘空间不足所致. 首先,在服务器上输入df -lh 查看本地磁盘使用情况,发现空间几乎被用完 ...

  4. 【总结】springmvc

    一.springmvc 1.基本概念 springmvc属于三层架构(表现层,业务层,持久层)的表现层.mvc指model,view,controller.Model(模型) : 通常指的是数据模型 ...

  5. git 上传代码报错eslint --fix found some errors. Please fix them and try committing again.

    在提交时用下面这句 git commit --no-verify -m "提交时的注释"

  6. NB-IoT应用分类与技术特点分析

      NB-Iot作为一种窄带物联网技术在各大行业脱颖而出,其应用涵盖多个领域.此文计讯小编将讲解NB-IoT的主要应用分类及相关特点.   一.NB-IoT是什么   NB-IoT是指窄带物联网(Na ...

  7. NB-IoT的NPBCH发送过程

    NB-IoT的NPBCH是使用固定的重复样式发送的.NPBCH的传输时间间隔(Transmiss Time Interval,TTI)是640ms,承载NB-IoT主系统消息块(Narrow-Band ...

  8. CF1396E——Distance Matching

    传送门:QAQQAQ(题面翻译) 以后博客可能一直咕咕咕了.一些做题的思考可能会直接放在代码里而不是单独写博客,因为这样太浪费时间,只有一些比较新的题才会单独写博客 思路:对于这种构造可行解使得权值和 ...

  9. Java程序员成长之路

    北哥在前文总结了程序员的核心能力,但在专业能力维度,只是做了大概的阐述,并没有详细展开.从今天开始,我会把我作为程序员成长过程中,学习的知识总结成系列文章陆续发出来,供大家学习参考. 本文是第一篇,关 ...

  10. 详解如何在RVIZ中用Marker显示机器人运动路径

    写在前面 最近有道作业题需要将机器人的历史路径显示出来,但是网上很多相关的教程都是搬运了官网的链接,并没有详细的操作流程...因此我又花费了很多时间去ros官网上学习marker的用法,学习怎么写pu ...