【问题标题】:Python unittest slow and tests failing when running under TeamCity在 TeamCity 下运行时,Python 单元测试很慢并且测试失败
【发布时间】:2015-07-21 20:52:04
【问题描述】:

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

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

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

当我针对 TeamCity 中的同一个二进制文件/应用程序运行同一个测试套件时,所有测试都失败了。

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

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

【问题讨论】:

    标签: python teamcity


    【解决方案1】:

    罪魁祸首似乎是在 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

    【讨论】:

      猜你喜欢
      • 2011-05-22
      • 1970-01-01
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 2017-10-12
      • 1970-01-01
      相关资源
      最近更新 更多