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"})