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, patch 和 options 方法。
HttpSession 实例将在请求之间保留 cookie,以便可用于登录网站并在请求之间保持会话。
也可以从 Locust 实例的 TaskSet 实例中引用 client 属性,以便轻松地从客户端中检索客户端并发出 HTTP 请求。
这是一个简单的示例,该请求向 /about 路径发出 GET 请求(在这种情况下,我们假设 self 是TaskSet或HttpLocust类的实例:
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"})