如何使Locust尊重DNS TTL



我使用AWS上提供的平台分发蝗虫。在加载期间,我更新了目标的route53加权记录,以指向另一个版本。

我看到的是蝗虫不更新初始DNS解析,并继续瞄准我的第一个版本。

如何使蝗虫在加载过程中重新计算dns解析?

这有点难,因为你的操作系统很可能会缓存dns解析。

您可以使用dnspython自己解析地址(https://blog.devgenius.io/pyops-dnspython-toolkit-590a368b5c2)

A = dns.resolver.resolve(domain, 'A')
for answer in A.response.answer:
for item in answer.items:
ip = item.address

然后对该ip执行请求,手动添加适当的Host标头。

self.client.get(f"http://{ip}", headers={"Host": domain})

编辑:如果使用操作系统dns分辨率是ok的,甚至是可取的,那么也许只是创建一个新的Session就足够了。这将创建一个新的tcp连接,并在任何操作系统级缓存超时时触发一个新的DNS查询:

from locust.clients import HttpSession
...

@task
def t(self):
self.client.close()
self.client = HttpSession(
base_url=self.host,
request_event=self.environment.events.request,
user=self
)
# your actual requests

最新更新