1、简介

Locust 是一个易于使用,分布式,用户负载测试工具。它用于负载测试 web 站点(或其他系统),并计算出一个系统可以处理多少并发用户。在测试期间,一大群虚拟用户访问你的网站。每个测试用户的行为由您定义,集群过程由 web UI 实时监控。这将帮助您在让真正的用户进入之前进行测试并识别代码中的瓶颈。

Locust 完全是基于事件的,因此在一台机器上支持数千个并发用户是可能的。与许多其他基于事件的应用程序不同,它不使用回调。相反它通过 gevent 使用轻量级协程。这允许您用 Python 编写非常有表现力的场景,而不用回调使代码复杂化。

2、安装

用 pip 管理工具安装:

pip3 install locust

检查是否安装成功,执行命令:locust --v

3、压测过程

1.编写脚本

Locust 不同于 jmeter 可以用 GUI 来创建压测脚本。Locust 需要自己编写 python 脚本,压测负载脚本主要包含两个子类UserTask和WebsiteUser,分别继承TaskSet和Httplocust类,拥有这两个父类的公共属性和方法。

from locust import HttpLocust, TaskSet, task, betweenimport os,json# 定义用户行为class UserTask(TaskSet):    def on_start(self):        '''初始化数据,每个虚拟用户只执行一次'''self.client.post("/login",{"username":"test","password":"123456"})@task(2)    def home_index(self):r = self.client.get("/sz/Home/DefaultHomeV2Request")        assert json.loads(r.text)['Error'] == 0@task(1)    def sale(self):self.client.get("/sz/Home/FlashSaleRequest")        assert json.loads(r.text)['Error'] == 0    def on_stop(self):        '''销毁数据,每个虚拟用户只执行一次'''self.client.post("/SignOut",{"CustomerGuid":"c7d7e646-9ce2-499b-a22e-a3c98d4545fe"})class WebsiteUser(HttpLocust):host = 'http://10.1.62.126'task_set = UserTaskwait_time = between(3, 5)if __name__ == "__main__":os.system('locust -f stress_test.py ')

locust 运行时:

on_start() :每个并发用户在开始前各执行一次

on_stop():每个并发用户在结束后各执行一次

@task:通过装饰器设置运行权重,比如上面代码中 执行任务 home_index 和 sale 的总请求为 2:1

assert:断言设置

wait_time :每个任务之间设置间隔时间,随机从3~5区间内取,单位是 s

locust -f:指定 .py 压测脚本路径

2. Locust 监控

顺带提一下 locust web UI监控是基于 flask 框架,不指定 port 的话,默认地址:http://localhost:8089

