前言
说起压测,我就用过Jmeter,而且仅是简单使用,好用性能强大,最近接触了一个python提供的压测框架Locust,翻译为蝗虫,蝗虫过之,寸草不生,哈哈哈,我感觉很贴切。
首先,我们分析一下市面上几种工具的特性。
\ | LoadRunner | Jmeter | Locust |
---|---|---|---|
授权方式 | 商业收费 | 开源免费 | 开源免费 |
开发语言 | C/Java | Java | Python |
测试脚本形式 | C/Java | GUI | Python |
并发机制 | 进程/线程 | 线程 | 协程 |
单机并发能力 | 低 | 低 | 高 |
分布式压力 | 支持 | 支持 | 支持 |
资源监控 | 支持 | 不支持 | 不支持 |
报告与分析 | 完善 | 简单图表 | 简单图表 |
支持二次开发 | 不支持 | 支持 | 支持 |
并发方式 | 线程 | 线程 | 协程 |
我认为最适合程序员的当然是Locust,脚本语言快速开发,可玩性高,自由发挥,甚至可以用来干坏事,哈哈哈哈,不用记繁琐的页面操作,支持二次开发,最关键的是它使用的协程,这个减少了线程的资源耗费,适合我这种只有低端笔记本的选手。 |
Locust安装
Locust官网地址,具体安装步骤可以参考。
我是搭建在一个阿里云服务器上,当然是需要python环境的,如果你的centos需要安装python环境可以参考我的另一篇帖子Centos安装Python3.8详细教程。
接下来使用pip或者pip3安装locust
pip3 install locust
我已经装好了,因此显示已经存在如下图。实际安装情况也不慢。除此之外,还还可以直接去git上面下载zip包,那种方式没有尝试过,有兴趣的朋友可以去试试。
使用命令查看安装是否成功,显示下图则表示已经安装成功。
locust -V
显示版本号2.6.0
测试脚本准备
本来想自己写个jar包扔上去做测试,一看机器上面没有装jdk,我又懒了。。。。后来从网上找了个demo,访问百度的接口。脚本里面启动命令加了访问地址,这里不做赘述,都是很简单的命令,请求直接使用request类库,帖子能看到这一步的不会没有用过吧!!!
import time
from locust import HttpUser, task, between, events
import urllib3
from locust.contrib.fasthttp import FastHttpLocust
urllib3.disable_warnings()
@events.test_start.add_listener
def on_test_start(**kwargs):
print('===测试最开始提示===')
@events.test_stop.add_listener
def on_test_stop(**kwargs):
print('===测试结束了提示===')
class TestTask(HttpUser):
wait_time = between(1, 5)
# host = 'https://www.baidu.com'
def on_start(self):
print('这是SETUP,每次实例化User前都会执行!')
@task(1)
def getBaidu(self):
self.client.get(url="/", verify=False)
def on_stop(self):
print('这是TEARDOWN,每次销毁User实例时都会执行!')
# class MyLocust(FastHttpLocust):
# task_set = TestTask
# min_wait = 1000
# max_wait = 60000
if __name__ == "__main__":
import os
os.system("locust -f locustDemo1.py --host=https://www.baidu.com")
将脚本上传至服务器。然后运行。
python3 locustDemo1.py
启动效果如下图,并且已经给出了ui页面的访问方式,机器http://ip:8089/即可。
到这里,Locust脚本已经跑了起来。页面也很直观,要求输入并发用户数量,每秒产生用户数量,host(刚才已经指定)。然后点击start就开始了压测。
Locust压测指标简介
进来默认展示的是压测报告
字段 | 解释 |
---|---|
Type | 请求类型 |
Name | 请求路径 |
requests | 当前请求的数量 |
fails | 当前请求失败的数量 |
Median | 中间值,单位毫秒,一般服务器响应时间低于该值,而另一半高于该值 |
Average | 所有请求的平均响应时间,毫秒 |
Min | 请求的最小的服务器响应时间,毫秒 |
Max | 请求的最大服务器响应时间,毫秒 |
Content Size | 单个请求的大小,单位字节 |
reqs/sec | 每秒钟请求的个数 |
切换至图表页面还能查看实时的折现图、包含请求趋势、响应时间、并发用户数等。
当然,还提供了查看失败请求的页面、下载请求统计数量的页面。这些对于程序员做一写简单的压力测试完全够用。爱了爱了。