前言
说起压测,我就用过Jmeter,而且仅是简单使用,好用性能强大,最近接触了一个python提供的压测框架Locust,翻译为蝗虫,蝗虫过之,寸草不生,哈哈哈,我感觉很贴切。
首先,我们分析一下市面上几种工具的特性。
\LoadRunnerJmeterLocust授权方式商业收费开源免费开源免费开发语言C/JavaJavaPython测试脚本形式C/JavaGUIPython并发机制进程/线程线程协程单机并发能力低低高分布式压力支持支持支持资源监控支持不支持不支持报告与分析完善简单图表简单图表支持二次开发不支持支持支持并发方式线程线程协程 我认为最适合程序员的当然是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_listenerdefon_test_start(**kwargs):print('===测试最开始提示===')@events.test_stop.add_listenerdefon_test_stop(**kwargs):print('===测试结束了提示===')classTestTask(HttpUser):
wait_time = between(1,5)# host = 'https://www.baidu.com'defon_start(self):print('这是SETUP,每次实例化User前都会执行!')@task(1)defgetBaidu(self):
self.client.get(url="/", verify=False)defon_stop(self):print('这是TEARDOWN,每次销毁User实例时都会执行!')# class MyLocust(FastHttpLocust):# task_set = TestTask# min_wait = 1000# max_wait = 60000if __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每秒钟请求的个数
切换至图表页面还能查看实时的折现图、包含请求趋势、响应时间、并发用户数等。
当然,还提供了查看失败请求的页面、下载请求统计数量的页面。这些对于程序员做一写简单的压力测试完全够用。爱了爱了。
版权归原作者 代码大师麦克劳瑞 所有, 如有侵权,请联系我们删除。