2015-07-21 66 views
0

我有一个用Python/unittest + TeamcityTestRunner编写的,在Linux下运行的测试套件。Python单元测试速度较慢,在TeamCity下运行时测试失败

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

问题是,当我通常运行测试套件 - ssh到生成计算机(VM),运行该脚本对二进制/应用程序 - 所有测试通过。

当我从TeamCity对同一个二进制/应用运行相同的测试套件时,所有测试都失败。

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

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

回答

0

的罪魁祸首似乎是造成的TeamCity下运行的开销,一个缓慢的VM和开销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