本帖最后由 太鼓达人 于 2019-3-11 14:59 编辑
前言 做为一个压测工具(库),[locust]( http://locust.io/) 其实解决这么一个问题:AB 之类压测工具不能编写复杂的因果逻辑,而现实场景中,待压的服务往往是有一套完整执行流程的,比如 APP 要访问一个 API,是需要先鉴权(验明不是非 APP 访问),再登录换 Token,然后才是 API 调用…… 这一切,在 locust 中都很容易实现,本质上,应用 locust 做压测,就是在写 Python 程序,只是它集成了一套不错的 UI,外加并发的benchmark功能。 至于写个压测为什么要用Python,是因为:这玩意心智负担低,你谷歌SO复制粘贴一把梭,直接上手就能写,大脑无需切换context,调试成本也低,没有比这语言更棒的了。
一、locust介绍 Locust是一个容易使用、分布式的压力测试工具。它是用于网站压力测试(或其它系统)并找出多少用户一个系统可以承载。 在测试过程中,策略就是一个Locust的蠕虫将会攻击你的网站。每一个locust的行为(或你使用的测试用户)是你自己定义的,并且蠕虫进程从一个网页视图中被实时监测。这样会帮助你来实现测试,在真实用户使用前定义系统的瓶颈。 Locust 的使用很简单也很方便,它提供了一个 python lib、一个命令行工具和一个 web UI,用户通过自己写 code 来定义测试用例,通过运行 locust cli 来执行测试,通过 web 界面查看测试结果。 对于程序员(特别是 Python 程序员)来讲,Locust另外一个优势就是,你不用去学不同工具为了定义测试用例而设计的不同的 DSL,直接写 code,通俗易懂。
二、locust骨架一个 locust 压测程序的最简配置就是一个 .py 程序文件,按照约定,我们给它命名为 locustfile.py,它大概由这么两部分组成: 当然,locustfile.py 还有很多实用的配置,如 父子任务/等待时长/权重 等设置
三、loucst的安装和使用安装 使用 pip install locustio安装 locustio。 loucst安装
在osx 中,需要手动安装libevent, brew install libevent. 使用 使用locust -h查看帮助,我们编写一个测试,需要编写一个locustfile.py文件,如下面的简单实例: 随机执行 随机执行代码
代码分析: 定义了一个Locust任务,里面定义了两个类,一个UserBehavior类,用于定义测试业务,一个WebsiteUser类,用于定义模拟用户,我们定义一个模拟用户在执行任务之间应该等待多长时间 顺序执行:用@task 构造器 顺序执行
四、启动运行locust1.输入如下指令 进入cmd 进入到项目所在的目录,执行以下命令,然后按回车键 locust -f d:/work/test/locustio.py --host=https://www.baidu.com 启动locust
locust的web界面
locust的web界面分析: 第一行Number of users to simulate是模拟用户的数量(虚拟用户数) 第二行Hatch rate (users spawned/second)表示产生模拟用户的速度 填写完成后点击“Start swarming”即可开始测试
五、分析测试结果
locust性能参数界面
性能测试参数 Type: 请求的类型,例如GET/POST。 request:当前请求的数量。 fails:当前请求失败的数量。 Median:中间值,单位毫秒,一半的服务器响应时间低于该值,而另一半高于该值。 Average:平均值,单位毫秒,所有请求的平均响应时间。 Min:请求的最小服务器响应时间,单位毫秒。 Max:请求的最大服务器响应时间,单位毫秒。 Content Size:单个请求的大小,单位字节。 reqs/sec:是每秒钟请求的个数。 在这个过程中,可以随时停止测试,调整参数,当然,也可以在测试数据收集完成后,导出测试结果: 测试结果
图形界面显示 图形界面显示
停掉python命令后,也可以看到一些测试数据: 测试数据
六,命令行执行(取消web显示界面)命令行执行 locust-f test1.py --host=https://www.baidu.com --no-web -c 10 -r 2 -t 1m 启动参数: –no-web 表示不使用Web界面运行测试。 -c 设置虚拟用户并发数。 -r 设置每秒启动虚拟用户数执行的次数。 -t 设置设置运行时间。 Locust也可以做分布式执行,需要装一个pyzmq。 性能测试首先而在于分析性能测试的需求,设计性能测试场景,尽可能的模拟真实环境中的压力(正常和异常情况)。然后结果是考察并发用户数、响应时间、tps这类指标。
|