Locust是一个易于使用、可编写脚本和可扩展的性能测试工具。你在常规的Python代码中定义你的用户的行为,而不是受制于一个UI或领域特定的语言,只是假装是真正的代码。这使得Locust具有无限的可扩展性,对开发者非常友好。
如果你想让你的用户进行循环,执行一些条件行为或做一些计算,你只需使用Python提供的常规编程结构。Locust在它自己的greenlet(一个轻量级的进程/程序)中运行每个用户。这使你能够像正常的(阻塞的)Python代码一样编写你的测试,而不是使用回调或其他机制。因为你的场景 “只是Python”,你可以使用你的常规IDE,并将你的测试作为常规代码进行版本控制(相对于其他一些使用XML或二进制格式的工具)。
from locust import HttpUser, task, between
class QuickstartUser(HttpUser):
wait_time = between(1, 2)
def on_start(self):
self.client.post("/login", json={"username":"foo", "password":"bar"})
@task
def hello_world(self):
self.client.get("/hello")
self.client.get("/world")
@task(3)
def view_item(self):
for item_id in range(10):
self.client.get(f"/item?id={item_id}", name="/item")
Locust使运行分布在多台机器上的负载测试变得容易。它是基于事件的(使用gevent),这使得一个进程可以处理成千上万的并发用户。虽然可能有其他工具能够在给定的硬件上每秒做更多的请求,但每个Locust用户的低开销使它非常适用于测试高并发的工作负载。
Locust有一个用户友好的网络界面,实时显示你的测试进度。你甚至可以在测试运行时改变负载。它也可以在没有用户界面的情况下运行,使其易于用于CI/CD测试。
尽管Locust主要工作在网站/服务上,但它几乎可以用来测试任何系统或协议。只要为你想测试的东西写一个客户端,或者探索一些由社区创建的客户端。
Locust的代码库有意保持小规模,并不解决所有开箱即用的问题。相反,我们试图让它容易适应你可能遇到的任何情况,使用常规的Python代码。没有什么可以阻止你:
将实时报告数据发送到TimescaleDB并在Grafana中进行可视化处理
包裹调用以处理你的REST API的特殊性
使用一个完全自定义的负载形状/配置文件
…
如果想要了解够多,甚至完全掌握,不妨来看看下面教程,因为我敢笃定你终究用到那一天。
从零开始,打造高效可靠的Locust性能测试
从零开始,打造高效可靠的Locust性能测试
书到用书方恨少,加油吧,兄嘚~~~~