蝗虫负载测试术语与Apache Bench

时间:2018-08-15 11:55:25

标签: performance load-testing apachebench locust

我正在使用Locust对我的一个站点进行负载测试,我很好奇它和Apache Bench在术语方面的区别。

使用Apache Bench,您可以指定请求数(-n)和多个请求数或并发(-c)。

蝗虫使用略有不同的术语。它具有“要模拟的用户”和“孵化率(每秒产生的用户)”。

据我了解,“要模拟的用户”将等同于Apache Bench中的请求数量。 -c和“孵化率”也是如此,其中“孵化率”本质上是将要发出多少并发请求?

例如,这两个是本质上还是接近等同的?

ab -n 1000 -c 100 url和具有1000位用户的蝗虫,孵化率为100 /秒?

注意:我意识到这两个工具具有非常不同的功能,并且Locust比Apache Bench灵活得多。我真的是想了解术语上的差异。

4 个答案:

答案 0 :(得分:2)

这并不完全相同,因为使用蝗虫,您可以为每个用户指定多个请求,以播放整个场景。

因此,尽管整个用户场景可能需要10秒才能完成,但是如果以100 /秒的速度孵化,最终将导致大约1000个并发请求,因为在第一秒孵化的用户直到发出最终请求为止10秒钟后,又孵出了900位用户,并且还在发出请求。

另一方面,如果您仅对每个用户执行一个请求,那么它可以与Apache Benchmark相提并论

答案 1 :(得分:2)

Apache Bench参数和Locust参数没有真正的可比性。模拟蝗虫用户的蝗虫数量如何影响有效请求/秒在很大程度上取决于Locust和TaskSet类的python代码。

使用Locust的目的是使用代码定义用户行为,然后您可以模拟大量这些用户。

您可能有一个Locust类,它不发出任何请求(尽管这毫无意义),无论获得多少RPS,其有效RPS均为0您选择模拟的用户。同样,您可以编写一个Locust类,该类仅具有一个循环,在该循环中它不断发出HTTP请求,而没有等待时间,在 情况下,模拟的用户数将与-c参数相对应的Apache Bench。

答案 2 :(得分:1)

目前调查Locust issue #646 - Allow a fixed RPS rate的蝗虫不支持根据function createColumnDefinition<TField extends keyof TRow>( field: TField, columnDef: Partial<IColumnDefinition<TRow, TField>>): IColumnDefinition<TRow, TField> { return { ...columnDef, field, }; } const birthDateColumnDefinition = createColumnDefinition<User>('birthDate', { formatter: (value, row) => new Date(value).toDateString(), }); 定义所需的吞吐量。

如果需要更大的灵活性,可以考虑使用Apache JMeterConstant Throughput Timer插件和Throughput Shaping Timer插件。

答案 3 :(得分:0)

要将Apache Benchmark与Locust进行比较,只需仅测试1个请求,设置相同的时间(-t 5),相同的用户(-c 50),并尽快在locust(-r 50)中孵化。 / p>

-n表示整个请求号,但蝗虫中没有这样的参数。因此,我们需要大量(100000)不能在时间限制(-t 5)中完成的操作:

  

ab -n 100000 -c 50 -t 5网址

     

蝗虫-c 50 -r 50 -t 5网址xxx

就我而言,我发现ab比用纯python编写的蝗虫快50%。