简介

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. 实战二:nacos服务注册与发现,openfeign服务调用

    一,参照上一篇创建好微服务结构后,按业务需求编写各微服务逻辑 二,服务注册 1,安装nacos:下载,解压,运行startup.cmd 2,访问 http://localhost:8848/nacos ...

  2. 【踩坑系列】使用long类型处理金额,科学计数法导致金额转大写异常

    1. 踩坑经历 上周,一个用户反馈他创建的某个销售单无法打开,但其余销售单都可以正常打开,当时查看了生产环境的ERROR日志,发现抛了这样的异常:java.lang.NumberFormatExcep ...

  3. 案例>>>用绝对值的方法打印出菱形

    import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner sc = ...

  4. spring3.X版本知识点

    一.SpringMVC重点注解 @Controller 1.@Controller 与 @Component 实际应用中作用等价.     2.和Struct一样,也是单例,意味着被多个请求线程共享, ...

  5. C. Vladik and Memorable Trip 解析(思維、DP)

    Codeforce 811 C. Vladik and Memorable Trip 解析(思維.DP) 今天我們來看看CF811C 題目連結 題目 給你一個數列,一個區段的數列的值是區段內所有相異數 ...

  6. 想用Nginx代理一切?行!

    Nginx能代理一切吗? 是的,Nginx可以作为一个优秀的http网关,但nginx能代理SSH2,MySQL,Oracle的连接吗?也算行吧,nginx有stream-module,专门处理TCP ...

  7. Easyswoole的WaitGroup和Csp组件的分析和使用

    Easyswoole的WaitGroup和Csp组件的分析和使用 easyswoole可真是个好名字,只是提供了恰到好处的封装,即使是源码也保持了这样的风格.这种风格不论好坏可能都需要各位适应下,哈哈 ...

  8. 836. Rectangle Overlap ——weekly contest 85

    Rectangle Overlap A rectangle is represented as a list [x1, y1, x2, y2], where (x1, y1) are the coor ...

  9. Ubuntu 16.04升级18.04

    原文:https://blog.csdn.net/sean_8180/article/details/81075659 1.更新资源$ sudo apt-get update$ sudo apt-ge ...

  10. leetcode99:n-queens

    题目描述 N皇后问题是把N个皇后放在一个N×N棋盘上,使皇后之间不会互相攻击. 给出一个整数n,返回n皇后问题的所有摆放方案 例如: 4皇后问题有两种摆放方案 [".Q..",  ...