今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节

一、简介

1、优势

locust是python语言开发的一款的开源的的性能测试框架,他比jmeter更加的轻量级,主要是通过协程(gevent)的方式去实现并发,通过协程的方式可以大幅提高单机的并发能力,同时避免系统级的资源调度。locust具有开源性、分布式、支持高并发,支持webUI的操作方式。

2、劣势

locust的图表功能较弱,只展示了很少的数据

locust不支持监控服务端的状态,需要借助第三方工具,或者自己写代码去实现

二、安装

locust的安装非常简单,直接通过pip的方式就可以安装

pip install locust

  

三、locust的库和方法介绍

1、from locust import task

通过task可以把某个函数指定为任务,直接@task装饰对应的函数即可,在@tast(n)中可以有一个参数n,意思是这个任务的占比是多少

2、from locust import TaskSet

需要定义一个类,继承TaskSet这个类,这个是是一个任务集的概念,这个类中可以包括多个task

3、from locust import HttpUser

需要定义一个类,这个类要继承HttpUser,通过这个定义的类我们可以执行具体的任务集

看了上面的介绍,可能大家有点云里雾里的,下面我们由浅入深看代码

四、实战代码V1.0(入门代码)

1、代码如下

from locust import HttpLocust
from locust import HttpUser
from locust import task
from locust import TaskSet
#指定一个任务集
class My_task_set(TaskSet): #这是某个任务,30是比例,比如这里是30/50
@task(30)
def getindex1(self):
# client就是个requests对象
# catch_response,告诉locust如何判断请求失败还是成功
res = self.client.get("/bainianminguo/p/10952586.html") @task(20)
def getindex2(self):
# client就是个requests对象
res = self.client.get("/bainianminguo/p/7253930.html") class WebSite(HttpUser):
# 指定要执行哪个任务集
tasks = [My_task_set,]
# 请求和请求之间最小的间隔时间
min_wait = 1000
# 请求和请求之间最大的间隔时间
max_waif = 2000

  

2、进入代码的目录,执行如下命令

3、打开浏览器,输入http://localhost:8089/

4、参数讲解

Number of total users to simulate 模拟的总的用户数

Spawn rate 每秒钟新增的用户数

五、实战代码V1.1(入门代码)

1、任务集类中的on_start方法

class My_task_set(TaskSet):

    #添加初始化方法
def on_start(self):
print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")

  

这个方法类似pytest框架中的前置条件或者说是面向对象中的构造方法

2、任务集类中的on_start方法

    def on_stop(self):
print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性")

 

六、实战代码V1.2(入门代码)

1、如何判断请求是失败还是成功

2、然后再响应的消息中指定判断逻辑即可,success即为成功,failure即为失败

七、实战代码V1.3(全量代码)

from locust import HttpLocust
from locust import HttpUser
from locust import task
from locust import TaskSet # locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了 # 如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求
#指定一个任务集
class My_task_set(TaskSet): #添加初始化方法
def on_start(self):
print("类似类中的构造方法,每个用户在任务开始前,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性") def on_stop(self):
print("类似类中的后置方法,每个用户在任务开始后,只执行一次,在这里可以定义一个对象的属性,这样其它测试集就可以使用这个属性") #这是某个任务,30是比例,比如这里是30/50
@task(30)
def getindex1(self):
# client就是个requests对象
# catch_response,告诉locust如何判断请求失败还是成功
res = self.client.get("/bainianminguo/p/10952586.html",catch_response=True)
if res.code == 200:
res.success()
else:
res.failure("ff")
print(res)
@task(20)
def getindex2(self):
# client就是个requests对象
res = self.client.get("/bainianminguo/p/7253930.html")
print(res) class WebSite(HttpUser):
# 指定要执行哪个任务集
# task_set = My_task_set tasks = [My_task_set,]
# 请求和请求之间最小的间隔时间
min_wait = 1000
# 请求和请求之间最大的间隔时间
max_waif = 2000 # Number of total users to simulate 模拟的用户数
# Spawn rate 每秒钟产生的用户数

  

八、常见问题

1、cookies

locust中的client会自动帮我们处理cookies。类似request.session(),所以如果我们登陆的时候,只需要在on_start中登陆一次就可以了

2、多统计api的问题

# 如果在locust中,如果url是不需要统计,则我们不要用clent去访问api,应该用request去访问,这样就locust就不会统计request库发起的请请求

  

九、分布式调用的问题

一旦单台机器不够模拟足够多的用户时,Locust支持运行在多台机器中进行压力测试。

