美文网首页
[PPJ_18] Locust接口性能测试-初级案例实践

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

作者: Fighting_001 | 来源:发表于2018-11-19 21:27 被阅读202次

    目录结构

    一、性能测试工具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
    
    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(n) 装饰对应方法为一个事务,括号中的数字n表示请求数所占的份额,本例为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菜单可以查看性能图表

    查看图表:

    Total Requests per Second Response Times (ms) Number of Users

    下载测试统计数据:

    Request Statistics Response Time Distribution

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

    相关文章

      网友评论

          本文标题:[PPJ_18] Locust接口性能测试-初级案例实践

          本文链接:https://www.haomeiwen.com/subject/waqifqtx.html