我创建了一个简单的测试来检查网站部分中的任何损坏页面。数据提供者从页面列表中读取并提供测试的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行的某个地方。