我有一个用Python / unittest + TeamcityTestRunner编写并在Linux下运行的测试套件。
大多数测试涉及运行单独的线程subprocess.Popen与测试的应用程序(这是一个控制台应用程序,本身运行多个子进程/插件 - C ++代码)并检查是否:应用程序的子进程/插件重新启动时杀死,创建它必须创建的文件等。
问题在于,当我正常运行测试套件时 - ssh到构建机器(VM),对二进制/应用程序运行脚本 - 所有测试都通过。
当我针对来自TeamCity的相同二进制/应用程序运行相同的测试套件时,所有测试都会失败。
经过一些调试后,我发现当从TeamCity-unittest-subprocess.Popen运行时,应用程序运行/加载速度非常慢。
这可能是罪魁祸首? TeamcityTestRunner是否有更多额外开销导致此行为?我能做些什么呢?
答案 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