• Python技术栈性能测试工具Locust入门


    Locust是一款Python技术栈的开源的性能测试工具。Locust直译为蝗虫,寓意着它能产生蝗虫般成千上万的并发用户:

    image-20210501150513778

    Locust并不小众,从它Github的Star数量就可见一斑:

    image-20210501150222526

    截止文章写作时,一共15951Star。

    Locust生态良好,它已在多家外企(包括世界500强)投入使用:

    image-20210501150925439

    如此看来,Locust是非常值得学习和掌握的一款工具。

    Python的魔力在于化繁为简,基于Python的Locust也能给仍然困惑于性能测试的我们带来启发。

    Locust特点

    • 以纯Python方式编写用户脚本,提供极大自由度。
    • 用户脚本可以串行方式编写,Locust会通过轻量级进程/协程产生并发,无需自己做并发编程。
    • 并发量大,借助于gevent库,Locust能产生成千上万并发请求。
    • 开销小,Locust用户运行时开销很小。
    • 良好的Web UI对性能结果实时监测。
    • 能测任何系统任何协议,只需要写个client即可。
    • 开放REST API,尽情发挥。

    安装Locust

    需要Python版本3.6及以上。

    执行pip命令:

    $ pip install locust
    

    验证安装成功:

    $ locust -V
    

    安装时会一并安装依赖库:

    Installing collected packages: Werkzeug, pywin32, zope.event, greenlet, gevent, geventhttpclient, itsdangerous, flask, Flask-BasicAuth, ConfigArgParse, pyzmq, psutil, locust

    能看出来flask为Locust提供了Web功能。

    1. 现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
    2. 如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
    3. 可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
    4. 分享他们的经验,还会分享很多直播讲座和技术沙龙
    5. 可以免费学习!划重点!开源的!!!
    6. qq群号:110685036

    快速上手

    使用Locust一般按照以下步骤进行:

    1. 编写Python用户脚本。
    2. 使用locust命令执行性能测试。
    3. (可选)通过Web界面监测结果。

    示例代码如下,新建locustfile.py文件:

    1. import time
    2. from locust import HttpUser, task, between
    3. class QuickstartUser(HttpUser):
    4. wait_time = between(1, 2.5)
    5. @task
    6. def hello_world(self):
    7. self.client.get("/hello")
    8. self.client.get("/world")
    9. @task(3)
    10. def view_items(self):
    11. for item_id in range(10):
    12. self.client.get(f"/item?id={item_id}", name="/item")
    13. time.sleep(1)
    14. def on_start(self):
    15. self.client.post("/login", json={"username":"foo", "password":"bar"})

    路径切换到locustfile.py文件所在目录,执行命令:

    $ locust
    

    也可以通过-f指定某个目录文件:

    $ locust -f locust_files/my_locust_file.py
    

    运行后,打开http://127.0.0.1:8089看到Web界面:

    _images/webui-splash-screenshot.png

    填写信息后,就能开始压测了。Web界面提供了结果统计数据:

    _images/webui-running-statistics.png

    和性能指标走势图:

    _images/webui-running-charts.png

    脚本解析

    示例脚本解析如下:

    1. # Locust用户脚本就是Python模块
    2. import time
    3. from locust import HttpUser, task, between
    4. # 类继承自HttpUser
    5. class QuickstartUser(HttpUser):
    6. # 每个模拟用户等待1~2.5
    7. wait_time = between(1, 2.5)
    8. # 被@task装饰的才会并发执行
    9. @task
    10. def hello_world(self):
    11. # client属性是HttpSession实例,用来发送HTTP请求
    12. self.client.get("/hello")
    13. self.client.get("/world")
    14. # 每个类只会有一个task被选中执行
    15. # 3代表weight权重
    16. # 权重越大越容易被选中执行
    17. # view_items比hello_wolrd多3倍概率被选中执行
    18. @task(3)
    19. def view_items(self):
    20. for item_id in range(10):
    21. # name参数作用是把统计结果按同一名称进行分组
    22. # 这里防止URL参数不同会产生10个不同记录不便于观察
    23. # 把10个汇总成1"/item"记录
    24. self.client.get(f"/item?id={item_id}", name="/item")
    25. time.sleep(1)
    26. # 每个模拟用户开始运行时都会执行
    27. def on_start(self):
    28. self.client.post("/login", json={"username":"foo", "password":"bar"})

    小结

    本文先了解了Locust的背景和生态,它是值得学习的,对于Python技术栈来说更加如此。接着介绍了使用pip命令安装Locust,其中发现顺带安装了flask,Locust的Web功能是flask提供的。然后给出了一段示例代码,按照步骤上手Locust。最后对示例代码进行了解析,浅尝辄止。locustfile实际上该怎么写呢?

    最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!

    软件测试面试文档

    我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
     

    在这里插入图片描述

  • 相关阅读:
    K8s Pod 进阶
    两个链表的第一个公共节点_链表中环的入口(剑指offer)
    前端构建工具vite与webpack详解
    面向对象视角下,理解Docker 镜像容器和仓库
    如何找回回收站清空的文件?三种方法帮助你解决问题
    Ubuntu 和 Windows 文件互传
    RBF神经网络学习及实践
    随想:卖包子送了杯豆浆
    无主复制系统(2)-读写quorum
    Rust Wasm 图片转 ASCII 艺术
  • 原文地址:https://blog.csdn.net/m0_58026506/article/details/134022088