locust学习总结分享

tiechui2015 tiechui2015     2023-01-19     218

关键词:

简介:  

 Locust是一个用于可扩展的,分布式的,性能测试的,开源的,用Python编写框架/工具,它非常容易使用,也非常好学。它的主要思想就是模拟一群用户将访问你的网站。每个用户的行为由你编写的python代码定义,同时可以从Web界面中实时观察到用户的行为。

Locust完全是事件驱动的,因此在单台机器上能够支持几千并发用户访问。与其它许多基于事件的应用相比,Locust并不使用回调,而是使用gevent,而gevent是基于协程的,可以用同步的方式来编写异步执行的代码。每个用户实际上运行在自己的greenlet中。

特点:

①用简单python语言编写测试脚本,非常简单轻便。不需要笨重的UI和臃肿的xml代码,基于协同而非回调。

②分布式的,可扩展性的,可模拟上百万用户。Locust支持多机器的性能测试,每台机器可以模拟上千用户,当然这可以控制的,

③Locust有一个整洁的HTML+JS的用户界面,实时显示相关测试细节。由于用户界面是基于网络的,它是跨平台的和容易扩展。

④可以测试任何系统,尽管Locust是基于网站的,但它几乎可以测试任何系统,只要你写一个客户端。

 

安装:

Locust可以通过pip或者easy_install安装:

pip install locustio

或者

easy_install locustio

安装完Locust后,shell命令locust就可以使用了,可以查看locust命令有哪些选项:

(注意,要确保你安装好了python,版本必须是2.6以上的,但不能是3.0版以上的,3.0以上的改动好大,还没法兼容)

locust --help

如果打算以分布式模式运行Locust,建议同时安装pyzmq(一种通信队列):

pip install pyzmq

或者

easy_install pyzmq

 

在windows上安装:

下载二进制安装包,然后按照提示安装

网址:http://www.lfd.uci.edu/~gohlke/pythonlibs/

需要注意的是,当需要大规模的测试时,安装在Linux上的性能比windows上的好。

 

在苹果电脑上安装:

①先安装Homebrew

②安装libevent

brew install libevent                                                      

③参照在linux上的安装过程。

 

增加打开文件限制的最大数量:

在每一个HTTP连接的机器上打开一个新文件(技术文件描述符)。操作系统可以设置一个可以打开的文件的最大数量的下限。如果限制小于模拟用户的数量,在测试时,会发生故障。增加操作系统的默认最大数量的文件限制到一个数字高于模拟用户数的数量,才能达到你想要的测试,具体操作参考本机的操作系统。

 

快速启动:

下面是一个简单的列子,保持为python文件,文件名随意

from locust import HttpLocust, TaskSet

def login(l):

    l.client.post("/login", "username":"ellen_key", "password":"education")

def index(l):

    l.client.get("/")

def profile(l):

    l.client.get("/profile")

class UserBehavior(TaskSet):

    tasks = index:2, profile:1

 

    def on_start(self):

        login(self)

class WebsiteUser(HttpLocust):

    task_set = UserBehavior

    min_wait=5000

    max_wait=9000

 

这个几行短短的代码就是一个完成的测试脚本。定义了两个类,一个User Behavior类,继承了TaskSet类,用于定义测试任务的,给属性tasks增加了两个任务,index函数和profile函数,这些人物被执行,然后返回执行时间,正常情况下,是在下面的最小时间和最大时间之间,从on_start 开始,就像java的main函数一样,是任务开口,然后随机的挑选任务,通过client(相当于一个Httpsession)的方法执行http请求,但是会按照设置的比率来执行。Tasks属性把上面定义的函数变成任务,它是一个dict类型。相当于java的map类型。

一个WebsiteUser类,继承了HttpLocust类,这个类用于代表用户,生成一个实例,为每个每个模拟用户,发送http请求和设置测试参数,Task_set属性,它是唯一必须要有的,它指向Task Set类,定义用户的行为,请求等待最小时间min_wait和请求等待最大时间max_wait属性,单位是毫秒。,weight属性指定用户的执行的比率,host属性是测试的应用的网址。

