使用 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 设置为 Filerun 设置为 Arguments,并将项目的根目录设置为 自定义工作目录

【讨论】:

【参考方案6】:

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

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

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

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

【讨论】:

以上是关于使用 Xdebug 调试 Codeception 测试的主要内容,如果未能解决你的问题,请参考以下文章

PHP调试跟踪之XDebug使用总结

PHP 调试工具Xdebug安装配置

PhpStorm+Xdebug配置单步调试PHP

Vim使用XDebug支持Php调试

phpstorm 使用 xdebug 进行调试

Swoole 如何使用 Xdebug 进行单步调试