性能测试工具 Locust 工具调用 user.stop() 停止用户后应该怎重启用户?

xuejiangnan · 2022年03月23日 · 最后由 xuejiangnan 回复于 2022年03月23日 · 3359 次阅读

如题, 我在使用 Locust 测试一个 UDP 服务器, 我发现当 Locust 中的负载用户执行的任务集中出现一些报错 (例如: 超时, 接收信息错误等) 时, 负载用户不会停止, 它会直接停止执行当前任务集, 然后再次获取测试数据, 重新执行与它绑定的任务集. 在这个过程中它不会执行任务集中我希望任务集执行异常或者退出时执行的 on_stop() 方法.
因此, 我抓取了 Locust 任务集中的报错, 并在异常处理中调用了 user.stop() 方法. 这样用户退出倒是会调用任务集中的 on_stop() 方法, 但是当我尝试使用, user.start() 方法重新启动一个用户时程序告诉我出现了一个 [Errno 9] Bad file descriptor 异常, 查询后我发现这是关闭了 socket 后再去调用 socket 中的方法导致的, 异常如下:

[2022-03-23 14:23:51,960] DESKTOP/ERROR/locust.user.task: [Errno 9] Bad file descriptor
  File "E:\project\Python\PerformanceTesting\locustUDPTester\clientSocket.py", line 66, in sendto
    super().sendto(send_data, self._address)
  File "e:\project\python\performancetesting\locustudptester\venv\lib\site-packages\gevent\_socketcommon.py", line 703, in sendto
    return self._sock.sendto(*args)
  File "e:\project\python\performancetesting\locustudptester\venv\lib\site-packages\gevent\_socket3.py", line 55, in _dummy
    raise OSError(EBADF, 'Bad file descriptor')
OSError: [Errno 9] Bad file descriptor

应该是调用, user.stop() 方法时会关闭与当前负载用户绑定的 socket, 那有什么方法可以在用户出现异常关闭时调用 on_stop() 方法, 又可以重新启动一个用户呢?

共收到 1 条回复 时间 点赞
xuejiangnan 关闭了讨论 03月23日 19:43
xuejiangnan 重新开启了讨论 03月23日 19:43

破案了,我很傻,抓到异常后直接调用 on_stop() 函数就好了。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册