我知道phpunit在测试期间提供内存使用和执行时间,但有没有办法在断言语句中使用这些数据?
例如,比方说,我想断言消耗的使用量是否大于或等于指定的内存或运行时间。我搜索网络和phpunit手册,可以“获得确切的信息。
感谢您的任何提示。
答案 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:
从StopwatchAnnotations \ TestCase
扩展TestCase类 class ExampleTest extends \StopwatchAnnotations\TestCase
通过编写
开始使用注释@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');
}
欢呼