关于ide:16-万-Star微软谷歌都在用-Python-性能测试工具

31次阅读

共计 2603 个字符,预计需要花费 7 分钟才能阅读完成。

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

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

链接:https://github.com/locustio/l…

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

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

如此看来,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 性能。

疾速上手

应用 Locust 个别依照以下步骤进行:

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

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

import time  
from locust import HttpUser, task, between  
  
class QuickstartUser(HttpUser):  
    wait_time = between(1, 2.5)  
  
    @task  
    def hello_world(self):  
        self.client.get("/hello")  
        self.client.get("/world")  
  
    @task(3)  
    def view_items(self):  
        for item_id in range(10):  
            self.client.get(f"/item?id={item_id}", name="/item")  
            time.sleep(1)  
  
    def on_start(self):  
        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…

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

和性能指标走势图:

脚本解析

示例脚本解析如下:

# Locust 用户脚本就是 Python 模块  
import time  
from locust import HttpUser, task, between  
  
# 类继承自 HttpUser  
class QuickstartUser(HttpUser):  
    # 每个模仿用户期待 1~2.5 秒  
    wait_time = between(1, 2.5)  
  
    # 被 @task 装璜的才会并发执行  
    @task  
    def hello_world(self):  
        # client 属性是 HttpSession 实例,用来发送 HTTP 申请  
        self.client.get("/hello")  
        self.client.get("/world")  
  
    # 每个类只会有一个 task 被选中执行  
    # 3 代表 weight 权重  
    # 权重越大越容易被选中执行  
    # view_items 比 hello_wolrd 多 3 倍概率被选中执行  
    @task(3)  
    def view_items(self):  
        for item_id in range(10):  
            # name 参数作用是把统计后果按同一名称进行分组  
            # 这里避免 URL 参数不同会产生 10 个不同记录不便于察看  
            # 把 10 个汇总成 1 个 "/item" 记录  
            self.client.get(f"/item?id={item_id}", name="/item")  
            time.sleep(1)  
  
    # 每个模仿用户开始运行时都会执行  
    def on_start(self):  
        self.client.post("/login", json={"username":"foo", "password":"bar"})  

小结

本文先理解了 Locust 的背景和生态,它是值得学习的,对于 Python 技术栈来说更加如此。接着介绍了应用 pip 命令装置 Locust,其中发现顺带装置了 flask,Locust 的 Web 性能是 flask 提供的

而后给出了一段示例代码,依照步骤上手 Locust。最初对示例代码进行了解析,浅尝辄止。locustfile 实际上该怎么写呢?

参考资料:

https://locust.io/

https://docs.locust.io/en/sta…

开源前哨 日常分享热门、乏味和实用的开源我的项目。参加保护 10 万 + Star 的开源技术资源库,包含:Python、Java、C/C++、Go、JS、CSS、Node.js、PHP、.NET 等。

正文完
 0