Locust学习总结分享

简介:  

 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也是本地的

 

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

 

转载于:https://www.cnblogs.com/tiechui2015/p/10557417.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/249413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA系列(四)一部署war 和 war exploded的区别

war模式:将WEB工程以包的形式上传到服务器 ; war exploded模式:将WEB工程以当前文件夹的位置关系上传到服务器;(1)war模式这种可以称之为是发布模式,看名字也知道,这是先打成war包&a…

Vue常用7个属性

https://www.cnblogs.com/bgwhite/p/9297221.html

初始Zookeeper

Zookeeper是一个分布式服务框架,据说是一个比较强大的架构模式,具体我也不甚了解,但是最近由于工作上的原因,需要部署一个Zookeeper服务,实现移动端一个简单的发单、抢单功能。于是我便开始了解这个框架,将…

开发进度

项目名称:信息技术手册查重错误比对分析 功能概述: (1) 数据导入:要求将提供的信息技术手册文档倒入数据库中 方法: 将word文档中的内容复制到text中,利用notepad打开,利用正则表达…

Solr的安装和使用

安装 CentOS中先安装好Java和Tomcat。准备工具IK Analyzer 2012FF 和Solr-4.10.3.tgz 将solr-4.10.3文件夹中dist中的solr-4.10.3.war文件复制到Tomcat的webapps,并且更名为solr.war,下开启tomcat解压后再关闭tomcat,再删除solr.war。 将Solr…

springboot工程打包时将application.properties放在jar包外

https://blog.csdn.net/luckyzsion/article/details/83743604

史上最详细的js日期正则表达式分享

最简单的正则 如 : /d{4}-/d{2}-/d{2} 但是实际情况却不是那么简单,,要考虑,有效性和闰年等问题..... 对于日期的有效范围,不同的应用场景会有所不同。MSDN中定义的DateTime对象的有效范围是:0001-01-01 00:00:00到9999-12-31 23:59:59。 UNIX时间戳的0按…

laravel的validator验证

1.引入对应的类 use Illuminate\Support\Facades\Validator;2.自定义规则,写在模型,控制器,中间件都可以 $rules [password > required|between;6,20|confirmed, name > required|between;3,8, ];3.自定义提示,laravel自…

HTML,CSS,JaveScript

一、HTML 1、标记语言 标记语言为非编程语言,不具备编程语言具备的程序逻辑 2、html为前端页面的主体,由标签、指令与转义字符(实体)等组成 标签:被尖括号包裹,由字母开头包含合法字符的,可以被…

python用户交互、基本数据类型、运算符

用户交互 在实际应用中,我们经常需要用户输入相应信息,根据用户输入信息进行反馈,此时我们需要input/output信息 python中提供了便捷的输入方法input()和print() 在python3中 name input("…

pom.xml详细说明

<project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "><!-- 父项目的坐标。…

maven如何修改本地仓库与中央仓库

什么是Maven仓库 在不用Maven的时候&#xff0c;比如说以前我们用Ant构建项目&#xff0c;在项目目录下&#xff0c;往往会看到一个名为/lib的子目录&#xff0c;那里存放着各类第三方依赖jar文件&#xff0c;如 log4j.jar&#xff0c;junit.jar等等。每建立一个项目&#xff0…

Maven项目 之eclipse操作篇

使用eclipse创建maven项目大家应该都很熟悉&#xff0c;这里主要说明如何将已创建的非maven项目修改为maven项目。 1.创建测试项目 创建一个Dynamic Web Project &#xff0c;项目结构如图。 2.配置工程类型 右击项目--> Properties --> Project Facets&#xff0c;勾选…

前端jQuery基本语法

jQuery基础语法 #不管找什么标签&#xff0c;用什么选择器&#xff0c;都必须要写$("")&#xff0c;引号里面再写选择器&#xff0c;通过jQuery找到的标签对象就是一个jQuery对象&#xff0c;用原生JS找到的标签对象叫做DOM对象。二者可以相互转换。$()[0]:就是jQuer…

网络工程:3.1 RIP(Routing Information Protocol)协议

遵循协议&#xff1a; 1、特网rip1标准文件&#xff1a;rfc1058 网站 &#xff1a; https://tools.ietf.org/html/rfc1058 2、因特网rip2标准文件&#xff1a;rfc1723 网站 &#xff1a;https://tools.ietf.org/html/rfc1723 使用工具&#xff1a; GNS3 使用路由器文件&a…

为什么要有 hash 和 history

https://www.cnblogs.com/zhaobao1830/p/9269042.html

2:word定制工作界面

1.2&#xff0c;定制工作界面 一、功能区的折叠和展开 设计选项----右上方的向上的箭头 功能区的选项&#xff1a;三个&#xff1a;自动隐藏功能区&#xff0c;显示选项卡&#xff0c;显示选项卡和命令 二、定制快速访问工具栏 如何将一些常用的命令放到一个能便捷找到的地方 第…

JBPM中 使用JobExecutor执行timer定义的job

Job executor在jbpm.cfg.xml中是被缺省注释的&#xff0c;所以只要去掉此行即可通过JobExecutor来定时触发timer中的event-handler了 Xml代码 <jbpm-configuration><import resource"jbpm.default.cfg.xml" /><import resource"jbpm.businessca…

二维码生成

从vs Nugets搜索ThoughtWorks.QRCode下载ThoughtWorks.QRCode.dll private byte[] CreateQrcode(string code){ string enCodeString code;QRCodeEncoder qrCodeEncoder new QRCodeEncoder();qrCodeEncoder.QRCodeEncodeMode QRCodeEncoder.ENCODE_MODE.BYTE;qrCodeEncod…

vue created

https://blog.csdn.net/xdnloveme/article/details/78035065