我有locustio文档中的下一个代码:
from locust import HttpLocust, TaskSet, between
def login(l):
l.client.post("/login", {"username":"ellen_key", "password":"education"})
def logout(l):
l.client.post("/logout", {"username":"ellen_key", "password":"education"})
def index(l):
l.client.get("/")
def profile(l):
l.client.get("/profile")
class UserBehavior(TaskSet):
tasks = {index: 2, profile: 1}
def on_start(self):
login(self)
def on_stop(self):
logout(self)
class WebsiteUser(HttpLocust):
task_set = UserBehavior
wait_time = between(5.0, 9.0)
在蝗虫日志和蝗虫网络(localhost:8089)中,我看到了下一个任务
- /login
- /logout
- /
- /profile
但是如果我需要在一个任务中只有几个请求并从完整任务中获得度量(不是一个请求),该怎么办。
我想看到的是:
- login
- logout
- index
- profile
我想查看任务名称而不是请求url。 在Jmeter中,我可以在一个动作中插入几个请求并获得动作时间(不是请求)。
答案 0 :(得分:1)
您可以通过实现自定义execute_task()
方法来实现此目标,并在其中触发request_success事件。
类似的事情应该起作用:
import time
class TaskReportingTaskSet(TaskSet):
def execute_task(self, task, *args, **kwargs):
start = time.time()
try:
super().execute_task(task, *args, **kwargs)
except:
events.request_failure.fire(
request_type="task",
name=task.__name__,
response_time=(time.time()-start)*1000,
response_length=0,
)
raise
else:
events.request_success.fire(
request_type="task",
name=task.__name__,
response_time=(time.time()-start)*1000,
response_length=0,
)
class UserBehavior(TaskReportingTaskSet):
tasks = ...
使用上述代码,如果TaskSet从TaskReportingTaskSet
继承,将报告所有任务的运行时间。如果要包含request_success
和on_start
,则必须分别触发on_stop
个事件。
如果您不希望报告HTTP请求,则可以使用不是内置Locust HTTP客户端之一的HTTP客户端。例如,您可以直接使用python请求:
import requests
def index(l):
requests.get("/")
答案 1 :(得分:1)
您可以通过name
属性为每个请求设置名称,请参见示例:
def index(l):
l.client.get("/", name="index")
def profile(l):
l.client.get("/profile", name="my-profile")