phpunit测试中的xdebug嵌套级别和symfony createClient

时间:2017-01-04 14:29:24

标签: php symfony phpunit integration-testing xdebug

我创建了一个简单的测试来检查网站部分中的任何损坏页面。数据提供者从页面列表中读取并提供测试的URL。

测试代码如下:

/**
 * @dataProvider urlProvider
 *
 * @param $url
 *
 */
public function testPageIsSuccessful($url)
{
    $client = self::createClient();
    $client->request('GET', $url);

    $crawler = new Crawler($client->getResponse()->getContent());
    $this->assertTrue($client->getResponse()->isSuccessful());
    $body = $crawler->filter('body');
    $this->assertEquals('http://schema.org/WebPage', $body->attr('itemtype'));
}

测试本身工作正常,但随着某些时候提出的页数开始崩溃。调查问题后,我发现问题出现是因为xdebug.max_nesting_level被破坏了。

我还注意到速度测试的工作量随着页数的增加而急剧下降(大约100页后大约1秒到大约30秒),即使页面相似,每个调用本身也需要大约相同的时间。

修复崩溃本身很简单:禁用xdebug或添加ini_set(' xdebug.max_nesting_level', - 1);在测试setUp中。但这并不能解决经济放缓的问题(目前放缓并不是一个大问题,但在大约2-3周内可能会变得严重)。

我的问题是......为什么嵌套级别提升?它应该是固定的,大约3或4。

在另一个url的每个单独测试之间不应该存在持久性元素,即使该代码中没有任何内容也应该添加到嵌套级别。

createClient函数代码如下(来自symfony WebTestCase):

/**
 * Creates a Client.
 *
 * @param array $options An array of options to pass to the createKernel class
 * @param array $server  An array of server parameters
 *
 * @return Client A Client instance
 */
protected static function createClient(array $options = array(), array $server = array())
{
    static::bootKernel($options);

    $client = static::$kernel->getContainer()->get('test.client');
    $client->setServerParameters($server);

    return $client;
}

乍一看bootKernel函数检查内核是否已经启动,因此不应该是一个问题。

我还检查了网页重定向,这不是问题。严格与页数有关,无论是什么(我只添加了一页,大约100次,并且有相同的问题,所以我确定不是一个破坏的永久重定向链接)。

我使用的symfony版本是2.7。

编辑:在没有getContent部分的情况下也进行了删除和测试,同样的事情发生了...所以问题应该在前2行的某个地方。

0 个答案:

没有答案