4

我知道 phpunit 在测试期间提供内存使用和执行时间,但是有没有办法在断言语句中使用这些数据?

例如,假设我想断言消耗的使用量是否大于或等于指定的内存或运行时间。我搜索网络以及 phpunit 手册,并不能得到准确的信息。

感谢您的任何提示。

4

3 回答 3

4

要在执行时间和已用内存上运行断言,您可以使用phpunit_stopwatch_annotations包。它提供了自己的 TestCase 类,为您的测试方法添加了对特殊注释( @executionTime@memoryUsage )的支持。

如何使用phpunit_stopwatch_annotations

  1. 从 StopwatchAnnotations\TestCase 扩展您的 TestCase 类

    class ExampleTest extends \StopwatchAnnotations\TestCase

  2. 通过编写开始使用注释

    @executionTime time_in_milliseconds

    或者

    @memoryUsage memory_in_bytes

    在您的方法之前的 docblock 中。每次测试后将自动断言执行时间和内存使用情况。

于 2015-08-02T15:09:37.220 回答
3

也许我在想一个错误的方向,但为什么不尝试这样的事情呢?

class memTest extends PHPUnit_Framework_TestCase {
    public function testMemory() {
        $this->assertGreaterThanOrEqual(4194304, memory_get_usage());
    }
}

只需使用您想要的假设说明符(此处:)assertGreaterThanOrEqual并对照 . 检查您想要的值memory_get_usage()

在我的情况下,输出如下所示:

>phpunit unittests\memtest.php
PHPUnit 3.7.15 
F

Time: 0 seconds, Memory: 1.75Mb

There was 1 failure:

1) memTest::testMemory
Failed asserting that 1503768 is equal to 4194304 or is greater than 4194304.

mypath\memtest.php:5

FAILURES!
Tests: 1, Assertions: 2, Failures: 1.
于 2013-03-27T06:35:49.667 回答
1

如果有人对此感兴趣,我将 StopwatchAnotaions 重写为侦听器,以允许在此处集成有关内存使用和执行时间的断言:

https://github.com/jclaveau/phpunit-profile-asserts

public function test_usages()
{
    ...

    $this->assertExecutionTimeBelow(100); // seconds
    $this->assertMemoryUsageBelow('1M');
}

干杯

于 2018-07-13T11:32:33.223 回答