Locust 官方文档 1: What is Locust?

什么是 Locust(蝗虫)?

Locust 是一款易于使用的分布式用户负载测试工具。它旨在对 web 系统(或其他系统)进行负载测试,从而获取一个系统的并发处理能力。

这个 idea 源于在测试过程中,一群像蝗虫一样的用户攻击你的网站。

您可以使用 Python 代码定义每个用户的行为,并且可以通过 Web UI 实时监视所有虚拟用户的访问过程。和其他类似的负载工具一样,通过负载测试可以帮助你确定代码中的瓶颈。

Locust 完全基于事件(event-based),因此可以在一台计算机上支持数千个并发用户。与许多其他基于事件的应用程序相比,它不使用回调。相反,它通过gevent使用轻量级进程(协程)。

在 Locust 中每个虚拟用户实际上都在其自己的进程中运行(正确地说,是Greenlet)。这使您可以在Python中编写非常有表现力的场景。

gevent 是第三方库,通过 Greenlet 实现协程,其基本思想是:

当一个 Greenlet 遇到 IO 操作时,比如访问网络,就自动切换到其他的Greenlet,等到 IO 操作完成,再在适当的时候切换回来继续执行。由于 IO 操作非常耗时,经常使程序处于等待状态,有了 gevent 为我们自动切换协程,就保证总有 Greenlet 在运行,而不是等待 IO。

特性

使用 Python 编写用户测试场景

不需要笨拙的 UI (LR)或庞大的 XML(Jmeter),只需要像你平时写 Python 代码一样编写测试场景。Locust 基于协程而不是回调,因此你的代码类似于正常的 Python 代码,也就是说你编写测试场景时不用考虑额外的算法、语法等。

分布式 & 可扩展 - 支持数十万并发用户

Locust 支持分布在多台计算机上的运行负载测试。基于事件,即使一个 Locust 节点也可以在一个流程中生成成千上万的虚拟用户。

其背后的部分原因是,即使你模拟了这么多用户,也并非所有人都在积极使用你的系统。每个虚拟用户并不是无时无刻都在访问系统,通常会有很多的空闲(等待网络连接,等待 IO)。RPS != users,实际测试过程中,每秒请求数并不等于在线用户数。

基于 Web 的 UI

Locust 具有简洁的 HTML + JS 用户界面,可实时显示相关的测试详细信息。而且由于用户界面是基于 Web 的,因此它是跨平台的,并且易于扩展。

可以测试任意的系统

虽然 Locust 是面向 Web 的,但它也可以用于测试几乎所有系统。只需为您要测试的目标编写一个客户端(client),然后使用 locusts 发起测试!

可扩展的

Locust 核心代码很少,很容易扩展,我们打算保持这种状态。事件 I/O 和协程的所有繁重工作都委托给 gevent。我们创建Locust的原因是为了替代常见性能测试工具的脆弱性。

背景

之所以创建 Locust,是因为我们受够了现有的解决方案。

他们都没有解决正确的问题,对我(作者)来说,他们没有抓住要点。我们已经尝试过 Apache JMeter 和 Tsung,两种工具都可以使用。我们在工作中多次使用 JMeter 进行性能基准测试。

JMeter 具备 UI 界面,您可能会认为这是一件好事,但是您很快就会意识到,通过一些组件的拖拽实现编程是一种非常痛苦的事情,为了实现某些简单的逻辑都需要复杂的组合;其次,JMeter 是线程绑定的,这意味着对于每个要模拟的用户,您都需要一个单独的线程。不用说,在一台计算机上对成千上万的用户进行基准测试是不可行的。

另一方面,Tsung 没有用 Erlang 编写的线程问题。它可以利用 BEAM 自身提供的轻量级工艺,并且可以愉快地扩展规模。但是在定义测试场景时,Tsung 和 JMeter 一样有限。它提供了基于 XML 的 DSL 来定义用户在测试时的行为方式。我想您可以想象“编码”这一点的恐怖(使用 DSL 来编码)。完成后显示各种图形或报告要求您对测试生成的日志文件进行后处理。只有这样,您才能了解测试的进行方式。

无论如何,我们在创建 Locust 时都试图解决这些问题。希望以上痛点都不存在。

我猜你可能会说我们真的只是在这里挠痒痒。我们希望其他人会发现它和我们一样有用。

作者:

Jonatan Heyman (@jonatanheyman on Twitter)

Carl Byström (@cgbystrom on Twitter)

Joakim Hamrén (@Jahaaja on Twitter)

Hugo Heyman (@hugoheyman on Twitter)

License

Open source licensed under the MIT license (see LICENSE file for details).

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章