Locust介绍:

Locust作为基于Python语言的性能测试框架。

其优点在于他的并发量可以实现单机10倍于LoadRunner和Jmeter工具。他的工作原理为协程并发,也就是gevent库。

Locust的缺点也显而易见,他没有友好的性能监控页面,没有任何关联,参数化,检查点之类的定义。他仅仅就是一个轻量级的框架,但是正因为如此,我们可以通过python成千上万的库支持,定制自己任何想要的东西!

安装

通过pip 安装locust

pip install locustio

样例

简单的Locust框架样例:

Locust每生成一个实例都代表一个虚拟的用户,用来发送请求到进行负载测试的系统。

该用户的行为由task_set属性定义,该属性应指向一个 TaskSet类。

这个类通常应该由某些类继承并且重新定义。

例如:

 from locust import Locust, TaskSet, task

 class WebsiteTasks(TaskSet):
def on_start(self):
pass @task(1)
def index(self):
pass @task(5)
def about(self):
  pass class WebsiteUser(Locust):
task_set = WebsiteTasks
min_wait = 5000
max_wait = 15000

例如,当测试HTTP系统时,使用的HttpLocust类

 from locust import HttpLocust, TaskSet, task

 class MyTaskSet(TaskSet):
@task(2)
def index(self):
self.client.get("/") @task(1)
def about(self):
self.client.get("/about/") class MyLocust(HttpLocust):
task_set = MyTaskSet //测试集
min_wait = 5000 //单个请求下次发起的最小等待时间
max_wait = 15000 //单个请求下次发起的最大等待时间
    host = 'xxx' //指定测试目标地址

WebsiteTasks(TaskSet): 继承TaskSet类,该类中主要为用户自己设定的测试集

           TaskSet类中 :on_start是优先方法,他会优先于下面所有task方法。

                   :同样 on_stop是结尾方法,会在结束时执行

           @task装饰器,task中的数字是测试中,该测试方法在测试集中的权重

HttpLocust 和 Locust继承类中:

  1.task_set 选择需要的测试集,

  2.min and max wait取最大和最小等待区间值,取值为随机

  3.host为指定测试目标地址

启动

直接启动:

locust --host=http://example.com

有文件路径时:

locust -f locust_files/my_locust_file.py --host=http://example.com

例子:

locust -f test.py --host=127.0.0.1

需要多机并发操作时,主机启动:

locust -f locust_files/my_locust_file.py --master --host=http://example.com

辅助机器启动:

locust -f locust_files/my_locust_file.py --slave --host=http://example.com

注意点:

启动时,有的同学打开web后8089端口,页面打不开,可以使用以下方式打开:

locust -f locustfile.py --web-host=127.0.0.1

无网页启动:

locust -f locustfile.py --no-web -r 5 -c 1 -t 5m

r表示总用户数,c表示每秒增加用户数,t表示执行时间

打开测试页面

打开测试页面,Locust默认的地址通常为:http://127.0.0.1:8089

设定总人数和每秒增加人数,然后点击开始

结尾:

引用debug-talk一段对整个Locust比较准确的概述和总结:

Locust类中,具有一个client属性,它对应着虚拟用户作为客户端所具备的请求能力,也就是我们常说的请求方法。通常情况下,我们不会直接使用Locust类,因为其client属性没有绑定任何方法。因此在使用Locust时,需要先继承Locust类,然后在继承子类中的client属性中绑定客户端的实现类。

对于常见的HTTP(S)协议,Locust已经实现了HttpLocust类,其client属性绑定了HttpSession类,而HttpSession又继承自requests.Session。因此在测试HTTP(S)Locust脚本中,我们可以通过client属性来使用Python requests库的所有方法,包括GET/POST/HEAD/PUT/DELETE/PATCH等,调用方式也与requests完全一致。另外,由于requests.Session的使用,因此client的方法调用之间就自动具有了状态记忆的功能。常见的场景就是,在登录系统后可以维持登录状态的Session,从而后续HTTP请求操作都能带上登录态

而对于HTTP(S)以外的协议,我们同样可以使用Locust进行测试,只是需要我们自行实现客户端。在客户端的具体实现上,可通过注册事件的方式,在请求成功时触发events.request_success,在请求失败时触发events.request_failure即可。然后创建一个继承自Locust类的类,对其设置一个client属性并与我们实现的客户端进行绑定。后续,我们就可以像使用HttpLocust类一样,测试其它协议类型的系统。

原理就是这样简单!

 
 
 

