Python locust工具使用详解

 更新时间:2021年03月09日 10:27:57   作者:bai_nian_min_guo  
这篇文章主要介绍了Python locust工具使用详解,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下

今年负责部门的人员培养工作,最近在部门内部分享和讲解了locust这个工具,今天再博客园记录下培训细节。相信你看完博客,一定可以上手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 交互网站并查看实时统计数据。<br>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

以上就是Python locust工具使用详解的详细内容,更多关于Python locust工具的资料请关注脚本之家其它相关文章!

相关文章

  • Python 数字转化成列表详情

    Python 数字转化成列表详情

    这篇文章主要介绍了Python 数字转化成列表,主要以代码实现了将输入的数字转化成一个列表,输入数字中的每一位按照从左到右的顺序成为列表中的一项。,需要的朋友可以参考下
    2021-11-11
  • GDAL 矢量属性数据修改方式(python)

    GDAL 矢量属性数据修改方式(python)

    这篇文章主要介绍了GDAL 矢量属性数据修改方式(python),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 详解Python 数据库的Connection、Cursor两大对象

    详解Python 数据库的Connection、Cursor两大对象

    这篇文章主要介绍了Python 数据库的Connection、Cursor两大对象,文中通过python 数据库图解给大家介绍的非常详细,需要的朋友参考下吧
    2018-06-06
  • Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例

    Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例

    这篇文章主要介绍了Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法,结合实例形式分析了Python使用pymysql模块的fetchone(), fetchmany(), fetchall()方法进行mysql数据库查询的操作技巧,需要的朋友可以参考下
    2019-10-10
  • python numpy中multiply与*及matul 的区别说明

    python numpy中multiply与*及matul 的区别说明

    这篇文章主要介绍了python numpy中multiply与*及matul 的区别说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 使用Pandas的ExcelWriter操作excel的方法

    使用Pandas的ExcelWriter操作excel的方法

    这篇文章主要介绍了使用Pandas的ExcelWriter操作excel的方法,ExcelWriter这个插件有个坑,就是已经设置好的格式是无法更改的,因此,由pandas转成excel的时候,必须将格式清除,尤其是表头的格式需要大家多多注意,本文结合示例代码讲解的非常详细,需要的朋友参考下吧
    2023-11-11
  • Python线程之认识线程安全 

    Python线程之认识线程安全 

    这篇文章主要介绍了Python线程之认识线程安全,线程安全,名字就非常直接,在多线程情况下是安全的,多线程操作上的安全,下面学习线程安全的文章详细内容,需要的小伙伴可以参考一下
    2022-02-02
  • Python 深入了解opencv图像分割算法

    Python 深入了解opencv图像分割算法

    本文主要介绍了Python通过opencv实现图像分割的详细过程与代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • Python对list列表进行去重的几种方法

    Python对list列表进行去重的几种方法

    python 列表就是我们js中的数组了,我们下文整理几个常用的python 列表去重实现方法,非常的简单好用,通过代码示例讲解的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-10-10
  • Pycharm最全报错的原因与解决方法总结(推荐!)

    Pycharm最全报错的原因与解决方法总结(推荐!)

    这篇文章主要给大家介绍了关于Pycharm最全报错的原因与解决方法的相关资料,文中记录了Python各种报错解释及处理方法,属于个人记录型,需要的朋友可以参考下
    2022-07-07

最新评论