Python 超时装饰器-是否可以在Windows上禁用或使其工作?
我们为Chrome、Firefox和Safari开发扩展,并使用Selenium测试我们的Chrome和Firefox扩展。我最近添加了Python 超时装饰器-是否可以在Windows上禁用或使其工作?,python,linux,windows,selenium,Python,Linux,Windows,Selenium,我们为Chrome、Firefox和Safari开发扩展,并使用Selenium测试我们的Chrome和Firefox扩展。我最近添加了timeout\u decorator,如果测试运行超过15分钟(你可以看到我的答案),它可以在Linux(Ubuntu)上运行。但问题是,它在Windows上不起作用。这是我的密码: import timeout_decorator .... class BaseSeleniumTestCase(unittest.TestCase): .... @ti
timeout\u decorator
,如果测试运行超过15分钟(你可以看到我的答案),它可以在Linux(Ubuntu)上运行。但问题是,它在Windows上不起作用。这是我的密码:
import timeout_decorator
....
class BaseSeleniumTestCase(unittest.TestCase):
....
@timeout_decorator.timeout(seconds=900)
def _test_gmail_1_with_extension(self):
....
测试类从
BaseSeleniumTestCase
继承并运行测试。每次在Windows中运行测试之前,我都可以对decorators进行注释,但是我希望有一个更好的解决方案,而不需要创建不同的测试。但是可以调用另一个函数来检查我们是在Windows还是Linux中,如果我们在Windows中,它将在没有decorator的情况下运行测试,而在Linux中,它将应用decorator并运行测试。有什么建议吗?您可以重新定义超时\u decorator
以接受相同的签名并在windows上提供禁止操作:
import os
if os.name == 'nt':
# We redefine timeout_decorator on windows
class timeout_decorator:
@staticmethod
def timeout(*args, **kwargs):
return lambda f: f # return a no-op decorator
else:
import timeout_decorator
class BaseSeleniumTestCase(unittest.TestCase):
... # Keep your class intact
您需要检查
timeout\u decorator
的内部实现。它很可能使用线程,而这些线程在Windows上的行为不同。然后看一看Windows系统编程,试着弄清楚是否可以取消线程。只是猜测而已。@Mikkoohtama他们有两个选择,但都不能在Windows上工作。我只想在没有decorator的情况下在Windows上运行测试。