在特定数量的请求后停止蝗虫

Posted

技术标签:

【中文标题】在特定数量的请求后停止蝗虫【英文标题】:Stop locust after specific number of requests 【发布时间】:2020-02-11 06:48:39 【问题描述】:

我使用的是 locust 0.14.4。我正在测试一个休息 api。我想模拟一个用户登录应用程序然后发出少量 GET 请求的场景。例如假设我希望用户在登录后发出 3 次 GET 请求。我希望用户数为 3。在这种情况下,每个用户都应该登录并发出 3 次 GET 请求,并且 locust 应该停止。所以总共有 12 个请求。

我发现以前有一个选项-n来指定请求的数量,但是在0.14.4版本中没有。

我找到了一个类似的question 但是它对我不起作用。

这是我的代码 sn-p:

class MyTaskSet(TaskSet):

def on_start(self):
    """ on_start is called when a Locust start before any task is scheduled """
    self.login()

def login(self):
    resp = self.client.post("https://" + hostip + "/session", auth=(username, password),verify=False)
    data = json.loads(resp.text)
    global session_id
    session_id = data['value']

@seq_task(1)
def user_workflow(self):
    for i in range(0, 1, 1):
        self.get_counters()
        self.get_providers()
        self.get_metrics()

def get_counters(self):
    self.client.get("/counters",headers='session-id': session_id, 'Accept': 'application/json',
                              'Content-Type': 'application/json')

def get_providers(self):
    self.client.get("/providers",headers='session-id': session_id, 'Accept': 'application/json',
                              'Content-Type': 'application/json')

def get_metrics(self):
    self.client.get("/metrics",headers='session-id': session_id, 'Accept': 'application/json',
                              'Content-Type': 'application/json')
@seq_task(2)
def done(self):
    raise StopLocust()

当我尝试使用命令运行测试时

$locust -f locustfile.py --no-web -c 3 -r 3

我得到以下输出:

Type                 Name               #reqs 50%

 GET                  /counters         1    840 
 GET                  /metrics          1    470 
 GET                  /providers        1    480 
 POST                 /session          3   1300 

 None                 Aggregated        6   1300 

我想要实现的是每个用户都应该登录并发出 3 个 GET 请求,当最后一个用户发出第三个 get 调用时,蝗虫应该停止。有没有更清洁的方法来实现这一点?

【问题讨论】:

【参考方案1】:

使用 seq_task 时应使用 TaskSquence 代替 TaskSet 作为超类

【讨论】:

以上是关于在特定数量的请求后停止蝗虫的主要内容,如果未能解决你的问题,请参考以下文章

iOS:停止无限数量的请求

为啥 mysqli::multi_query 在一定数量的行后停止?

在滚动视图中特定滚动后停止滚动 - Titanium

如何在 PhantomJS 中停止/中止/取消页面加载?

在特定时间间隔后停止 Bash 脚本 [重复]

Popen 子进程进程在特定回复后停止阅读