python-3.x - 在单元测试中获取 Celery 重试方法的参数
问题描述
我有一个 Celery 任务,我会延迟异步调用它。它在发生异常时重试,每次尝试都会增加延迟。
@shared_task(bind=True, max_retries=None)
def cancel_issue_request(self):
try:
raise Exception('test')
except Exception:
countdown = 5 * 60 * (2 ** self.request.retries)
raise self.retry(countdown=countdown, max_retries=5)
这在实践中可以正常工作,但我正在尝试编写一个单元测试来检查倒计时是否确实具有正确的值。
我试图做的是模拟 cancel_issue_request.retry 方法,但是一旦我这样做,方法本身就会中断并且不会重试任务。我以为你可以模拟一个方法,它仍然使用 spec=celery.task.Task.retry 执行其所有功能,但我无法让它工作,请赐教?
或者,我想在某处阅读从 Celery 完成的重试,但我无法从 Celery 中获取该信息。
解决方案
通过执行以下操作管理模拟功能而不破坏功能:
cancel_issue_request.retry = Mock(side_effect=cancel_issue_request.retry)
推荐阅读
- c# - 如何获得多边形对撞机接触点
- postgresql - 在 JOIN 中向 Doctrine Query Builder 添加排除项
- unity3d - Unity - 在玩家的最后一个位置射击子弹
- javascript - 类中数字属性的乘法返回 Nan
- javascript - 为什么 vscode 不能自动完成导出的对象,从一个文件到另一个文件,在 nodejs 中?它是性能特征吗?
- python - Why does my function to reverse this list only by indexing and without using reverse(), or [::-1] give incorrect output?
- c++ - 为什么 IconTheme 资源路径未在 get_search_path 上列出
- git - git reflog expire 配置存储在哪里?
- office-js - 在通过审核之前,我可以在我们的网站上发布 xml 清单文件吗?
- reactjs - 如何在客户端 NextJS 中使用 Apollo GraphQL 订阅?