[PPJ_18] Locust接口性能测试-初级案例实践

目录结构

一、性能测试工具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代码定义用户行为,并让数百万的并发用户聚集到您的系统中。

[PPJ_18] Locust接口性能测试-初级案例实践_第1张图片

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

[PPJ_18] Locust接口性能测试-初级案例实践_第2张图片

检则安装效果:

locust --help
[PPJ_18] Locust接口性能测试-初级案例实践_第3张图片
Locust安装 OK


三、接口性能测试-案例

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):每秒生成的用户数

[PPJ_18] Locust接口性能测试-初级案例实践_第4张图片

5.测试结果-查看

输入并发数、每秒生成的用户数,然后点击“Start swarming”开始执行压测

[PPJ_18] Locust接口性能测试-初级案例实践_第5张图片

执行过程中,随着并发用户数逐渐增多,向设定的目标并发数靠近,达到目标值后并发数则不再继续增加

[PPJ_18] Locust接口性能测试-初级案例实践_第6张图片
[PPJ_18] Locust接口性能测试-初级案例实践_第7张图片

性能则试参数:

性能参数 含义
Type 请求的类型,如:GET/POST
Name 请求的路径
request 当前请求的数量
fails 当前请求失败的数量
Median 中间值,一半的服务器响应时间低于该值,而另一半高于该值
Average 平均值,所有请求的平均响应时间
Min 请求的最小服务器响应时间
Max 请求的最大服务器响应的间
Content Size 单个请求的大小,单位字节
reqs/sec 每秒钟请求的个数,点击Charts菜单可以查看性能图表

查看图表:

[PPJ_18] Locust接口性能测试-初级案例实践_第8张图片
Total Requests per Second
[PPJ_18] Locust接口性能测试-初级案例实践_第9张图片
Response Times (ms)
[PPJ_18] Locust接口性能测试-初级案例实践_第10张图片
Number of Users

下载测试统计数据:

[PPJ_18] Locust接口性能测试-初级案例实践_第11张图片
[PPJ_18] Locust接口性能测试-初级案例实践_第12张图片
Request Statistics
Response Time Distribution



参考资料:
[1] Scalable user load testing tool written in Python: Locust
[2] Locust性能测试框架,从入门到精通
[3] Locust学习总结分享

你可能感兴趣的:([PPJ_18] Locust接口性能测试-初级案例实践)