PHPUnit+Symfony:爬网程序跟随重定向导致SegFault


PHPUnit + Symfony: Crawler Follow Redirects Causes SegFault

我设置了一个简单的PHPUnit/Symfony WebTestCase来测试我们网站的登录表单。

$form = $crawler->filter("#register")->form();
// set form values
$crawler = $this->client->submit($form);

表单将提交给/register,然后在成功时重定向到/registered(在失败时200/OK返回到/register)。

如果我在上面的块之前使用$this->client->followRedirects();,或者在提交之后使用$this->client->followRedirect();,我会得到一个segfault。确实没有迹象表明segfault发生在哪里。

还有一点需要注意:如果我只运行这个测试父类中的测试(2个测试),即使用--filter [THE CLASS],它运行得很好。如果我试着运行这个测试,以及整个套件(大约15个测试),我会得到segfault。

我尝试过使用-d标志为phpunit提供更多内存,但这并没有真正的帮助。

问题可能是控制器与其他组件协同工作。

我建议您在PHPUnit中使用进程隔离,这样您就可以在单独的PHP进程中运行关键测试。例如,您可以使用以下注释:

指示测试类中的所有测试都应该在单独的PHP进程中运行:

/**
 * @runTestsInSeparateProcesses
 */
class MyTest extends PHPUnit_Framework_TestCase
{
    // ...
}

指示测试应该在单独的PHP进程中运行:

class MyTest extends PHPUnit_Framework_TestCase
{
    /**
     * @runInSeparateProcess
     */
    public function testInSeparateProcess()
    {
        // ...
    }
}

希望这能帮助