Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 多个任务并从蝗虫配置文件读取用户和孵化率_Python_Performance_Locust - Fatal编程技术网

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]就可以了。我将研究增加任务的权重。仍然在寻找蝗虫的配置信息。你看到了吗?