2013-05-04 72 views
5

考虑以下几点:Python的鼻子测试同时

from time import sleep 

def runTest(a): 
    sleep(1) 
    assert a >= 0 

def test_all(): 
    for i in range(5): 
     yield (runTest, i) 

我期望五个测试,并行运行与nosetests --processes=8运行,因此运行在大约一秒钟 - 不过,它只需在运行五秒钟:它们似乎按顺序运行而不是同时运行。

根据鼻子文档,多进程插件支持测试生成器(正如鼻子文档所称的那样),因为1.1:我使用鼻子1.3.0,所以应该支持它。正如人们所期望的那样,添加_multiprocess_can_split_ = True的确会产生任何影响,因为不使用灯具。

如何让这五个测试同时运行?

回答

2

您可以尝试

from time import sleep 
from multiprocessing import Process 

def runTest(a): 
    sleep(1) 
    assert a >= 0 

def test_all(): 
    for i in range(5): 
     Process(target=(yield (runTest, i))).start() 
+0

我非常想知道为什么nose的多进程插件不能同时运行现有的测试,而不是将它们并行化到外部。 – gsnedders 2013-05-04 21:21:03

+0

我不知道您使用的是什么设置,但此解决方案根本不起作用。所有测试都在相同的过程中运行,并按顺序运行。这是在鼻子1.3上完成的,使用了多种过程变量和nosetests命令的各种组合。问题似乎源于使用收益率。 – magixx 2014-09-23 16:58:50