Python 多个任务并从蝗虫配置文件读取用户和孵化率
如何使用单独的用户数和填充率调用单独的端点,如配置文件中所指定。下面是基本代码。请建议Python 多个任务并从蝗虫配置文件读取用户和孵化率,python,performance,locust,Python,Performance,Locust,如何使用单独的用户数和填充率调用单独的端点,如配置文件中所指定。下面是基本代码。请建议 from locust import HttpUser, task, between, TaskSet, User from locust.env import Environment class MyBase(TaskSet): # base class called by all client calls. def getToken(self): return toke
from locust import HttpUser, task, between, TaskSet, User
from locust.env import Environment
class MyBase(TaskSet):
# base class called by all client calls.
def getToken(self):
return token
class GetCallTasks(MyBase):
@task
# Need set 1 of USer and hatch rate
def getInfo(self):
# verify=False get rids of InsecureRequestWarning warning
self.client.get()
class PostAndDeleteTasks(MyBase):
@task
# Need set 2 of USer and hatch rate
def deleteStatement(self):
response = self.client.post()
response = self.client.delete()
class ApiUser(HttpUser):
# how do we call PostAndDeleteTasks and GetCallTasks with separate number of users and hatch rate?
tasks = [PostAndDeleteTasks]
tasks = [GetCallTasks]
wait_time = between(0.100, 1.500)
if __name__ == '__main__':
env = Environment()
ApiUser(env).run()
这取决于您的用例以及您要寻找的内容。如果蝗虫生成的每个用户都可以先运行
getInfo()
,然后运行deleteStatement()
,那么您可以使用一个命令并按顺序定义要完成的任务。要运行两次deleteStatement()
,可以在两个不同的任务中复制,或者同一个任务可以只运行相同的代码两次。在这种情况下,每个用户将以相同的顺序运行完全相同的步骤,并且使用一个稳定的填充率,两个任务的填充率都是稳定的
如果您不需要执行的任务的确切数量,只需要大致了解每1个任务执行大约2个任务,那么您可以使用或的权重。然后,蝗虫会随机为每个用户选择要执行的任务,但是,例如,可以为每个用户选择2个deleteStatement()
任务和1个getInfo()
,因此您定义的任务的比例大约为2:1。在第一个场景中,两个任务仍然有一个填充率,但每个任务的确切运行计数有点模糊(这通常是可取的,因为这通常更接近真实世界的流量)
另外,在这两种情况下,您只需在ApiUser
类中定义一次tasks
,就像tasks=[PostAndDeleteTasks,GetCallTasks]
一样。您如何拥有它,tasks
中只包含GetCallTasks
,因此PostAndDeleteTasks
中的任何内容都不会运行
另一个选项是运行两个独立的蝗虫实例,一个只运行getInfo()
,另一个只运行deleteStatement()
。然后,您可以操作每一个并随意动态更改每个的用户计数和填充率。对于不同的任务集,这实际上是唯一内置且受支持的具有不同填充率的方法
但是,如果您真的不想管理多个蝗虫实例,那么蝗虫几乎可以运行任何代码,并且有几种不同的方法可以连接到蝗虫。文档中有一个他们称之为的示例,向您展示了一种方法。关键部分是self.\u-ocast\u-environment.events.request\u success.fire()
和self.\u-ocast\u-environment.events.request\u-failure.fire()
,因为这是代码向蝗虫发送消息的地方,告知正在发生的事情以及任务是成功还是失败。您还可以在任务集中覆盖self.tasks
,该任务集包含要按顺序作为任务运行的函数列表,或者包含function:weight
对。同样,这仍然会有一个用户计数和孵化率,这将触发这一点,但你完全可以控制从那里发生的事情
最后,根据您需要做的事情,您还可以研究一些有用的方法。谢谢您提供详细信息。现在tasks=[PostAndDeleteTasks,GetCallTasks]就可以了。我将研究增加任务的权重。仍然在寻找蝗虫的配置信息。你看到了吗?