使用每秒预定义请求数的Locust

编程入门 行业动态 更新时间:2024-10-26 22:30:35
本文介绍了使用每秒预定义请求数的Locust的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

查看负载测试工具时,我发现了Locust,并立即发现它作为一个使用Python的人很有吸引力,但我不能完全确定我是否能用它实现以下场景...

我的任务是使用真实流量对REST API进行负载测试。我已经从生产Apache日志中提取了相当于5分钟的GET流量,其想法是使用负载测试工具以相同的时间分布(在每秒1到36个请求之间)运行这些相同的请求。为此,我构建了一个Python字典,其中相对时间戳(xx:xx,即mins:secs)为键,值为在该秒请求的URL路径列表。

我们将某个时间点的生产数据库转储恢复到我们的测试环境中,请求来自转储创建后的下一个五分钟。在两次测试运行之间,我更改了rest API连接到数据库的方式的参数,因此测试运行需要尽可能相同,以使指标具有可比性。

我已经查看了Locust文档中的自定义负载形状,它们似乎可能起作用,但我不敢肯定。自定义tick方法实现可以做到这一点吗:

在0秒时,发出一组4个请求。 在%1秒内,发出一组%2个请求。 在%2秒内,发出一组12个请求。 随着时间的推移,每秒都会发生一组预定义的请求... 在4分59秒内,发出一组27个请求。 在5分钟内提出一组14个请求。

这个地图将如何映射到蝗虫的能力?产生多少用户并不重要,重要的是发出了多少请求,以及在哪个时间点。

我真的很喜欢Locust的易用性和熟悉的语法,但它适合使用这样的静态、可重复的请求负载进行测试吗?

编辑:由于这种方法似乎不可能在没有很大困难(或根本不)的情况下实现,我提出了另一种方法,其差异足以保证一个单独的问题:Getting Locust to send a predefined distribution of requests per second

推荐答案

简而言之,没有。Locust的核心是运行一定数量的用户,这些用户彼此之间相当独立。

您可以使用wait_time = constant_throughput(x)(docs.locust.io/en/stable/writing-a-locustfile.html#wait-time-attribute)控制每个用户的吞吐量。您还可以查看面向全球吞吐量(github/SvenskaSpel/locust-plugins/blob/master/examples/constant_total_ips_ex.py)的Locust-pluginsconstant_total_ips。

但是,如果您要在准确的时间执行确切的数量的请求,我认为没有现成的可用的服务。

您可以在触发请求之前使用Python同步所有用户。我没有一个很好的解决方案,但这种方法是可行的(您需要运行10个用户,否则会遇到并发问题--我敢肯定有更好的解决方案)

users_waiting = 0 lock = Semaphore(10) ... @task def t(self): global users_waiting with lock: users_waiting = users_waiting + 1 if users_waiting < 10 else 1 while self.environment.runner and users_waiting < 10: time.sleep(0.1) # actually do your requests here

更多推荐

使用每秒预定义请求数的Locust

本文发布于:2023-11-23 09:31:08,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1620949.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Locust

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!