![图片](https://img-blog.csdnimg.cn/5dc73452c5664d5594037aeb692c3089.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6L2v5Lu25rWL6K-V5ZCb,size_19,color_FFFFFF,t_70,g_se,x_16)

开始测试,Locust 提供一个简易的监控界面,可以看到 RPS、响应时间 和 部分曲线图


3.运行模式

  1. web UI 模式
locust -f stress_test.py --web-host 10.1.44.31 --web-port 8090

–web-host:指定 web UI IP,默认 localhost

–web-port:指定 web UI 端口,默认 8089

  1. no web 模式
locust -f stress_test.py --no-web -c 100 -r 20 -t 120

–no-web:指定无 web UI模式

-c:起多少 locust 用户(等同于起多少 tcp 连接)

-r:多少时间内,把上述 -c 设置的虚拟用户全部启动

-t:脚本运行多少时间,单位s

在 --no-web 模式下的报告如下:

4.分布式进程

Locust 是由 python 编写的,由于GIL的限制,单进程不能利用CPU多核的优势(实际测试结果也是一样,8核心的虚拟机,只有一核达到了95%以上的使用率,其余7核只围观,不出力)。所以单台机器上想要尽可能的压榨 CPU,只能开启多进程,一般有多少个核心启多少进程。

单台多进程:

先启一个 master

locust -f /home/script/stress_test.py --web-host 10.1.62.223 --master

再启 8 个 slave

locust -f /home/script/stress_test.py --slave

slave 节点启动后,在 locust 监控中能看到

多台多进程:

多台机器搭建 Locust 分布式 和 单台搭建多进程差不多。只有一个区别,如果 slave 和 master 不在一台机器上, slave 需要指定 --master-host 参数:

locust -f /home/script/stress_test.py --slave --master-host 10.1.62.223

更多功能使用请查看Locust官方文档,形成良好的习惯 :官方文档

4、总结

Locust 基于 python 脚本定制化压测,使用 python 语言来实现 参数化、关联参数、断言和一些复杂的压测场景非常方便。Locust 使用协程来构建tcp连接,本身单机并发能力强,但内部是由requests库的httpclient 发起网络请求,requests库功能挺全面,性能却很一般,好在 Locust 支持分布式,弥补了一定的性能缺陷。根据自己做的测试,同样几台客户机,jmeter搭建分布式测出的 qps 比 Locust分布式 高1/3。如果要提升 locust 单进程性能,可以将 httpclient 的实现方式从 requests 换成 geventhttpclient。

最后: 可以在公众号:伤心的辣条 ! 免费领取一份216页软件测试工程师面试宝典文档资料。以及相对应的视频学习教程免费分享!,其中包括了有基础知识、Linux必备、Shell、互联网程序原理、Mysql数据库、抓包工具专题、接口测试工具、测试进阶-Python编程、Web自动化测试、APP自动化测试、接口自动化测试、测试高级持续集成、测试架构开发测试框架、性能测试、安全测试等。

如果我的博客对你有帮助、如果你喜欢我的博客内容,请 “点赞” “评论” “收藏” 一键三连哦!喜欢软件测试的小伙伴们,可以加入我们的测试技术交流扣扣群:914172719(里面有各种软件测试资源和技术讨论)


好文推荐

转行面试,跳槽面试,软件测试人员都必须知道的这几种面试技巧!

面试经:一线城市搬砖!又面软件测试岗,5000就知足了…

面试官:工作三年,还来面初级测试?恐怕你的软件测试工程师的头衔要加双引号…

什么样的人适合从事软件测试工作?

那个准点下班的人,比我先升职了…

测试岗反复跳槽,跳着跳着就跳没了…

Python是最好的编程语言,Locust是最好的压测工具,不服来辩!相关推荐

  1. 基于python的压测工具_Python Locust性能测试简介及框架实践

    Locust(俗称 蝗虫), 一个轻量级的开源压测工具,用Python编写.使用 Python 代码定义用户行为,也可以仿真百万个用户: Locust 非常简单易用,是分布式,用户负载测试工具.Loc ...

  2. locust压测工具:启动概述

    locust压测工具启动概述 本文环境python3.5.2 locust版本0.9.0 locust概述 locust是一个简单易用.分布式的用户压测工具,并确定系统可以处理多少并发用户.在测试的时 ...

  3. locust压测工具【学习】

    locust压测工具[学习] 1.安装:pip3 install locust 检验版本:locust -V 2.使用脚本: from locust import task, HttpUser, co ...

  4. python服务端多进程压测工具

    本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...

  5. python 压测工具_流量压测工具 | 亚马逊AWS官方博客

    (可用于测试AWS ELB.EC2.Auto Scaling.HA) 一群勤劳的小蜜蜂 很多时候我们需要进行负载均衡.Web服务器的并发式压力测试,但像Siege, JMeter等工具都是从一个源IP ...

  6. 压测工具之Locust

    前言   说起压测,我就用过Jmeter,而且仅是简单使用,好用性能强大,最近接触了一个python提供的压测框架Locust,翻译为蝗虫,蝗虫过之,寸草不生,哈哈哈,我感觉很贴切. 首先,我们分析一 ...

  7. locust压测工具:测试信息输出与分布式模式

    locust压测环境描述 本文环境python3.5.2 locust版本0.9.0 locust测试信息输出与分布式模式 本文将主要分析两个方面的内容: 1.locust在启动运行在跑测试用例的时候 ...

  8. locust压测工具:http测试过程与定时停止

    locust压测环境描述 本文环境python3.5.2 locust版本0.9.0 locust示例的执行过程 上文大概描述了locust的启动了流程,本文主要是接着上文继续分析,示例代码中的htt ...

  9. 压测工具哪家强,LR? jmeter?locust? wrk 全方位对比

    当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢?今天,笔者将根据自己使用经验,针对jmeter.locust.wrk和loa ...

最新文章

  1. 数据密集型应用系统设计 [Designing Data-Intensive Applications]
  2. Android app动态加载
  3. 【 MATLAB 】【 MATLAB 】DFT的性质讨论(三)序列的循环卷积及其 MATLAB 实现
  4. windows磁盘分区
  5. ES6 中 Promise 详解
  6. java 27 - 4 反射之 通过反射获取成员变量并使用
  7. 编译 ioftpd v7.7.3
  8. wp7使用Cocos2d-X for XNA制作一个塔防类游戏 (二)在游戏中加入地图和怪物。(上)
  9. 三个箭头循环标志_沧州交通标志杆直销
  10. React Native ScrollableTabView的自定义tabBar
  11. 数据库连接配置tomcat_Tomcat到Wildfly:配置数据库连接
  12. 预期的异常规则和模拟静态方法– JUnit
  13. C语言高效编程的的四大绝招
  14. oracle 时间按季度,ORACLE时间字段取年、月、日、季度
  15. mac 黑窗口连接mysql_mac系统下mysql环境变量设置及远程连接
  16. Spring注解-@DependsOn
  17. 第三周:tesseral 2D软件的使用
  18. 入门学习计算机第十三天—初识指针
  19. 【超详细】零基础自学网络安全,来收藏这一篇就够了(白嫖60G网安教程)
  20. python和按键精灵自动化测试_按键精灵对APP自动化测试(上)

热门文章

  1. java实例_Java线程方式及实例
  2. 【写作技巧】毕业论文结构一文通
  3. es6去除重复项_ES6 常用知识总结
  4. linux命令大全_Linux 系统下查看硬件信息命令大全
  5. 安卓桌面壁纸_安卓视频桌面哪个好用 让手机桌面更炫酷
  6. css放服务器ttf文件格式,CSS如何实现读取服务器字体
  7. php sqlsrv 分页,sqlsrv php分页
  8. 洛奇英雄转无法读取游戏服务器状态,洛奇英雄传无法连接服务器认证失败处理方法讲解...
  9. 9.9递归和动态规划(十二)——小鸡吃米
  10. Apache RewriteCond %{REQUEST_FILENAME} 不起作用问题