使用 Xdebug 调试 Codeception 测试
Posted
技术标签:
【中文标题】使用 Xdebug 调试 Codeception 测试【英文标题】:Debugging Codeception tests with Xdebug 【发布时间】:2013-09-07 13:05:24 【问题描述】:我使用 Codeception 的 ApiGuy 编写了一些 API 测试。现在我想在我的 phpStorm 7 中设置断点以进行测试调试,但不知道如何在 $ vendor/bin/codecept run
之后启动调试会话。我知道--debug
选项,但这并不是我想要的。
你有什么想法吗?提前致谢!
【问题讨论】:
在 phpStorm youtrack.jetbrains.com/issue/WI-16350987654321@ 中投票支持代码接收 【参考方案1】:我遇到了同样的问题。好像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
> Edit Configurations...
:
现在Add New Configuration (Alt + Insert)
> PHP Script
。然后命名运行配置并选择您在上面创建的文件。记得添加run
参数:
就是这样。现在您可以在 IDE 中运行测试并将它们作为普通脚本进行调试。
【讨论】:
哇,非常感谢,就像一个魅力!我还为我的项目根指定了自定义工作目录以避免配置异常。 这行得通。对于其他人进行故障排除,请尝试将您创建的run.php
文件放在与您的 codeception.yml
相同的目录中。这让它对我有用。
你真是个天才!谢谢一百万!【参考方案2】:
我使用 codecept.phar 文件,我发现这个文件确实有效。 只需在控制台中输入此命令,然后运行代码接收测试:
export XDEBUG_CONFIG="idekey=session_name remote_host=localhost profiler_enable=1"
【讨论】:
如果你使用批处理脚本快捷方式 这也适用于使用远程服务器运行代码接收。您只需在该导出行中指定不同的 remote_host。 在某些情况下(在一台机器上运行脚本,远程调试),设置 export XDEBUG_CONFIG="autostart=on" 可能很有用。您调用的每个脚本都将使用 php/cli/php.ini 中已填充的设置启动调试器【参考方案3】:我建议使用
php -dxdebug.remote_enable=1 -dxdebug.remote_autostart=On -dxdebug.idekey=YOUR_KEY -dxdebug.remote_host=YOUR_IP ../vendor/bin/codecept run
【讨论】:
效果很好。只需将其放入配置对话框中的“解释器选项”中(仅选项部分,没有“php”和“../vendor/bin/codecept run”)。【参考方案4】:可以使用别名
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
【讨论】:
【参考方案5】:另一种方法是配置 PhpStorm,如上所述,但将 bin/cept
设置为 File,run
设置为 Arguments,并将项目的根目录设置为 自定义工作目录。
【讨论】:
【参考方案6】:至少在 PHPStorm 中,我认为您实际上不需要额外的脚本来调试 Codeception。我认为您也不会在其他 IDE 中使用。您可以在 Maciej Sz 的答案中显示的配置中将 codecept.phar 设置为“文件”,然后像运行 PHPStorm、Eclipse 等中的任何其他命令行脚本一样运行它。
在 PHPStorm 中,您创建一个新的 PHP 脚本调试配置,指向 codecept.phar 作为“文件”。将参数设置为基本运行配置(例如运行接受 --group mygroup --env myenv),但每次要调试时都告诉它“显示此页面”。然后,您可以更改每次运行的测试/组/环境以使用断点运行测试。
当您从弹出窗口中单击调试按钮时,验收测试将在调试器控制台中启动。
遇到断点的初始运行将处于验证阶段,Codeception 尝试确保代码在运行之前运行。第二次运行将在测试实际使用 Selenium 或您配置的任何内容时进行。这将允许您查看内存中的内容、以受控方式跨过事物等。
【讨论】:
以上是关于使用 Xdebug 调试 Codeception 测试的主要内容,如果未能解决你的问题,请参考以下文章