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

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

Locust性能测试学习总结的更多相关文章

  1. locust 性能测试学习 第一天

    不废话 1.安装python库 pip install locustio pip install pyzmq 2.脚本 命名为locust_test.py from locust import Htt ...

  2. Locust性能测试_先登录场景案例

    前言 有很多网站不登录的话,是无法访问到里面的页面的,这就需要先登录了实现场景:先登录(只登录一次),然后访问页面->我的地盘页->产品页->项目页 官方案例 下面是一个简单的loc ...

  3. Locust性能测试工具核心技术@task和@events

    Tasks和Events是Locust性能测试工具的核心技术,有了它们,Locust才能称得上是一个性能工具. Tasks 从上篇文章知道,locustfile里面必须要有一个类,继承User类,当性 ...

  4. 性能测试学习之三—— PV->TPS转换模型&TPS波动模型

    PV->TPS转换模型 由上一篇“性能测试学习之二 ——性能测试模型(PV计算模型)“ 得知 TPS = ( (80%*总PV)/(24*60*60*(T/24)))/服务器数量 转换需要注意: ...

  5. Python Locust性能测试框架实践

    [本文出自天外归云的博客园] Locust的介绍 Locust是一个python的性能测试工具,你可以通过写python脚本的方式来对web接口进行负载测试. Locust的安装 首先你要安装pyth ...

  6. Locust性能测试

    https://www.cnblogs.com/yoyoketang/p/9638151.html https://www.cnblogs.com/yoyoketang/p/9642242.html ...

  7. python locust 性能测试:locust安装和一些参数介绍

    安装参考 https://www.cnblogs.com/fnng/p/6081798.html <虫师大大的,很详细> ps:python3.7暂不支持locust:python3安装建 ...

  8. Locust性能测试4-参数关联

    前言 前面[Locust性能测试2-先登录场景案例]讲了登录的案例,这种是直接传账号和密码就能登录了,有些登录的网站会复杂一点, 需要先从页面上动态获取参数,作为登录接口的请求参数,如[学信网:htt ...

  9. Locust性能测试6-命令行参数详解

    前言 当我们在linux上使用locust工具压测的时候,会使用no-web模式,然后需要收集运行的日志,方便查找问题. 命令行参数 输入locust --help 查看所有的命令行参数 > l ...

随机推荐

  1. CSS技术实例1-使用CSS计数器实现数值计算小游戏实例页面

    一 实例要达到的要求如图所示: 二 分析 1.7个圆角矩形标签(或按钮) 2. 点击触发并开始运算,最后一个标签显示结果 3.计算成功后弹出"万岁"字眼 三 代码实现 关键CSS代 ...

  2. bzoj1547 周末晚会

    我们要求方案数,还是旋转同构的,想burnside,如果我们能计算出转i位不变的满足条件的数量,那么这道题我们就解决了. 考虑转i位时,设tmp=gcd(i,n),那么就共有tmp个循环节. 当tmp ...

  3. 【k短路&A*算法】BZOJ1975: [Sdoi2010]魔法猪学院

    Description 找出1~k短路的长度.   Solution k短路的求解要用到A*算法 A*算法的启发式函数f(n)=g(n)+h(n) g(n)是状态空间中搜索到n所花的实际代价 h(n) ...

  4. BZOJ_1180_[CROATIAN2009]OTOCI_LCT

    BZOJ_1180_[CROATIAN2009]OTOCI_LCT Description 给出n个结点以及每个点初始时对应的权值wi.起始时点与点之间没有连边.有3类操作:  1.bridge A ...

  5. 《HelloGitHub》第 37 期

    公告 欢迎熟悉 C# 热爱开源的小伙伴加入我们,点此联系我 <HelloGitHub>第 37 期 兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub ...

  6. SQL Server 容易忽略的错误

    一.概述 因为每天需要审核程序员发布的SQL语句,所以收集了一些程序员的一些常见问题,还有一些平时收集的其它一些问题,这也是很多人容易忽视的问题,在以后收集到的问题会补充在文章末尾,欢迎关注,由于收集 ...

  7. java游戏开发杂谈 - 事件处理

    大家都知道,游戏需要跟玩家交互,需要接收玩家的鼠标.键盘发出的命令,比如在地图上点击一下,人物就自动寻路走过去:键盘上按下某个键,就弹出一个背包界面. 这些逻辑是怎么处理的呢? 大家先不用深究太详细的 ...

  8. 使用github pages搭建个人博客

    一.环境准备 使用Github Pages搭建个人博客,一劳永逸,可以让我们更加专注于博客的撰写.博客的更新是通过将新建或改动的博客放在指定文件夹并推送到远程Github仓库来完成的,所以我们本地需要 ...

  9. Spring Boot入门(五):使用JDBC访问MySql数据库

    本系列博客记录自己学习Spring Boot的历程,如帮助到你,不胜荣幸,如有错误,欢迎指正! 在程序开发的过程中,操作数据库是必不可少的部分,前面几篇博客中,也一直未涉及到数据库的操作,本篇博客 就 ...

  10. Thymeleaf【快速入门】

    前言:突然发现自己给自己埋了一个大坑,毕设好难..每一个小点拎出来都能当一个小题目(手动摆手..),没办法自己选的含着泪也要把坑填完..先一点一点把需要补充的知识学完吧.. Thymeleaf介绍 稍 ...