gpt4 book ai didi

php - Laravel 测试增加内存使用

转载 作者:可可西里 更新时间:2023-10-31 22:40:43 24 4
gpt4 key购买 nike

Time: 1.89 minutes, Memory: 526.00MB

OK (487 tests, 2324 assertions)

这是我测试我的 Laravel API 的 phpunittest 结果,内存消耗一直在增加,感觉我尝试了互联网上的所有帖子和答案,以了解在测试时不断增加内存的原因。通过自己的调试,应用程序在它应该进行的每项测试中都被丢弃了。

一切都非常标准,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>标签 processIsolation属性值为 truephpunit.xml文件。一个适当的开始的例子 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如果您只需要在单独的进程中运行某些测试,则到测试类的文档 block :

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

关于php - Laravel 测试增加内存使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39096658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com