gpt4 book ai didi

php - 如何在功能测试之前预热 Symfony 环境以检查执行时间?

转载 作者:行者123 更新时间:2023-12-04 03:44:58 26 4
gpt4 key购买 nike

在 Symfony5.2 应用程序的功能测试中,我添加了一些 profiling assertions检查执行时间。

    private static function assertTime(?Profile $profile, int $milliseconds = self::MAX_TIMES)
{
if (null === $profile) {
static::markTestSkipped('To test time of this use case, please unable profiling');
}

/** @var TimeDataCollector $time */
$time = $profile->getCollector('time');
static::assertLessThan(
$milliseconds,
$time->getDuration(),
sprintf(
'Checks that execution time (%dms) is less than %dms (token %s)',
$time->getDuration(),
$milliseconds,
$profile->getToken()
)
);
}

它工作正常。

但是每次我启动我的测试套件时,第一个测试都会因为执行时间而失败:

symfony php ./bin/phpunit
PHPUnit 9.5.0 by Sebastian Bergmann and contributors.

Runtime: PHP 7.4.6 with Xdebug 2.9.5
Configuration: /home/alexandre/PhpstormProjects/bb-one/phpunit.xml.dist

Testing
F......................... 26 / 26 (100%)

Time: 00:19.352, Memory: 82.50 MB

There were 1 failure:

1) App\Tests\Functional\MailTest::testShowArchived
Checks that execution time (2952ms) is less than 1000ms (token b6742a)
Failed asserting that 2952.1640625 is less than 1000.

我知道这是第一个功能测试,因为如果我更改默认顺序,我会:

symfony php ./bin/phpunit --order-by reverse

There were 1 failure:

1) App\Tests\Functional\MailTest::testShowTrash
Checks that execution time (2868ms) is less than 1000ms (token a3342a)
Failed asserting that 2868.4316425 is less than 1000.
  • 我尝试在启动测试套件之前清除预热 缓存,但它没有任何改变。
  • 我读了这个answer ,但这不是一个好的答案。
  • 我尝试以测试模式启动服务器,没有任何变化。
  • 我试图创建一个内核 in the bootstrapcall the console并清除测试缓存(它没有帮助)
  • 我尝试创建一个初始测试,如 AAATest::testAAA(){/*..一些没有分析断言的功能测试..*/>,当我们启动我们的完整时,这个解决方案是可以接受的测试如您在以下输出中所见:
Testing 
........................... 27 / 27 (100%)

Time: 00:20.783, Memory: 76.50 MB

OK (27 tests, 174 assertions)

但是当开发者在优化站点的特定用例时,只启动相应的测试,启动时间增加,测试失败。

我找到了一个糟糕的解决方案来避免第一个在完整测试套件中失败。现在,我正在寻找一种解决方案,以避免在我只启动一个测试时测试失败!

最佳答案

我们可能会错过更多关于您的测试目标的上下文,因为我不明白您如何通过每次测试运行一次来​​收集可用的结果以获得准确的分析。

我认为您正在寻找的当然是已经说过的缓存预热,但您可以利用 PHP preloading and its integration with Symfony 解决您的问题。 .通过根据测试标记您的服务,您可能会产生通过测试所需的性能。

但再次强调,提供更多有关您在测试中分析代码的意图的上下文。我建议您采用其他方法进行负载测试。

关于php - 如何在功能测试之前预热 Symfony 环境以检查执行时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65330959/

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