在teamCity下运行时,Python unittest变慢并且测试失败

时间:2015-07-21 07:49:47

标签: python teamcity

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

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

问题在于,当我正常运行测试套件时 - ssh到构建机器(VM),对二进制/应用程序运行脚本 - 所有测试都通过。

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

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

这可能是罪魁祸首? TeamcityTestRunner是否有更多额外开销导致此行为?我能做些什么呢?

1 个答案:

答案 0 :(得分:0)

罪魁祸首似乎是在TeamCity下运行造成的开销,在慢速虚拟机上以及 subprocess.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