微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel测试增加内存使用

Time: 1.89 minutes, Memory: 526.00MB

OK (487 tests, 2324 assertions)

这是我测试我的Laravel API的PHPunittest结果,内存消耗不断增加,感觉我在互联网上尝试了所有帖子和答案,以便在测试时保持内存.从自己的调试开始,每次测试都应该删除App.

一切都非常标准,createApplication方法看起来像这样.

public function createApplication()
{
    // Ran out of memory
    ini_set('memory_limit', '1024M');

    $app = require __DIR__ . '/../bootstrap/app.PHP';

    $app->make(Kernel::class)->bootstrap();

    return $app;
}

得出内存泄漏的结论,没有得到正确的清理.

$app = require __DIR__ . '/../bootstrap/app.PHP';

$app->make(Kernel::class)->bootstrap();

解决方法:

这是我发现的最简单,最可靠的解决方案.它没有my previous answer中描述的缺点.

更改< PHPunit>在PHPunit.xml文件中将processIsolation属性标记为true.启动正确的PHPunit.xml文件的示例:

<?xml version="1.0" encoding="UTF-8"?>
<PHPunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="vendor/autoload.PHP"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="true"
         stopOnFailure="false">
...

它是如何工作的:它使PHPUnit为每个测试启动一个新的PHP进程.在单独的进程中运行测试会强制PHP在测试结束后释放所有内存.它减慢了测试速度,但这是低内存消耗和可靠性的代价.

或者,如果需要在单独的进程中仅运行某些测试,则可以将@runTestsInSeparateProcesses annotation添加到测试类的doc块:

/**
 * @runTestsInSeparateProcesses
 */
class HeavyTest extends TestCase
{
    // ...
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