注意最大时间和最小时间属性可以在locust类中定义,也可以在task set类中定义,完全是一样的

下面是一种更简单的定义task的方法,用@task 构造器。下面的代码和上面的效果是一样的:但这是顺序执行任务的,第一种是随机挑选任务

 

 

from locust import HttpLocust, TaskSet, task

class UserBehavior(TaskSet):

    def on_start(self):

        """ on_start is called when a Locust start before any task is scheduled """

        self.login()

 

    def login(self):

        self.client.post("/login", "username":"ellen_key", "password":"education")

 

    @task(2)

    def index(self):

        self.client.get("/")

 

    @task(1)

    def profile(self):

        self.client.get("/profile")

class WebsiteUser(HttpLocust):

    task_set = UserBehavior

    min_wait=5000

    max_wait=9000

 

 

 

TaskSet还可以嵌套:参考下面的代码

第一种:

 

 

class ForumPage(TaskSet):

    @task(20)

    def read_thread(self):

        pass

 

    @task(1)

    def new_thread(self):

        pass

 

    @task(5)

    def stop(self):

        self.interrupt()

class UserBehaviour(TaskSet):

    tasks = ForumPage:10

 

    @task

    def index(self):

        pass

 

 

第一种需要注意的是interrupt这个函数,如果没有这个函数locust就会一直执行formpage这个任务,只有通过这个函数,才能跳出来。执行formpage之外的函数。

第二种:

 

 

class MyTaskSet(TaskSet):

    @task

    class SubTaskSet(TaskSet):

        @task

        def my_task(self):

            pass

 

 

运行Locust:

locust -f ../locust_files/上面的文件名.py --host=http://example.com

              代码存放地址                           主机的名字和应用

分布式多处理器的Locust运行:

主处理器,负责分发任务的

locust -f ../locust_files/上面的文件名.py --master --host=http://example.com

--master-port=8888(默认的是8080端口)

从处理器,负责执行代码脚本的

llocust -f ../locust_files/上面的文件名.py --slave --master-host=192.168.0.100 --host=http://example.com --master-bind-host=8888

 

打开Locust web 界面

 http://127.0.0.1:8089 

由于example是在本地的,所以ip也是本地的

 技术分享图片

需要输入模拟多少个用户数和每秒启动多少个用户,就是并发数。

技术分享图片

 

python3.5安装locust遇到的问题总结

参考技术A1.locust可支持的python的版本Python2.7,3.5,3.6,3.7,3.8.2.我在python3.5的路径下使用pipinstalllocust安装locust,报错需要升级python原因:我的系统中有python2.7和python3.5,都有pip,需要指定pip安装,这边用python3-mpipinstallXXX安装,发现无... 查看详情

locust学习之路(集合点)(代码片段)

...封装,有如下办法实现:fromgevent._semaphoreimportSemaphoreall_locusts_spawned=Semaphore()all_locusts_spawned.acquire()defon_hatc 查看详情

性能工具之locust工具get与post请求(代码片段)

文章目录前言脚本示例总结前言最近在学习Locust性能工具,发现Locust性能工具脚本需要python基础才能写脚本,但是对于性能测试人员来说python是基本功夫。脚本示例在Locust中get脚本怎么写,为了方便直接在代码运行调... 查看详情

harmonyos实战-学习资料总结分享

...nyOS2.0,身为嵌入式爱好者当然是要第一时间开始了解学习说起学习,那寻找学习资料就是第一要务还有鸿蒙OS分底层根据不同的场景内核是不同的如上图,内核 查看详情

harmonyos实战-学习资料总结分享

...nyOS2.0,身为嵌入式爱好者当然是要第一时间开始了解学习说起学习,那寻找学习资料就是第一要务还有鸿蒙OS分底层根据不同的场景内核是不同的如上图,内核 查看详情

c/c++学习路线总结与分享

...0c;从基础到大厂面试题👉点击跳转刷题网站进行注册学习目录1、学习C语言2、学习C++3、了解基础的网络知识4、Linux相关知识5、数据库知识6、数据结构与算法7、需要重点关注的编程技 查看详情

