今年负责部门的人员培养工作,最近在部门内部分享和讲解了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. windows server 2016 安装有线网卡驱动

    为自己的本本安装了server 2016系统,但是官网下载的有线网卡驱动一直安不上,解决方法如下: 1.到Intel官网下载一个叫PROWinx64的驱动程序,解压到任意文件夹.依次进入PRO1000 ...

  2. Jmeter入门使用

    1. 什么是Jmeter 转自:https://www.cnblogs.com/lijuanhu321/p/9537185.html#testComponent https://www.cnblogs ...

  3. TCP Wrappers原理及简单实验

    1.TCP Wrappers(简易防火墙)简介TCP_Wrappers是一个工作在第四层(传输层)的的安全工具,对有状态连接(TCP)的特定服务进行安全检测并实现访问控制,界定方式是凡是调用libwr ...

  4. XV6学习(15)Lab mmap: Mmap

    代码在Github上. 这一个实验是要实现最基础的mmap功能.mmap即内存映射文件,将一个文件直接映射到内存当中,之后对文件的读写就可以直接通过对内存进行读写来进行,而对文件的同步则由操作系统来负 ...

  5. 018-019 NET5_内置容器支持依赖注入+IServiceCollection的生命周期

    概念: DI依赖注入: IServiceCollection仅支持构造函数注入 什么是依赖注入? 如果对象A依赖对象B,对象B依赖对象C,就可以先构造对象C,然后传递给对象B,再把对象B传递给A.得到 ...

  6. Spring框架整合Mybatis项目

    第一步:导入相关依赖jar包 <dependency> <groupId>org.mybatis</groupId> <artifactId>mybat ...

  7. js location API All In One

    js location API All In One location "use strict"; /** * * @author xgqfrms * @license MIT * ...

  8. js currying All In One

    js currying All In One 柯里化 refs https://juejin.im/post/6844903603266650125 xgqfrms 2012-2020 www.cnb ...

  9. API 授权 All In One

    API 授权 All In One 身份验证 授权类型 身份验证类型 继承认证 没有认证 API密钥 不记名令牌 基本认证 摘要授权 OAuth 1.0 OAuth 2.0 授权码 隐含的 密码凭证 ...

  10. AMP & PWA

    AMP & PWA AMP is a web component framework to easily create user-first websites. stories. ads. e ...