繁体   English   中英

Symfony2容器/内核的测试性能

[英]Test Performance of Symfony2 Container / Kernel

我的大多数用例都使用LiipfunctionalBundle,即使它们是单元。 只是因为那里有“便利”方法。 最近,我意识到我的测试性能确实很差,即使对于服务的单个单元测试也是如此。

如果我从容器中获得服务,则主要会出现此问题。 在LiipTestBundle中,哪个需要创建内核并启动它:

protected function getContainer()
{
    if (!empty($this->kernelDir)) {
        $tmpKernelDir = isset($_SERVER['KERNEL_DIR']) ? $_SERVER['KERNEL_DIR'] : null;
        $_SERVER['KERNEL_DIR'] = getcwd().$this->kernelDir;
    }

    $cacheKey = $this->kernelDir.'|'.$this->environment;
    if (empty($this->containers[$cacheKey])) {
        $options = array(
            'environment' => $this->environment
        );
        $kernel = $this->createKernel($options);
        $start = microtime(true);
        $kernel->boot();
        $time = microtime(true) - $start;
        print('boot:'.$time.PHP_EOL);

        $this->containers[$cacheKey] = $kernel->getContainer();
    }

    if (isset($tmpKernelDir)) {
        $_SERVER['KERNEL_DIR'] = $tmpKernelDir;
    }

    return $this->containers[$cacheKey];
}

在我的某些情况下,在“测试”环境中启动需要6到10秒钟。 有时只有2s。 但是它仍然很慢,我想知道为什么这么慢以及我能对此做些什么。 我已经开始自己在测试用例中创建服务,而不是使用容器。 但这也意味着创建测试用例需要更多的精力。

好吧,“便利”正在杀死您。 您只应将LiipfunctionalBundle与功能测试一起使用 按照当前的方式,您很快还会发现难以维护的测试。

如果要进行快速测试,请编写更多的单元测试。 正确使用依赖项注入。 不要将容器注入您的类中(我只是猜测您为什么选择在测试中使用内核或容器)。

开发测试环境中,资源受到监视,因此,如果配置文件发生更改,则刷新缓存。 这很可能是它比生产环境慢的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM