LoginSignup
1
1

More than 5 years have passed since last update.

ゲストOSでPHPUnitを起動するときのデバッグ起動方法

Last updated at Posted at 2018-05-23

これのきっかけ

開発機がWindowsなので、実際の動作環境に合わせてvagrantでCentOSを建てApache,MySQL,etc等をインストールし、やった環境構築完了!と思っていた時期がありました。

環境
[root@localhost /]# php -v
PHP 7.1.17 (cli) (built: Apr 25 2018 08:30:10) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.1.17, Copyright (c) 1999-2018, by Zend Technologies
    with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans
/etc/15-xdebug.ini
; Enable xdebug extension module
zend_extension=xdebug.so
xdebug.remote_enable=true
xdebug.remote_autostart=1
xdebug.remote_connect_back=1
xdebug.remote_host=localhost
xdebug.remote_port=9000
xdebug.remote_handler=dbgp

これでWeb画面へアクセスすると、Windows側の9000番ポートで待ち受けしているエディタではブレイクポイントが利用できるようになります。
PHPUnitを使う場合、テストケースをある程度書いたら動作確認のためホストOS側のエディタから起動しますが、その場合ホストOS(=Windows)にもゲストOSと同じライブラリを用意しなきゃならないことに気が付き、ちょっと絶望したのでPHPUnitもゲストOSで実行することに。

PHPUnitをゲストOSで起動する(デバッグ起動もする)

RunTest.php
<?php
// 実行したいテストケースPHPへのパス
$testClass = $_GET['test_class'];
// vagrantで起動しているゲストOSから見たホストOSのIPアドレス
$host = `netstat -rn | grep "^0.0.0.0 " | cut -d " " -f10`;
$phpunit = "phpunitへのパス"
$bootstrap = "--bootstrap テスト準備.phpのパス";
shell_exec("XDEBUG_CONFIG='remote_host={$host}' phpdbg -qrr $phpunit $testClass $bootstrap");

CLIでデバッグする場合はXDEBUG_CONFIGを空でも良いので設定する必要があるため、ついでにXDEBUG_CONFIG='remote_host={$host}'でデバッグ情報がホストOSに送信されるようします。
後はRunTest.phpへHTTP.GETでテストクラスを渡して実行すれば、9000番ポートを使ってステップ実行ができるようになります。

参考

Vagrantで、ゲストOSからホストのIPを取得する方法
PhpStormでVagrant上のCLIのPHPをXdebugする

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1