【发布时间】:2014-03-05 18:41:07
【问题描述】:
我正在编写一个异步触发某些事件的应用程序。测试看起来像这样:设置一切,休眠一段时间,检查事件是否已触发。
但是,由于等待测试需要很长时间才能运行 - 我在每次测试中等待大约 10 秒。我觉得我的测试很慢 - 还有其他地方可以加快它们的速度,但这种睡眠似乎是加快速度的最明显的地方。
消除睡眠的正确方法是什么?有什么方法可以欺骗 datetime 或类似的东西吗?
该应用程序是基于 Tornado 的 Web 应用程序,并且异步事件是通过 IOLoop 触发的,所以我没有办法自己直接触发它。
编辑:更多细节。
测试是一种集成测试,我愿意mock 3rd 方代码,但不想直接触发我自己的代码。
测试是验证某条消息是使用websocket发送的,并在浏览器中被正确处理。消息在客户端连接到 websocket 处理程序时启动的特定超时后发送。超时值取为连接时的datetime.now() 与数据库中的值之差。在使用 selenium 请求页面之前,该值被人为设置为datetime.now() - 5 seconds。由于加载页面需要一些时间,并且在不同的机器上可能有点随机,我认为减少 5 秒的时间间隔并不明智。超时后加载页面会产生不同的结果(不应发送 websocket 消息)。
所以问题是在 websocket 连接后的任何时刻以某种方式强制龙卷风的 IOLoop 发送消息 - 如果在设置数据库值后 0.5 秒内发生这种情况,则需要等待 4.5 秒,我想尝试消除它延迟。
两个明显的模拟位置是 IOLoop 本身和 datetime.now()。现在的问题是我应该修补哪一个以及如何修补。
【问题讨论】: