PHPunit:在assert语句中测试内存使用或运行时间

时间:2013-03-25 13:46:52

标签: phpunit

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

例如,比方说,我想断言消耗的使用量是否大于或等于指定的内存或运行时间。我搜索网络和phpunit手册,可以“获得确切的信息。

感谢您的任何提示。

3 个答案:

答案 0 :(得分: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.

答案 1 :(得分:3)

要在执行时间和已用内存上运行断言,您可以使用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中的

    。每次测试后,执行时间和内存使用量将自动置位。

答案 2 :(得分:0)

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

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

public function test_usages()
{
    ...

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

欢呼