简介

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. elasticsearch启动报错

    1,max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536] 查看 ...

  2. 干货分享:一键网络重装系统 - 魔改版(适用于Linux / Windows)

      简介 一键网络重装系统 - 魔改版,它可以通过Internet重新安装Linux和Windows以及常见的操作系统.例如:Linux(CentOS,Debian,Ubuntu.etc..),Win ...

  3. java实现单链表、栈、队列三种数据结构

    一.单链表 1.在我们数据结构中,单链表非常重要.它里面的数据元素是以结点为单位,每个结点是由数据元素的数据和下一个结点的地址组成,在java集合框架里面 LinkedList.HashMap(数组加 ...

  4. git每次提交代码都要设置账号密码的问题

    git config --global credential.helper store 待下一次提交代码的时候,输入了正确的用户名和密码,之后 就不需要输入用户名密码

  5. 排名靠前的几个JS框架发展趋势和前景

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://blog.bitsrc.io/top-5-javascript-frameworks ...

  6. Java Arrays 和 List的相互转化

    最近在 leetcode 刷题的时候遇到过好几次这样的情况:需要返回的数据类型是数组(Arrays),但是求解的时候并不知道数组的长度,这时候就需要先用 List 进行临时存储,最后再转化为 Arra ...

  7. Java学习的第三十八天

    例3.4. package bgio; public class cjava { public static void main(String[]args) { int i=1; int sum=0; ...

  8. html input只允许输入整数

    如果想想让input输入框只输入整数,直接使用以下的input就可以了 <input id="sequence" class="o_input" onke ...

  9. Lte Design Documentation之RRC

    RRC 特点 RRC模型在模拟器中提供以下功能 生成(在eNB中)和解释(在UE中)信息块(尤其是MIB和SIB1, SIB2) 初始化小区选择 RRC连接建立过程 RRC重新配置程序, 支持以下方式 ...

  10. Ubuntu 18.04 Java JDK/JRE 安装命令

    安装默认版本 sudo apt install default-jdk Java 8 sudo apt install openjdk-8-jdk 如果我们在服务器上安装了多个Java版本,我们可以使 ...