python - mock "sleep"

标签 python tdd tornado

我正在编写一个可以异步触发某些事件的应用程序。测试如下所示:设置所有内容,休眠一段时间,检查事件是否已触发。

但是,由于等待,测试需要相当长的时间才能运行 - 我在每个测试中等待大约 10 秒。我觉得我的测试很慢 - 还有其他地方可以加快速度,但这个 sleep 似乎是最明显加快速度的地方。

消除 sleep 的正确方法是什么?有没有办法欺骗日期时间或类似的东西?

该应用程序是一个基于 Tornado 的 Web 应用程序,异步事件是通过 IOLoop 触发的,因此我没有办法自己直接触发它。

编辑:更多详细信息。

该测试是一种集成测试,我愿意模拟第三方代码,但不想直接触发我自己的代码。

该测试是为了验证某个消息是否使用 websocket 发送并在浏览器中正确处理。消息在客户端连接到 websocket 处理程序时开始的一定超时后发送。超时值被视为连接时的 datetime.now() 与数据库中的值之间的差异。在使用selenium请求页面之前,该值被人为设置为datetime.now() - 5秒。由于加载页面需要一些时间,并且在不同的机器上可能有点随机,因此我认为减少 5 秒的时间间隔并不明智。超时后加载页面将产生不同的结果(不应发送 websocket 消息)。

所以问题是要以某种方式强制tornado的IOLoop在websocket连接后的任何时刻发送消息 - 如果在设置数据库值后0.5秒内发生这种情况,则还需要等待4.5秒,我想尝试消除这种情况延迟。

两个明显需要模拟的地方是 IOLoop 本身和 datetime.now()。现在的问题是我应该对哪一个进行猴子修补以及如何修补。

最佳答案

如果您想模拟sleep,那么您不得直接在应用程序代码中使用它。我将创建一个类似 System.sleep() 的类方法,并在您的应用程序中使用它。然后可以模拟 System.sleep()

关于python - mock "sleep",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22180528/

相关文章:

python - 我可以使用 Tornado+Celery+RabbitMQ+Redis 吗?

javascript - Tornado WebSockets - InvalidStateError "Still in CONNECTING State"

java - 如何为单元测试触发 Swing GUI 事件

python - Python 中的 Groupby 和范围计数以及分布

javascript - 为什么Python的datetime和JS的Date不匹配?

python - 在python中迭代两个不同大小的列表

c++ - 如何在boost中以编程方式获取测试结果

unit-testing - 遵循 TDD 时如何处理内存泄漏

python - 如何在没有服务器的情况下立即执行 AsyncHTTPClient() (使用交互式解释器)

python - 如何在python数据框中的列中第一次出现值