忽略元数据末尾

回到原数据开始处

Locust简介

Locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。

以下是github上的仓库地址

https://github.com/yileye/locust

官网地址:

http://locust.io/

Locust特性

  • 使用Python编写模拟用户行为的代码,无需繁琐的配置
  • 分布式可扩展,能够支持上百万用户
  • 自带Web界面
  • 不仅能测试web系统,也可以测试其它系统

Locust思想

在测试过程中,一群用户将访问你的网站。每个用户的行为由你编写的Python代码定义,同时可以从Web界面中实时观察到用户的行为。

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

Locust安装

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

pip install locustio 或者 easy_install locustio 

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

locust --help 

如果打算以分布式模式运行Locust,建议同时安装pyzmq:

pip install pyzmq 或者 easy_install pyzmq 

Locust初步使用

概念理解(翻译):

1. 超级类是 locust 类,它的每一个实例代表了一个用户, 守护程序会为每一个模拟用户生成一个实例

2. httplocust 继承了locust 类, 添加了可以发送http请求的功能

3. locust 有一个属性(成员变量)是 task_set , 它可以定义用户的行为, 就是访问哪些URL, post还是get, 每个连接占总访问量比是多少

这个task_set 是类TaskSet(或其子类)的一个实例, 上边说的各种行为就是在这个类里边定义的

4. locsut类:

属性: min_wait/max_wait  模拟用户有在上边说的类中定义了好多任务/行为, 每个任务/行为间隔多久执行一次, 单位是毫秒, 默认1000, 也即隔一秒种后执行下一个任务

属性: weight 权重: 模拟时, 同一段时间, 手机用户的访问量要比PC的访问量大, 那么对应的locust(或其子类)的weight值就大小不一

属性: host 就是需要被压测的网站的域名(或域名前缀), 如果启动服务时没有通过参数-host来指定域名, 那么就用使用该host属性指定的值

TaskSet类:

1. 推荐的是, 在taskset类(或子类)中通过在行为(回调函数)前加@task(weight)描述符来指定某一个行为被执行的频率

2. 或者先定义行为(回调函数), 然后通过属性tasks来指定每一个行为被执行的频率 tasks=[fun1, fun2....] 或者 tasks={fun1:weight1, fun2:weight2......}

3. 不管怎样定义, 里边的行为或函数是被随机调用/执行的, 只是根据weight的不通, 随机到的频率不通而已

4. 而且, 行为/任务可以嵌套执行, 先执行task1(也就是 fun1 下同), 然后执行task2 ..... 这样会更真实的模拟,

其写法就是, 将这些有关联任务定义/封装到一个taskset子类中, 然后通过上边介绍的 tasks属性tasks={classname:weight}, 在另一个TaskSet子类中去关联该类以达到嵌套的目的

5. 在执行子任务时, 通过 self.interrupt() 来终止子任务的执行, 来回到父任务类中执行, 否则子任务会一直执行

6. 成员函数, on_start(), 如果定义的话, 就会在开始的时候执行

HttpLocust类

1. 他可以发送http请求, 他有一个属性叫client(实例化的时候自动生成), 存储HttpSession类的实例(HttpSession类在实例化Locust的时候自动创建), 用来保存请求session

2. TaskSet类里也有属性client: self.client.get()或者self.client.post(), 这个client内部就是httplocust里的client

3. 请求返回一个对象, 他有两个成员, response.status_code 和 response.content

4. 如果因连接失败, 超时等等原因造成请求失败, 不会发出异常, 而是将上边的content置为空, status_code 置为0

5. 可以对返回content内容自定义处理, 因为有的时候返回404是你希望得到的

 with client.get(              response.success()

6.对网站来说, 一个URL的参数是固定的, 但是参数值是不定的, 也可以处理

       client.get(, profile:}           max_wait 

在上面的代码中,定义了一些locust任务,这些任务是用Python函数定义的。这些函数传入一个参数,也就是Locust类的实例。这些任务然后被聚集在TaskSet类的tasks属性中,用来表示一个用户访问网站的行为。接着,HttpLocust类表示一个用户,这个用户具有哪些行为,以及该用户在执行下一个任务之前应该等待多长时间。

HttpLocust类继承于Locust类,它增加了一个client属性,这个client实际上是HttpSession实例,可以用来发起HTTP请求。

上面的代码示例了一种定义任务的方式,下面是一种更方便的方式,该方式使用了task装饰器。

)     )          max_wait 

启动Locust

在shell中执行locust命令即可启动Locust。如果locustfile.py文件在当前目录,那么直接执行locust命令即可。如果locustfile.py文件在别的地方,可以执行

locust -f /path/to/locustfile.py 

至于如何在分布式模式下运行Locust,请参考Running Locust distributed

打开Web界面

