使用nosetests时出现超时

12 投票
1 回答
4923 浏览
提问于 2025-04-18 06:23

我正在设置我的nosetests环境,但似乎无法正确设置超时。我希望每个通过nose发现的测试都有一个秒(比如2秒)的超时限制。

我尝试了以下方法:

nosetests --processes=-1 --process-timeout=2

这个方法运行得很好,但我注意到以下几点:

  • 并行测试对于一些简单的测试用例来说反而花费了更长的时间
  • 当一个测试超时(因此失败)时,nose并没有反馈这个信息

有没有人知道我该如何让这个超时功能正常工作?我更希望它在不进行并行测试的情况下工作,但只要能收到测试超时的反馈,这也不是问题。

1 个回答

11

我不知道这是否能让你的生活更轻松,但在 nose.tools 中有类似的功能,它会在超时后失败,而且你不需要进行并行测试:

from nose.tools import timed

@timed(2)
def test_a():
    sleep(3)

如果手动添加属性有点麻烦,你可以通过脚本或插件自动给模块中的所有测试加上装饰器,但我个人更喜欢清晰明了,而不是神秘的做法。

通过查看 Lib/site-packages/nose/plugins/multiprocess.py 的源代码,似乎你使用的 process-timeout 选项是专门用来管理那些可能导致测试无法完成的“挂起”子进程的。

撰写回答