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
{
    // ...
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...