2

我设置了本地ddev(基于 docker)PHP Drupal 7开发环境。我已经使用Behat Drupal Extension为本网站设置了Behat测试。

所有 Behat 上下文文件和相关的 composer vendor 文件夹都位于站点 Web 根目录之外的 testing 文件夹中。文件夹结构类似于:

  • 项目

    • 测试

    • public_html

我启用了xdebug并使用了PhpStorm。我已经设置了一个 PhpStorm 调试服务器并提供了正确的路径映射。

通过浏览器调试 php 代码效果很好,调试CLI命令效果很好。当我在通过 CLI 运行 Behat 测试时尝试调试所有代码时,就会出现我的问题。

在 PhpStorm PHP 服务器配置中,如果我只为testing文件夹设置路径映射,我可以调试测试文件夹中的任何代码,并且没有 curl 问题。我显然无法调试public_html文件夹中的代码,因为我没有设置路径映射。当我为testingpublic_html文件夹设置路径映射时,我可以调试所有代码,但任何包含对站点本地 url 的 Minkcurl_exec()调用的行为步骤定义都会挂起 3 到 10 分钟!

我的目标...

为了能够在运行 Behat 测试的同时调试testing和文件夹中的所有 php 代码而不会挂起。public_htmlcurl_exec()

我尝试过的...

我将 PhpStorm Debug Max Simultaneous Connections 设置为 10 并尝试了 20。

这是我的 xdebug 远程配置设置:

xdebug.remote_addr_header => no value => no value
xdebug.remote_autostart => On => On
xdebug.remote_connect_back => Off => Off
xdebug.remote_cookie_expire_time => 3600 => 3600
xdebug.remote_enable => On => On
xdebug.remote_handler => dbgp => dbgp
xdebug.remote_host => host.docker.internal => host.docker.internal
xdebug.remote_log => no value => no value
xdebug.remote_mode => req => req
xdebug.remote_port => 9000 => 9000

以下所有情况都导致 curl 挂起:

  • 通过使用我的 behat 命令传入一个环境变量来 设置xdebug.remote_autostart=0并启动 Xdebug 会话XDEBUG_CONFIG=idekey=PHPSTORM
    • 不通过curl 调用传递任何 cookie 或GET参数。
    • 使用 curl 调用传递相同的idekey作为 cookie 和 GET 参数
    • 使用 curl 调用将不同的 idekey 作为 cookie 和 GET 参数传递

任何帮助是极大的赞赏!!

4

1 回答 1

1

在遵循@LazyOne 的建议后,我更仔细地查看了 Xdebug 日志,并注意到在成功建立 xDebug 连接后发生了挂起。这导致我有两个可能的原因;一些没有在 PhpStorm 调试工具窗口中注册的 rouge 断点或站点上的某些东西延迟了响应。

所以我做了以下事情:

  1. 删除了应用程序中的所有 PhpStorm Debug 断点并重新启动了 PhpStorm。
  2. 实现了 Drupal 7 配置中的 Automatic Cron 设置被设置为运行间隔,1 Day因此将其切换为Never. 我的想法可能是 Drupal Cron 的执行被卡住并且没有完成,所以每个 HTTP 请求都挂起。

它起作用了,现在我希望我已经分别测试了这些步骤中的每一个,因为我不知道究竟哪一个是解决方案。我倾向于#1,因为当我在 PhpStorm 中关闭调试时,Behat 测试将立即执行。无论哪种方式,如果您有类似的问题,请尝试以上两种方法。

于 2019-05-17T18:49:44.650 回答