零基础学习web开发技术总结分享

1、opacity与RGBA对元素进行透明度的设置时,经常用到的有opacity与background-color:rgba(),但两者有所不同;对比:rgba()和opacity都能实现透明效果,但最大的不同是opacity作用于元素,以及元素内的所有内容的透明度,而rgba()只作用于... 查看详情

单片机学习方法总结,给初学者分享如何怎样学习单片机

...开始接触单片机,到现在已经有3年的时间了,在这期间学习和使用了51单片机、飞思卡尔单片机,LPC2138,PIC16F887等系列的单片机,每接触一款单片机,都会经历熟悉其基本开发,然后将其用于项目中的过程,对于如何学习一款... 查看详情

locust的使用

 一、简介Locust是一款使用Python编写的压力测试工具,本篇总结会介绍在实际测试过程中遇到的问题https://www.locust.io/使用Locust的原因是因为可以模拟的用户数量可以通过添加硬件来增长,相对于jmeter来说配置更加方便。二、... 查看详情

博学谷学习记录超强总结,用心分享|springcache常用注解介绍+集成redis

SpringCache缓存框架实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功能,大大简化我们在业务中操作缓存的代码。SpringCache缓存框架实现了基于注解的缓存功能,只需要简单地加一个注解,就能实现缓存功... 查看详情

博学谷学习记录超强总结,用心分享|yarn的执行流程

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录yarn的组成部分yarn的执行流程简述Scheduler调度器ApplicationMasterContainer【博学谷IT技术支持】yarn的组成部分hadoop是由Common、HDFS、YARN、MapRed... 查看详情

[博学谷学习记录]超强总结,用心分享|zookeeper(代码片段)

前言-zookeeper大数据需要有语言支撑,几乎所有的流程都需要框架的辅助。1为什么要使用zookeeper?**1.是大数据生态圈中非常重要的一员2.用来管理其他框架** zookeeper被称作“动物管理员”,观察上方图片,大部分... 查看详情

学习总结|10万引大佬分享「做科研写论文发论文10大技巧」

文章目录一、前言二、关于论文的10个Tips一、前言一位堪称“Nature/Science论文收割机”的学术大牛EdwardSargent。分享了10点关于做科研、写论文、发论文的锦囊妙计。简要介绍一下学术大牛EdwardSargent:现为多伦多大学电子和计算机... 查看详情

学习总结|10万引大佬分享「做科研写论文发论文10大技巧」

文章目录一、前言二、关于论文的10个Tips一、前言一位堪称“Nature/Science论文收割机”的学术大牛EdwardSargent。分享了10点关于做科研、写论文、发论文的锦囊妙计。简要介绍一下学术大牛EdwardSargent:现为多伦多大学电子和计算机... 查看详情

博学谷学习记录超强总结,用心分享|hive查询分组join(代码片段)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录查询常用函数join语句排序【博学谷IT技术支持】查询常用函数常用函数---常用函数--求总行数(count)selectcount(1)fromscore;--36--求... 查看详情

性能工具之locust简单入门(代码片段)

文章目录前言快速安装主要命令快速上手总结前言Locustisaneasy-to-use,distributed,userloadtestingtool.Itisintendedforload-testingwebsites(orothersystems)andfiguringouthowmanyconcurrentusersasystemcanhandle.Locust是一个易于使用, 查看详情

分享下近两个月美帝mba研究生课程学习总结以及心得体会(ps.又可以开始软件开源分享了!)...(代码片段)

...方式改为线上进行,为此我为了抽出更多的时间专心学习向公司领导提了辞职,希望以后有机会的话还可以再回去吧。在世界上的一个开源平台Canvas进行学习,时间过得很快,为期两个多月的美国卡罗尔大学MBA春... 查看详情

性能监控平台搭建--集成locust性能数据(代码片段)

...给大家。点这里可以跳转到教程。文章目录问题概述获取Locust性能数据接口定时采集性能数据性能数据采集一致性no-web模式下获取性能数据slave模式下不进行数据采集封装原文链 查看详情