Locust 介绍篇的更多相关文章

  1. 最牛逼android上的图表库MpChart(一) 介绍篇

    最牛逼android上的图表库MpChart一 介绍篇 MpChart优点 MpChart是什么 MpChart支持哪些图表 MpChart效果如何 最牛逼android上的图表库MpChart(一) ...

  2. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  3. DDD分层架构之值对象(介绍篇)

    DDD分层架构之值对象(介绍篇) 前面介绍了DDD分层架构的实体,并完成了实体层超类型的开发,同时提供了验证方面的支持.本篇将介绍另一个重要的构造块——值对象,它是聚合中的主要成分. 如果说你已经在使 ...

  4. Kubernetes系列之Helm介绍篇

    本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复[K8s实战]获取 介绍 Helm 是 Deis 开发的一个用于 Kubernetes 应用的包管理工具,主要用来 ...

  5. Percona XtraBackup 安装介绍篇

    XtraBackup介绍 XtraBackup是Percona公司的开源项目,用以实现类似Innodb官方的热备份工具InnoDB Hot Backup的功能,它支持在线热备份(备份时不影响数据读写) ...

  6. (zhuan) 深度学习全网最全学习资料汇总之模型介绍篇

    This blog from : http://weibo.com/ttarticle/p/show?id=2309351000224077630868614681&u=5070353058& ...

  7. 180719-Quick-Task 动态脚本支持框架之使用介绍篇

    文章链接:https://liuyueyi.github.io/hexblog/2018/07/19/180719-Quick-Task-动态脚本支持框架之使用介绍篇/ Quick-Task 动态脚本 ...

  8. SpringBoot 系列教程之编程式事务使用姿势介绍篇

    SpringBoot 系列教程之编程式事务使用姿势介绍篇 前面介绍的几篇事务的博文,主要是利用@Transactional注解的声明式使用姿势,其好处在于使用简单,侵入性低,可辨识性高(一看就知道使用 ...

  9. 使用ADMT和PES实现window AD账户跨域迁移-介绍篇

    使用 ADMT 和 pwdmig 实现 window AD 账户跨域迁移系列: 介绍篇 ADMT 安装 PES 的安装 ADMT:迁移组 ADMT:迁移用户 ADMT:计算机迁移 ADMT:报告生成 ...

随机推荐

  1. Django之Rest Framework框架

    一.什么是RESTful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度 ...

  2. 入坑-DM导论-第一章绪论笔记

    //本学习笔记只是记录,并未有深入思考. 1.什么是数据挖掘? 数据挖掘是数据库中发现必不可少的一部分. 数据预处理主要包括(可能是最耗时的步骤): 1.融合来自多个数据源的数据 2.清洗数据以消除噪 ...

  3. Python 无穷大与NaN

    想创建或测试正无穷.负无穷或NaN(非数字) 的浮点数 Python 并没有特殊的语法来表示这些特殊的浮点值,但是可以使用float() 来创建它们.比如: >>> a = floa ...

  4. 初识CGI

    CGI Web 服务器只能生成静态内容,而用户请求动态内容时,Web服务器只能借助一些应用程序来实现.CGI时一套标准,它规定了Web服务器和应用程序之间的交互方式. 静态内容与动态内容 要想理解什么 ...

  5. INNODB锁(2)

    在上一篇文章写了锁的基本概述以及行锁的三种形式,这一篇的主要内容如下: 一致性非锁定读 自增长与锁 外键和锁 一致性性非锁定读 一致性非锁定读是InnoDB通过多版本并发控制(MVCC,multi v ...

  6. 前端学习笔记之HTTP协议

    阅读目录 一 HTTP协议简介 二 HTTP协议之请求Request 三 HTTP协议之响应Response 四 HTTP协议完整工作流程 五 HTTP协议关键性总结 六 自定义套接字分析HTTP协议 ...

  7. bzoj1604 / P2906 [USACO08OPEN]牛的街区Cow Neighborhoods

    P2906 [USACO08OPEN]牛的街区Cow Neighborhoods 考虑维护曼哈顿距离:$\left | x_{1}-x_{2} \right |+\left | y_{1}-y_{2} ...

  8. Javaworkers团队第四周项目总结

    本周项目进展 本周是我们的项目开发的第四周,在之前的一周,我们小组在合作的情况下基本完成了项目代码的框架编写,我们组的项目课题,小游戏--贪吃蛇以及可以运行,可以进行简单的游戏,但是我们在思考之后发现 ...

  9. JQuery+CSS3实现Ajax加载时loading效果

    之前通过Ajax请求加载数据的时候,在数据还没有呈现出来前,为了更好的用户体验,总会弄个loading告诉用户其实内容正在加载,而不是网站崩了.但是貌似之前使用gif图片的情况比较多,可能是为了兼容各 ...

  10. Two Sum(II和IV)

    本文包含leetcode上的Two Sum(Python实现).Two Sum II - Input array is sorted(Python实现).Two Sum IV - Input is a ...