【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 2013-09-04
        • 1970-01-01
        • 2019-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-20
        相关资源
        最近更新 更多