Python单元测试缓慢,在TeamCity下运行时测试失败



我有一个用Python/unittest+TeamcityTestRunner编写的测试套件,并在Linux下运行。

大多数测试涉及运行一个单独的线程子进程。打开测试的应用程序(这是一个控制台应用程序,它本身运行多个子进程/插件- c++代码),并检查是否:应用程序的子进程/插件在被杀死时重新启动,创建它必须创建的文件,等等。

问题是,当我正常运行测试套件时- ssh到构建机(VM),针对二进制/app运行脚本-所有测试都通过了。

当我对来自TeamCity的相同二进制/应用程序运行相同的测试套件时,所有测试都失败了。

经过一些调试,我发现当从TeamCity-unittest-subprocess.Popen运行时,应用程序运行/加载非常慢。

什么是罪魁祸首?TeamcityTestRunner有那么多额外的开销来导致这种行为吗?我该怎么办呢?

罪魁祸首似乎是在TeamCity下运行造成的开销,在缓慢的VM上和子进程的开销。Popen

对我不起作用的旧代码是:

cmd = [binary, 'param1']
outfile = open(redirect_to, 'w')
subprocess.call(cmd, stdout=outfile)

新的,在实践中更快的是:

cmd = [binary, 'param1']
redirect_to = '/tmp/out'
p = os.popen(' '.join(cmd) + '2>&1 >' + redirect_to)
p.close()

更多信息在这里:http://essays.ajs.com/2011/02/python-subprocess-vs-ospopen-overhead.html

最新更新