使用Xdebug调试Codeception测试

时间:2013-09-04 06:26:02

标签: php testing xdebug codeception

我用Codeception的ApiGuy写了一些API测试。现在我想在我的PhpStorm 7中设置断点以进行测试调试,但是不知道如何在$ vendor/bin/codecept run之后启动调试会话。我知道--debug选项,但这不是我想要的。

你知道吗?提前谢谢!

6 个答案:

答案 0 :(得分:28)

我遇到了同样的问题。似乎 Codeception 仅带有命令工具,无法调试。我最终编写了自己的PHP运行器,它基本上是codeception命令可执行文件的精简副本。

实际上你在Linux中所要做的就是从codeception工具中删除shebang以将其作为PHP脚本运行。但是由于codeception run以外的命令不太可能成为调试的主题,所以我准备了单独的PHP脚本。它仅包含run选项:

<?php
/**
 * Codeception PHP script runner
 */

require_once dirname(__FILE__).'/../vendor/codeception/codeception/autoload.php';

use Symfony\Component\Console\Application;

$app = new Application('Codeception', Codeception\Codecept::VERSION);
$app->add(new Codeception\Command\Run('run'));

$app->run();

完成此操作后,您可以像设置 PHPStorm 中的任何其他设置一样设置调试脚本。所以转到Select Run/Debug Configuration&gt; Edit Configurations...

Edit Configurations...

现在Add New Configuration (Alt + Inssert)&gt; PHP Script。然后命名运行配置并选择上面创建的文件。请记住添加run参数:

enter image description here

就是这样。现在,您可以在IDE中运行测试并将其作为普通脚本进行调试。

答案 1 :(得分:19)

我使用codecept.phar文件,我发现这个确实有效。 只需在控制台中输入此命令,然后运行代码测试:

export XDEBUG_CONFIG="idekey=session_name remote_host=localhost profiler_enable=1"

答案 2 :(得分:5)

我建议使用

php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=YOUR_KEY -dxdebug.remote_host=YOUR_IP ../vendor/bin/codecept run

答案 3 :(得分:2)

可以使用别名

alias xon="export XDEBUG_CONFIG=\"profiler_enable=1\""
alias xoff="export XDEBUG_CONFIG=\"profiler_enable=0\""

然后我们可以在控制台中使用xon来启动调试并使用xoff来完成。

http://theaveragedev.com/debug-cli-scripts-with-phpstorm

答案 4 :(得分:1)

另一种方法是配置PhpStorm,如上所述,但为文件设置bin/cept,为参数设置run,并为您设置项目为自定义工作目录

答案 5 :(得分:0)

我认为你至少在PHPStorm中不需要额外的脚本来调试Codeception。我不认为你会在其他IDE中。您可以将codecept.phar设置为Maciej Sz的答案中显示的配置中的“File”,并像运行PHPStorm,Eclipse等的任何其他命令行脚本一样运行它。

在PHPStorm中,您创建一个新的PHP脚本调试配置,指向codecept.phar作为“文件”。将参数设置为基本运行配置(例如,运行验收--group mygroup --env myenv),但每次要调试时都要将其显示为“显示此页面”。然后,您可以更改每次运行的测试/组/环境以使用断点运行测试。

当您从弹出窗口中单击调试按钮时,验证测试将在调试器控制台中启动。

命中断点的初始运行将处于验证阶段,Codeception尝试确保代码在运行之前运行。第二次运行将是测试实际使用Selenium或您配置的任何内容。这将允许您查看内存中的内容,以受控方式跨越事物等等。