阿西河

所有教程

公众号
🌙
阿西河前端的公众号

我的收藏

    最近访问  (文章)

      教程列表

      抓包专区
      测试专区

      Locust 发起 HTTP 请求

      发起 HTTP 请求

      到目前为止,我们仅介绍了 Locust 用户的任务计划部分。

      为了实际负载测试系统,我们需要发起 HTTP 请求(如不不发 http 请求,我们还测试个锤子)。

      为了帮助我们做到这一点,locust 弄了一个HttpLocust类。

      使用此类时,每个实例都会获得一个 client 属性,该属性将是 HttpSession 的一个实例,可用于发出 HTTP 请求。

      HttpLocust

      表示生成并攻击要进行负载测试系统的 HTTP"用户"(在 locust 里,属于你要发出去的蝗虫小弟们)。

      该用户的行为由 task_set 属性定义,该属性应指向TaskSet类。

      在实例化创建一个客户端属性时,该属性是一个 HTTP 客户端,支持在请求之间保持用户会话。

      client = None

      在 Locust 实例化后创建的 HttpSession 实例。

      客户端支持 cookie,因此保持 HTTP 请求之间的会话。

      当从 HttpLocust 类继承时,我们可以使用其 client 属性对服务器发出 HTTP 请求。

      下面是一个 locust 文件的示例,可用于对具有两个 URL 的站点进行负载测试。 //about/

      from locust import HttpLocust, TaskSet, task
      
      class MyTaskSet(TaskSet):
          @task(2)
          def index(self):
              self.client.get("/")
      
          @task(1)
          def about(self):
              self.client.get("/about/")
      
      class MyLocust(HttpLocust):
          task_set = MyTaskSet
          min_wait = 5000
          max_wait = 15000
      
      

      使用上面的 Locust 类,每个模拟用户将在请求之间等待 5 到 15 秒,而 / 将被请求为 /about/ 的两倍。

      细心的读者会发现奇怪的是,我们可以使用 TaskSet 中的 self.client 而不是 self.locust.client 来引用 HttpSession 实例。

      我们可以这样做是因为 TaskSet 类具有一个名为 client 的快捷属性,该属性仅返回 self.locust.client

      使用 HTTP client

      HttpLocust 的每个实例在 client 属性中都有一个 HttpSession 实例。

      HttpSession 类实际上是 requests.Session 的子类,可用于发出 HTTP 请求,并使用 get, post, put, delete, head, patchoptions 方法。

      HttpSession 实例将在请求之间保留 cookie,以便可用于登录网站并在请求之间保持会话。

      也可以从 Locust 实例的 TaskSet 实例中引用 client 属性,以便轻松地从客户端中检索客户端并发出 HTTP 请求。

      这是一个简单的示例,该请求向 /about 路径发出 GET 请求(在这种情况下,我们假设 self 是TaskSetHttpLocust类的实例:

      response = self.client.get("/about")
      print("Response status code:", response.status_code)
      print("Response content:", response.text)
      

      这是发出 POST 请求的示例:

      response = self.client.post("/login", {"username":"testuser", "password":"secret"})
      
      目录
      目录