为了实现这个,你应该在 master 模式中使用--master标记来启用一个 Locust 实例。这个实例将会运行你启动测试的 Locust 交互网站并查看实时统计数据。
master 节点的机器自身不会模拟任何用户。相反,你必须使用 --slave 标记启动一台到多台 Locustslave 机器节点,与标记 --master-host 一起使用(指出master机器的IP/hostname)。 常用的做法是在一台独立的机器中运行master,在slave机器中每个处理器内核运行一个slave实例。 注意:master 和每一台 slave 机器,在运行分布式测试时都必须要有 locust 的测试文件。

  

在 master 模式下启动 Locust:

locust -f my_loucstfile.py --master

在每个 slave 中执行(192.168.0.14 替换为你 msater 的IP):

locust -f my_locustfile.py --slave --master-host=192.168.0.14

  

 



locust工具使用详解的更多相关文章

  1. Linux命令工具 top详解

    Linux命令工具 top详解 top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器.top是一个动态显示过程,即可以通过用户按键来不 ...

  2. Lua包管理工具Luarocks详解 - 15134559390的个人空间 - 开源中国社区

    Lua包管理工具Luarocks详解 - 15134559390的个人空间 - 开源中国社区 Lua包管理工具Luarocks详解

  3. [转]网络性能评估工具Iperf详解(可测丢包率)

    原文链接:安全运维之:网络性能评估工具Iperf详解:http://os.51cto.com/art/201410/454889.htm 参考博文:http://linoxide.com/monito ...

  4. IE8"开发人员工具"使用详解下(浏览器模式、文本模式、JavaScript调试、探查器)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/04/03/kaifarenyuangongju2.html 在上一篇文章IE8“开发人员工具” ...

  5. IE8“开发人员工具”使用详解上(各级菜单详解)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...

  6. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解 (旧版本 | 仅作参考)

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

  7. 批量执行工具PSSH详解

    批量执行工具PSSH详解 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问. 安装pssh包 yum 安 ...

  8. 自动化运维工具——ansile详解

    自动化运维工具——ansible详解(一) 目录 ansible 简介 ansible 是什么? ansible 特点 ansible 架构图 ansible 任务执行 ansible 任务执行模式 ...

  9. 【Android 应用开发】Ubuntu 下 Android Studio 开发工具使用详解

    . 基本上可以导入项目开始使用了 ... . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/21035637 ...

随机推荐

  1. python-零基础入门-自学笔记

    目录 第一章:计算机基础 1.1 硬件组成 1.2 操作系统分类 1.3 解释型和编译型介绍 第二章:Python入门 2.1 介绍 2.2 python涉及领域 2.2.1 哪些公司有使用Pytho ...

  2. codeforces 1076E Vasya and a Tree 【dfs+树状数组】

    题目:戳这里 题意:给定有n个点的一棵树,顶点1为根.m次操作,每次都把以v为根,深度dep以内的子树中所有的顶点(包括v本身)加x.求出最后每个点的值为多少. 解题思路:考虑到每次都只对点及其子树操 ...

  3. C++中的explicit

    首先, C++中的explicit关键字只能用于修饰只有一个参数的类构造函数, 它的作用是表明该构造函数是显示的, 而非隐式的, 跟它相对应的另一个关键字是implicit, 意思是隐藏的,类构造函数 ...

  4. SMB relay

    SMB relay 0x00 SMB服务 先来了解一下什么是 SMB 服务,SMB(Server Message Block)是一个协议名称,用它可以共享计算机之间的文件.打印机.串口等,通过 SMB ...

  5. free open movie API all in one

    free open movie API all in one movie API TMDb API The Movie Database https://www.themoviedb.org/docu ...

  6. web & js & touch & gesture

    web & js & touch & gesture 触摸 & 手势 https://caniuse.com/#feat=touch js https://develo ...

  7. QR code & auto login & OAuth 2.0

    QR code & auto login & OAuth 2.0 扫码自动登录原理解析 https://www.ximalaya.com/shangye/14685881/958686 ...

  8. import script module

    import script module .mjs <script type="module"> import {addTextToBody} from './util ...

  9. CAD颜色对照表

    cad颜色代码与RGB参数对应表 1 255 0 02 255 255 03 0 255 04 0 255 2555 0 0 2556 255 0 2557 0 0 08 128 128 1289 1 ...

  10. Egg.js 是什么?

    Egg.js 是什么? 阿里巴巴出 Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本. 注:Egg.js 缩写为 Egg 设 ...