Locust 为什么蝗虫在一段时间后不发送请求?我怎样才能解决它?
我在试着测试性能。但我注意到,一段时间后没有提出新的请求,只是每隔一段时间打印临时结果报告,请求的数量冻结,直到蝗虫到达时间限制时停止 部分日志:Locust 为什么蝗虫在一段时间后不发送请求?我怎样才能解决它?,locust,Locust,我在试着测试性能。但我注意到,一段时间后没有提出新的请求,只是每隔一段时间打印临时结果报告,请求的数量冻结,直到蝗虫到达时间限制时停止 部分日志: Name # reqs # fails | Avg Min Max Median | req/s failures/s ------------------------------------
Name # reqs # fails | Avg Min Max Median | req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST /eaog/CreateSess 691 0(0.00%) | 790 250 4406 590 | 13.20 0.00
POST /eaog/ReceiveInsRsp 691 0(0.00%) | 557 0 2843 390 | 12.90 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 1382 0(0.00%) | 674 0 4406 520 | 26.10 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST /eaog/CreateSess 691 0(0.00%) | 790 250 4406 590 | 13.20 0.00
POST /eaog/ReceiveInsRsp 691 0(0.00%) | 557 0 2843 390 | 12.90 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 1382 0(0.00%) | 674 0 4406 520 | 26.10 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST /eaog/CreateSess 691 0(0.00%) | 790 250 4406 590 | 13.20 0.00
POST /eaog/ReceiveInsRsp 691 0(0.00%) | 557 0 2843 390 | 12.90 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 1382 0(0.00%) | 674 0 4406 520 | 26.10 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST /eaog/CreateSess 691 0(0.00%) | 790 250 4406 590 | 13.20 0.00
POST /eaog/ReceiveInsRsp 691 0(0.00%) | 557 0 2843 390 | 12.90 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 1382 0(0.00%) | 674 0 4406 520 | 26.10 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST /eaog/CreateSess 691 0(0.00%) | 790 250 4406 590 | 13.20 0.00
POST /eaog/ReceiveInsRsp 691 0(0.00%) | 557 0 2843 390 | 12.90 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 1382 0(0.00%) | 674 0 4406 520 | 26.10 0.00
Name # reqs # fails | Avg Min Max Median | req/s failures/s
--------------------------------------------------------------------------------------------------------------------------------------------
POST /eaog/CreateSess 691 0(0.00%) | 790 250 4406 590 | 13.20 0.00
POST /eaog/ReceiveInsRsp 691 0(0.00%) | 557 0 2843 390 | 12.90 0.00
--------------------------------------------------------------------------------------------------------------------------------------------
Aggregated 1382 0(0.00%) | 674 0 4406 520 | 26.10 0.00
[2020-10-09 20:35:13,127] DESKTOP-AF8SR9S/INFO/locust.main: Time limit reached. Stopping Locust.
[2020-10-09 20:35:13,127] DESKTOP-AF8SR9S/INFO/locust.runners: Stopping 20 users
以下是代码的一部分:
类TaskbotTaskSet(任务集):
环境:
非常感谢您提供的任何帮助不确定您正在测试的服务器/api,但是self.client.post(api_url['ReceiveInsRsp'])是否可能会等到有东西要接收?您可以覆盖请求超时(检查
请求
文档)以强制执行错误,以检查是否存在这种情况。我必须承认我不熟悉Python。。。这些天,我甚至阅读了蝗虫的源代码,试图找出它。最后,我发现当使用Queue存储数据时,如果Queue.get()中根本没有数据,程序就会被卡住,并且不会引发异常。因此,使用队列时请小心,这可能会给您带来麻烦。如果您重复测试,是否每次停止前都会到达大致相同的点?是否有任何相关的日志行可以指出发生了什么,或者在代码停止时它在代码中的位置?如果没有,你可以加一些。运行蝗虫时使用的命令是什么?每次我重复测试时,当蝗虫冻结时,请求的数量是不同的。我确实在发送请求之前和接收响应之后放置了日志行,并尝试对它们进行计数。我发现,当我将客户端数量设置为10时,如果没有冻结,body_计数比response_计数多10,但是如果冻结,body_计数会相同。我使用的命令行:hocust-f hocust_taskbot.py--host=[host]--headless-u 10-r 10-t 5如果用户数量较少,它的工作时间会更长吗?您是否也可以尝试使用单个请求体之类的东西来简化事情,并确保代码中没有其他可能导致问题的内容?另外,如果您尝试只获取响应,您正在测试的系统是否工作?也许可以尝试将其设置为SequentialTaskSet,以确保在响应之前首先发送请求。我尝试将超时设置为20,但在冻结时未捕获异常。我还使用ThreadPoolExecutor编写了一个脚本,我也使用了请求,但它工作得很好测试中的变量q是什么?q.get()是否可能被阻塞?变量q是记录sid的队列,在请求api_url['CreateSES']时添加到队列中,在请求api_url['ReceiveRsp']时弹出。我更改了脚本以继承SequentialTaskSet,以确保q.get()之前的q.push(),但它也失败了,一段时间后仍然冻结。请尝试在任务中添加一些print语句,以查看是否可以缩小它卡住的确切位置(从post之前和之后开始)
def on_start(self):
get_flow_id()
def on_stop(self):
print("body_count: {}; response_count: {}".format(body_count, response_count))
@task
def create_sess(self):
sid = str(uuid.uuid1())
body = {"taskId": {
"bid": bid,
"sid": sid},
"appId": "BCCS"}
body = json.dumps(body).encode('utf-8')
global body_count
body_count += 1
print("post create_sess body: {}".format(body))
with self.client.post(api_url['CreateSess'], data=body, headers=headers, catch_response=True) as res:
global response_count
response_count += 1
print(res.text)
if res.status_code != 200:
res.failure('request failed: %s ' % res.text)
else:
msg = json.loads(res.text)
if msg['code'] == 0:
q.put(sid)
res.success()
else:
res.failure('request returned with error: %s ' % res.text)
@task
def receive_rsp(self):
sid = q.get()
flow_id = random.choice(flow_ls)
body = {
"taskId": {
"bid": bid,
"sid": sid,
"flow_id": flow_id,
"ins_id": "t-1",
"res": "test_result"},
"appId": "BCCS"
}
body = json.dumps(body).encode('utf-8')
global body_count
body_count += 1
print("post receive body: {}".format(body))
with self.client.post(api_url['ReceiveInsRsp'], data=body, headers=headers, catch_response=True) as res:
global response_count
response_count += 1
q2delete.put(sid)
print(res.text)
if res.status_code != 200:
res.failure('request failed: %s' % res.text)
else:
msg = json.loads(res.text)
if msg['code'] == 0:
res.success()
else:
res.failure('request returned with error: %s' % res.text)