在shell中执行locust命令,如果没有问题的话,命令输出会提示可以在浏览器中打开Locust的Web界面,访问地址默认是http://127.0.0.1:8089。在浏览器中打开该地址,就可以看到像下面这样的Web界面:对于喜欢使用轻量级性能工具的同学,可以考虑学习一下。而且也可以导出类似Jmeter一样的聚合报告

Locust分布式负载测试工具入门的更多相关文章

  1. AWS EC2+Docker+JMeter构建分布式负载测试基础架构

    目录 概述及范围 前提条件 Part 1: Local setup-本地配置 Part 2: Cloud端基础架构--Infrastructure 总结: 原文链接 @ 概述及范围 本文介绍有关如何使 ...

  2. .net分布式压力测试工具(Beetle.DT)

    肯定有人会问为什么会写这样一个开源工具?和现有的有什么差别?不过对于一个程序员来说写东西还真不需要理由的:),主要原因是工作有点闲(开玩笑),不过说实话一个程员怎可能会停止写代码呢(作为一个奔4的程序 ...

  3. 开源负载测试工具k6比JMeter更容易的5件事

    k6是GitHub上提供的开源负载测试工具.它是用Go编写的,并运行用JavaScript编写的测试脚本.它受到了开发人员,测试人员和DevOps团队的强烈兴趣,并拥有超过4400名GitHub明星. ...

  4. HTTP/HLS/RTMP超级负载测试工具

    这个负载测试工具是网游分享的工具,可以在http://blog.csdn.net/win_lin/article/details/11835011 或者https://github.com/winli ...

  5. HTTP/HLS/RTMP超级负载测试工具(转)

    这个负载测试工具是网游分享的工具,可以在http://blog.csdn.net/win_lin/article/details/11835011 或者https://github.com/winli ...

  6. loadrunner(预测系统行为和性能的负载测试工具)

    LoadRunner,是一种预测系统行为和性能的负载测试工具.通过以模拟上千万用户实施并发负载及实时性能监测的方式来确认和查找问题,LoadRunner能够对整个企业架构进行测试.企业使用LoadRu ...

  7. JMeter分布式负载测试(吞吐量控制器)

    在本节中,我们将学习如何使用吞吐量控制器在JMeter中创建分布式负载测试计划. 出于测试目的,我们将在我们网站 www.yiibai.com 的URL下的某些网页上创建分布式负载.这些网页包括: 主 ...

  8. Apache JMeter开源压力测试/负载测试工具 2.12 官方最新版

    软件介绍   Jmeter是一款使用Java开发的,开源免费的,测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),而且用Jmeter 来测试 Restful API, 非常好用. 如何学 ...

  9. 使用JMeter进行负载测试快速入门

    相信JMeter是很多测试人员必备技能之一,今天简单讲一下开发人员如何使用JMeter进行简单的压力测试快速入门. 安装JMeter Jmter官方地址 按提示下载JMeter,然后直接解压就可以用了 ...

随机推荐

  1. Spring EL bean引用实例

    在Spring EL,可以使用点(.)符号嵌套属性参考一个bean.例如,“bean.property_name”. public class Customer { @Value("#{ad ...

  2. GCC安装UBUNTU

    在Ubuntu下安装GCC和其他一些Linux系统有点不一样. 方法一: 该方法超简单:sudo apt-get  build-depgcc 就上面这条命令就可以搞定 方法二:sudo apt-get ...

  3. Integrate SharePoint 2013 with Team Foundation Server 2012

    Now that SharePoint 2013 is out I want to make sure that I can integrate SharePoint 2013 with Team F ...

  4. client怎样调用IBinder接口对象

    代码: public void funclick(View view){ Intent _intent = new Intent(MainActivity.this,MyService.class); ...

  5. sessionid与cookie

    转自:http://smiky.iteye.com/blog/649164 发现自己真的是很笨,过去一直用jsp,从来不用怕心用户信息放在session里面会找不到,现在不用jsp,前台全用html, ...

  6. redis中文API

    1.学习文档地址:http://www.redisdoc.com/en/latest/index.html 2.redis中文API REDIS所有的命令 <<ABOUT LIST> ...

  7. Andorid之Annotation框架初使用(三)

    线程使用: @Background这个是使用了cached thread pool executor , 阻止开启过多的线程 可以为@Background指定一个id,用于随时终止线程的操作(Back ...

  8. Tomcat中JVM参数设置

    Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个Java虚拟机.Tomcat的内存溢出本质就是JVM内存溢出,所以在本文开始时,应该先对JavaJVM有关内存方面的知识进 ...

  9. windows服务的安装和卸载方法

    安装 创建“安装.bat”文件,用记事本打开此文件,内容为 c:\windows\microsoft.net\framework\v4.0.30319\InstallUtil.exe E:\progr ...

  10. 【转】四大机器学习降维算法:PCA、LDA、LLE、Laplacian Eigenmaps

    最近在找降维的解决方案中,发现了下面的思路,后面可以按照这思路进行尝试下: 链接:http://www.36dsj.com/archives/26723 引言 机器学习领域中所谓的降维就是指采用某种映 ...