【问题标题】:How to close TCP connection in python locust (requests.session)如何在 python locust (requests.session) 中关闭 TCP 连接
【发布时间】:2020-06-04 10:30:29
【问题描述】:
我正在 Kubernetes 上运行的服务 API 上使用 python Locust 包进行负载测试。
我在源代码中看到HttpUser 使用requests.session.request() 发送请求。默认情况下,requests.session 保持连接处于活动状态(这会导致所有请求都转到一个 pod,而不是分布在 Kubernetes 上的所有 pod 中)。我知道在每个请求后关闭连接的唯一方法是在初始化 requests.session 时设置 connection: close,这在 Locust 中是从我身上抽象出来的。
我尝试在请求调用中添加headers={'connection':'close'},但这并没有成功。所有请求仍然发送到同一个 pod。任何人都知道如何在运行时更改此设置?
【问题讨论】:
标签:
python
kubernetes
tcp
python-requests
locust
【解决方案1】:
你可以试试
request = requests.session.request()
request.close()
【解决方案2】:
也许您也可以使用 User 而不是 HttpUser,因为 HttpUser 被认为可以保持会话 betweek 任务。
使用 User 而不是 HttpUser 您需要导入请求并实例化它,但默认情况下它不会保持会话。如果您想保持会话,请创建一个会话对象并使用它进行调用。
例如
class Login(HttpUser)
@task
def activity():
self.client.get('/url')
会话 betweek 每次运行此任务 ID 共享。
import requests
class Login(User)
@task
def activity():
answer = requests.get('/')
answer2 = requests.get('/')
#answer and answer2 doesn't share session, every run of task doesn't share session
session = requests.Session()
answer3 = session.get('/')
answer4 = session.get('/')
#answer3 and 4 share same session, every run of task doesn't share session