目录结构
一、性能测试工具PK
二、Locust工具下载 & 安装
三、接口性能测试-案例
1.测试服务器
2.测试场景
3.脚本实现
4.执行测试
5.测试结果-查看
一、性能测试工具PK
常用的性能测试,如:LoadRunner、JMeter。LR和JMeter一类采用进程和线程的测试工具,很难在单机上模拟出较高的并发压力,而Locust的并发机制摒弃了进程和线程,采用协程(gevent)机制,可在单机上模拟较高量的用户,支持多机器联合测试。协程避免了系统级资源调度,因此可以大幅提高单机的并发能力。
- LoadRunner:业界有名的商业化性能测试工具,功能非常强大。该工具的体积比较大、价格昂贵、操作和分析过程也比较复杂,若硬件配置和其他资源有限的情况下,一般不推荐使用该工具进行性能测试
- JMeter:非常有名的开源性能测试工具,功能也很完善,基于Java环境运行
- Locust:同是开源的性能测试工具,基于Python。简洁、轻量、高效,支持分布式测试、可扩展、支持成千上万并发用户
Locust
An open source load testing tool. Define user behaviour with Python code, and swarm your system with millions of simultaneous users.
一款开源的负载测试工具,使用Python代码定义用户行为,并让数百万的并发用户聚集到您的系统中。
Locust完全基于Python编程语言,以纯Python描述测试脚本,且HTTP请求完全基于Requests库。除HTTP/HTTPS协议之外,Locust还可测试其他协议的系统,只需采用Python调用对应的库进行请求描述即可。
二、Locust工具下载 & 安装
官网地址-传送门:https://www.locust.io
Locust官方文档:https://docs.locust.io/en/latest/installation.html
使用pip命令安装Locust:
pip install locustio
本系统中同时安装有Python2和Python3,本次以Python3的pip工具安装Locust,命令为:pip3 install locustio
检则安装效果:
locust --help
三、接口性能测试-案例
1.测试服务器
被测接口为Restful风格的接口,其服务环境搭建可参看前文:
[1] Django-数据库配置、数据序列化、视图创建、URL路由配置、API编辑操作
[2] Django接入Swagger,生成Swagger接口文档-操作解析
2.测试场景
被测接口:
URL1 = http://127.0.8.1:8000/users/
URL2 = http://127.0.8.1:8080/groups/
对以上2个接口进行性能测试,实现接口负载场景:
1)每秒生成2个用户,总共生成30个用户
2)负载测试3min,查看接口的平均响应时间
3.脚本实现
restful_api_locust.py
from locust import HttpLocust,TaskSet,task
class UserBehavior(TaskSet):
@task(2)
def test_users(self):
self.client.get("/users/",auth=('admin','admin123'))
@task(1)
def test_groups(self):
self.client.get("/groups/",auth=('admin','admin123'))
class WebsiteUser(HttpLocust):
task_set = UserBehavior
min_wait = 3000
max_wait = 6000
PS:以上脚本中没有出现被测接口的主机Host,可在WebsiteUser类中定义该变量,也可在执行Locust命令时添加(本次通过Locust命令添加)
- UserBehavior类:通过继承TaskSet类,用于描述用户行为
函数项 | 表征含义 |
---|---|
@task() | 装饰对应方法为一个事务,括号中的数字表示请求数所占的份额,本例为2:1 若未作注明,则默认为1:1 |
test_users() | 该方法表示一个用户行为,本例为请求user接口 |
test_groups() | 该方法表示请求group接口 |
client.get() | 用于指定请求的路径 |
- WebsiteUser类:用于设置性能测试
函数项 | 表征含义 |
---|---|
task_set | 指向一个定义的用户行为类 |
min_wait | 执行事务之间用户等待时间的下限(单位:ms) |
max_wait | 执行事务之间用户等待时间的上限(单位:ms) |
4.执行测试
操作命令:
locust -f F:\Py_Script\api_testing\Locust\restful_api_locust.py --host=http://127.0.0.1:8000
-f {LOCUSTFILE}
:LOCUSTFILE指定locust测试脚本的绝对路径
--host={PORT}
: PORT指定被测接口服务的主机
在命令行执行以上命令后,可查看到Locust测试服务所监听的端口号为8089
在浏览器访问 http://localhost:8089/ 即可打开Locust的Web端测试界面,如下:
Number of users to simulate:并发用户数
Hatch rate (users spawned/second):每秒生成的用户数
5.测试结果-查看
输入并发数、每秒生成的用户数,然后点击“Start swarming”开始执行压测
执行过程中,随着并发用户数逐渐增多,向设定的目标并发数靠近,达到目标值后并发数则不再继续增加
性能则试参数:
性能参数 | 含义 |
---|---|
Type | 请求的类型,如:GET/POST |
Name | 请求的路径 |
request | 当前请求的数量 |
fails | 当前请求失败的数量 |
Median | 中间值,一半的服务器响应时间低于该值,而另一半高于该值 |
Average | 平均值,所有请求的平均响应时间 |
Min | 请求的最小服务器响应时间 |
Max | 请求的最大服务器响应的间 |
Content Size | 单个请求的大小,单位字节 |
reqs/sec | 每秒钟请求的个数,点击Charts菜单可以查看性能图表 |
查看图表:
下载测试统计数据:
参考资料:
[1] Scalable user load testing tool written in Python: Locust
[2] Locust性能测试框架,从入门到精通
[3] Locust学习总结分享