Locust:深入使用 断言 参数化 压测工具对比
###
Locust 设置断言
性能测试也需要设置断言么? 某些情况下是需要,比如你在请求一个页面时,就可以通过状态来判断返回的 HTTP 状态码是不是 200。
使用TaskSet实现
####
Locust 参数化
使用 LoadRunner 和 JMeter 的同学都知道,性能测试工具设置参数化颇为麻烦,但对于 Python 来说,生成点数据再简单不过了。
使用TaskSet实现
####
好文推荐:
1、https://debugtalk.com/post/locustplus-talk-about-performance-test/
这篇博客从性能测试方法、性能瓶颈定位、性能测试工具的基本组成、性能测试工具推荐(比较了loadrunner,jmeter,Locust优缺点)等方面做了深入的介绍,推荐!
蝗虫比Jmeter好的一点就是高并发,但是相对的不好的地方也有,就是需要另外的工具去监控服务器,而且需要去编写代码。
下面贴上这个文章的对比内容:
性能测试工具推荐
经过充分的理论铺垫,现在总算可以进入正题,开始讲解工具部分了。
在性能测试工具方面,我重点向大家推荐Locust
这款开源工具。目前阶段,该款工具在国内的知名度还很低,大多数测试人员可能之前都没有接触过。为了便于理解,我先将Locust
与LoadRunner、Jmeter这类大众耳熟能详的性能测试工具进行简单对比。
\ | LoadRunner | Jmeter | Locust |
---|---|---|---|
授权方式 | 商业收费 | 开源免费 | 开源免费 |
开发语言 | C/Java | Java | Python |
测试脚本形式 | C/Java | GUI | Python |
并发机制 | 进程/线程 | 线程 | 协程 |
单机并发能力 | 低 | 低 | 高 |
分布式压力 | 支持 | 支持 | 支持 |
资源监控 | 支持 | 不支持 | 不支持 |
报告与分析 | 完善 | 简单图表 | 简单图表 |
支持二次开发 | 不支持 | 支持 | 支持 |
通过对比,大家可能会疑惑,Locust
也不怎么样嘛,资源监控也不支持,报告分析能力也这么弱,那为啥还要选择它呢?
授权方式这个就不说了。虽然LoadRunner是商业软件,价格极其昂贵,但是国内盗版横行,别说个人,就算是大型互联网公司,用正版的也没几个。
从功能特性的角度来讲,LoadRunner是最全面的,用户群体也是最多的,相应的学习资料也最为丰富。个人建议如果是新接触性能测试,可以先熟悉LoadRunner,借此了解性能测试工具各个模块的概念和功能,在此基础上再转到别的测试工具,也都比较好上手了。不过,LoadRunner只能在Windows平台使用,并且并发效率比较低,单台压力机难以产生较高的并发能力,这也是现在我弃用该款工具的主要原因。
同样地,Jmeter的并发机制也是基于线程,并发效率存在同样的问题;另外,Jmeter在脚本编写和描述方面是基于GUI操作,个人感觉操作比较繁琐(这个因人而异),因此不是很喜欢。
那么,我重点推荐的Locust
有啥特别的地方呢?
如果从整体功能上来看的话,Locust
的功能的确比较单薄。不过,作为性能测试工具最核心的压力发生器部分,却是非常不错的。抛开官方文档的介绍,个人觉得最赞的有两点。
首先是模拟用户操作,也就是测试脚本描述方面。Locust采用Pure Python脚本描述,并且HTTP请求完全基于Requests库。用过Requests
的都知道,这个库非常简洁易用,但功能十分强大,很多其它编程语言的HTTP库都借鉴了它的思想和模式,如果将其评选为最好用的HTTP库之一(不限语言),应该也不会有太大的争议。除了HTTP(S)协议,Locust也可以测试其它任意协议的系统,只需要采用Python调用对应的库进行请求描述即可。
另外一点就是并发机制了。Locust的并发机制摒弃了进程和线程,采用协程(gevent)的机制。采用多线程来模拟多用户时,线程数会随着并发数的增加而增加,而线程之间的切换是需要占用资源的,IO的阻塞和线程的sleep会不可避免的导致并发效率下降;正因如此,LoadRunner和Jmeter这类采用进程和线程的测试工具,都很难在单机上模拟出较高的并发压力。而协程和线程的区别在于,协程避免了系统级资源调度,由此大幅提高了性能。正常情况下,单台普通配置的测试机可以生产数千并发压力,这是LoadRunner和Jmeter都无法实现的。
有了一个不错的引擎,外表装饰简陋点也都是可以接受的了。不过虽然Locust功能单薄,特别是在性能指标监控和测试报告图表方面比较缺失,但是Locust的代码结构清晰,核心代码量也只有几百行,可扩展性也非常不错。换言之,Locust的可玩性(hackable
)极强,对于一个想深入挖掘性能测试工具原理的人来说,Locust
非常适合。
好了,Locust的介绍暂且到这儿,后续我会再对Locust的使用方法和二次开发进行详细介绍,也算是弥补官方文档的不足吧。
总结:locust外表简单,但是功能不简单,
https://debugtalk.com/post/head-first-locust-advanced-script/
####