Locust 负载测试术语与 Apache Bench
Locust load testing terminology vs Apache Bench
我正在使用 Locust 对我的网站进行负载测试,我很好奇它与 Apache Bench 在术语方面的区别。
使用 Apache Bench,您可以指定请求数 (-n
) 和多个请求数,或并发数 (-c
)。
Locust 使用的术语略有不同。它有 "Users to simulate" 和 "Hatch rate (users spawned/second)".
据我了解,"Users to simulate" 相当于 Apache Bench 中的请求数。 -c
和 "Hatch rate" 也是如此,其中 "Hatch rate" 本质上是将发出多少个并发请求?
例如,这两者本质上是等效的还是接近等效的?
ab -n 1000 -c 100 url
和拥有 1000 个用户且孵化率为 100/秒的 Locust?
注意:我意识到这两个工具具有非常不同的功能,而且 Locust 比 Apache Bench 灵活得多。我真的很想了解术语差异。
不完全一样,因为使用 Locust,您可以为每个用户指定多个请求,以完成整个场景。
因此,虽然用户的整个场景可能需要 10 秒才能完成,但如果以 100/秒的速度孵化,最终将有大约 1000 个并发请求,因为在第一秒孵化的用户不会完成他们的最终请求请求直到 10 秒后,此时已经孵化出 900 多个用户并且也在发出请求。
另一方面,如果您只为每个用户执行一个请求,那么它与 Apache Benchmark 相当
调查 Locust issue #646 - Allow a fixed RPS rate 当前 Locust 不支持根据 requests per unit of time
定义所需的吞吐量。
如果您需要更大的灵活性,可以考虑使用 Apache JMeter which has Constant Throughput Timer out of the box and Throughput Shaping Timer 插件。
Apache Bench 参数和 Locust 参数没有可比性。模拟 Locust 用户的 Locust 数量如何影响有效 requests/second 在很大程度上取决于您的 Locust 和 TaskSet class.
的 python 代码
使用 Locust 的目的是用代码定义用户行为,然后您可以模拟大量这些用户。
你可以有一个 Locust class 不发出 任何 请求(虽然那会有点毫无意义),这将导致获得一个有效的RPS 为 0,无论您选择模拟多少用户。同样,您可以编写一个 Locust class,它只有一个循环,在该循环中它不断发出 HTTP 请求并且没有等待时间,并且在 的情况下,模拟的用户数量将对应于Apache Bench 的 -c
参数。
要将 Apache Benchmark 与 Locust 进行比较,只需简单地测试 1 个请求,设置相同的时间(-t 5),相同的用户(-c 50),并在 Locust 中尽快孵化(-r 50) .
-n表示整个请求数,但在locust中没有这个参数。所以我们需要一个大数(100000)不能在时间限制(-t 5)内完成:
ab -n 100000 -c 50 -t 5 url
locust -c 50 -r 50 -t 5 url xxx
在我的例子中,我发现 ab 比纯 python 写的 locust 快 50%。
我正在使用 Locust 对我的网站进行负载测试,我很好奇它与 Apache Bench 在术语方面的区别。
使用 Apache Bench,您可以指定请求数 (-n
) 和多个请求数,或并发数 (-c
)。
Locust 使用的术语略有不同。它有 "Users to simulate" 和 "Hatch rate (users spawned/second)".
据我了解,"Users to simulate" 相当于 Apache Bench 中的请求数。 -c
和 "Hatch rate" 也是如此,其中 "Hatch rate" 本质上是将发出多少个并发请求?
例如,这两者本质上是等效的还是接近等效的?
ab -n 1000 -c 100 url
和拥有 1000 个用户且孵化率为 100/秒的 Locust?
注意:我意识到这两个工具具有非常不同的功能,而且 Locust 比 Apache Bench 灵活得多。我真的很想了解术语差异。
不完全一样,因为使用 Locust,您可以为每个用户指定多个请求,以完成整个场景。
因此,虽然用户的整个场景可能需要 10 秒才能完成,但如果以 100/秒的速度孵化,最终将有大约 1000 个并发请求,因为在第一秒孵化的用户不会完成他们的最终请求请求直到 10 秒后,此时已经孵化出 900 多个用户并且也在发出请求。
另一方面,如果您只为每个用户执行一个请求,那么它与 Apache Benchmark 相当
调查 Locust issue #646 - Allow a fixed RPS rate 当前 Locust 不支持根据 requests per unit of time
定义所需的吞吐量。
如果您需要更大的灵活性,可以考虑使用 Apache JMeter which has Constant Throughput Timer out of the box and Throughput Shaping Timer 插件。
Apache Bench 参数和 Locust 参数没有可比性。模拟 Locust 用户的 Locust 数量如何影响有效 requests/second 在很大程度上取决于您的 Locust 和 TaskSet class.
的 python 代码使用 Locust 的目的是用代码定义用户行为,然后您可以模拟大量这些用户。
你可以有一个 Locust class 不发出 任何 请求(虽然那会有点毫无意义),这将导致获得一个有效的RPS 为 0,无论您选择模拟多少用户。同样,您可以编写一个 Locust class,它只有一个循环,在该循环中它不断发出 HTTP 请求并且没有等待时间,并且在 的情况下,模拟的用户数量将对应于Apache Bench 的 -c
参数。
要将 Apache Benchmark 与 Locust 进行比较,只需简单地测试 1 个请求,设置相同的时间(-t 5),相同的用户(-c 50),并在 Locust 中尽快孵化(-r 50) .
-n表示整个请求数,但在locust中没有这个参数。所以我们需要一个大数(100000)不能在时间限制(-t 5)内完成:
ab -n 100000 -c 50 -t 5 url
locust -c 50 -r 50 -t 5 url xxx
在我的例子中,我发现 ab 比纯 python 写的 locust 快 50%。