• 【Locust】模拟多用户并发与实战


    纯python脚本模拟多用户并发的劣势

    1.据Threading其实是假并发
    2.线程开销大,可能因本机cpu限制无法拉起大量线程

    什么是locust

    locust是一个简单易用的分布式负载测试工具,主要用来对网站进行负载压力测试。locust使用python语言开发,测试资源消耗远远小于java语言开发的jmeter。且其支持分布式部署测试,能够轻松模拟百万级用户并发测试。

    locust优缺点

    优点:
    1.不同与wrk和jmeter使用线程数提高并发量,locust借助于协程实现对用户的模拟,相同物理资源(机器cpu、内存等)配置下locust能支持的并发用户数相比jmeter可以提升一个数量级
    2.相比wrk对复杂场景测试的捉襟见肘和jmeter需要界面点击录制复杂场景的麻烦,locust只需用户使用python编写用户场景完成测试
    3.不同与jmeter复杂的用户使用界面,locust的界面干净整洁,可以实时显示测试的相关细节(如发送请求数、失败数和当前发送请求速度等)
    4.locust虽然是面向web应用测试的,但是它可以用来测试几乎所有系统。给locust编写一个客户端,可以满足你所有的测试要求
    缺点:
    1.同wrk一样,locust测试结果输出不如jmeter的测试结果展示类型多

    locust的安装

    使用pip,具体的镜像加速下载可参考CSDN
    下载成功后会显示打印version

    locust脚本的编写:以多用户并发登录-购买-查询订单为例

    具体场景和预期结果如下:
    场景:100个用户,不使用特权优惠下单,创建订单
    预期结果:都能创建订单成功,总金额正确

    step1:提前配置测试用户和商品的信息
    在这里插入图片描述

    这里之所以通过Queue阻塞队列的原因是,若不加以限制,locust会无限制地调用定义好的任务;因此,如果我们不希望无限次调用接口,我们可以使用Queue的get方法获取用户信息,当队列为空会抛出异常,进而直接退出task

    step2:编写用户行为类(httpUser)
    在这里插入图片描述

    on_start会在执行所有任务前进行初始化操作
    on_stop会在执行完所有任务(或强制退出)后进行清理操作

    step3:具体并发逻辑的实现

    1.标上@task,以及备用的header
    在这里插入图片描述

    2.在有限范围内获取用户信息:
    在这里插入图片描述

    中间使用log进行日志打印
    在这里插入图片描述

    3.调用登录接口,并配置token给header:

    通过assert断言判断response是否正常

    拉起locust服务(配置参数与查看报告)

    1.首先打开cmd,去到脚本对应的目录下,使用如下命令可执行相关脚本(并打印日志)
    locust -f scene1.py --logfile logs/scene1.txt
    注意-f传的是脚本的名字,然后logfile传的是日志的位置

    2.打开http://localhost:8089/并配置参数,共有三个参数,由上到下分别是:
    需要拉起的协程数,每秒生成的协程数,Host地址

    3.开始执行,执行一段时间后停止,可以看到相关数据,如:

    这里我们以20用户并发为例
    可以看到登录-下单-查询接口都各被调用了20次
    在这里插入图片描述

    4.下载report
    report当中会有更详细的数据,如RPS图,RT图,User图,异常信息记录等:

    对于代码中的assert断言,如果不满足就会在exception中抛出从而方便抓取
    另一方面我们也可以结合日志查看分析相关的异常

    总结

    locust除了上述的复杂流程的接口测试
    还可使用于多个无关联接口的随机测试(这里就无需限制调用次数)
    在这里插入图片描述

    通过查看日志可以发现,它的并发时间差是很小的
    不像threading需要执行很长时间(实质上没有很好地模拟并发)

  • 相关阅读:
    JVM常用性能分析工具
    分库分表与sharding-jdbc
    目前期货开户手续费比较透明
    typora+github+picgo搭建图床401
    表白墙程序
    vivado中的常用AXI接口IP核
    fyne - 谁说用Go不能开发应用界面
    RabbitMQ队列持久化的重要性与意义
    pcl--第十节 点云曲面重建
    微信小程序WXS
  • 原文地址:https://blog.csdn.net/weixin_40986490/article/details/126949726