2017-06-14 3 views
0

私はSOAP API(以下のコード例)の統合テストを書いています。SOAP呼び出しをデバッグする方法は?

エラーが発生し、サーバー側のコードをデバッグしたい(PhpStormで)。しかし、デバッガはテスト中のブレークポイントのみを考慮し、サーバ側のコードは無視します。

これは大体わかりました:$soapClient->doSomething(...);の呼び出しが新しいHTTPリクエストを開始します。 この「サブリクエスト」(PhpUnitの観点から)をどのようにしてデバッグするのですか?


統合テストのコード:

class UserIntegrationTest extends TestCaseBase 
{ 
    const URL = "http://my-server.loc/soapapi/user/wsdl"; 
    public static $classMap = []; 
    /** @var SoapClient */ 
    private $soapClient; 


    /** @var ConfigurationServiceInterface */ 
    private $config; 

    public function setUp() 
    { 
     parent::setUp(); 

     $options = [ 
      'exceptions' => true, 
      'login' => 'foo', 
      'password' => 'pwd', 
      'encoding' => 'utf-8', 
//   'proxy_host' => '192.168.2.96', 
//   'proxy_port' => '8080', 
      'classmap' => [], 
      'connection_timeout' => 5, 
     ]; 

     $this->soapClient = new SoapClient(self::URL, $options); 
    } 

    /** 
    * @test 
    * @group integration 
    */ 
    public function testDoSomething() 
    { 
     $options = array(
      'exceptions' => true, 
      'login' => 'foo', 
      'password' => 'pwd', 
      'encoding' => 'utf-8', 
//   'proxy_host' => '192.168.2.96', 
//   'proxy_port' => '8080', 
      'classmap' => [], 
      'connection_timeout' => 5, 
     ); 

     $soapClient = new SoapClient(self::URL, $options); 

     $message = new MyMessage(); 
     $message->x = 1; 
     $message->y = 2; 
     $result = $soapClient->doSomething($message); 
    } 

    protected function getDataSet() 
    { 
     return new ArrayDataSet([ 
      'users' => [ 
       [ 
        'id' => 1, 
        'username' => 'foo', 
        'password' => '...', 
       ], 
      ], 
      ... 
     ]); 
    } 
} 

答えて

0

ソリューションは、SOAPクライアントによって呼び出されたURIに?XDEBUG_SESSION_START=ECLIPSE_DBGPを追加することです。だから、WSDL

<port name="UserPort" binding="tns:UserBinding"> 
    <soap:address location="http://my-server.loc/soapapi/user"/> 
</port> 

portセグメント内の位置は、Xdebugクエリによって拡張し、次のようになりますする必要があります:

http://my-server.loc/soapapi/user?XDEBUG_SESSION_START=ECLIPSE_DBGP 

確かに、生産的なWSDLは、このようなlocationを含めることはできません。しかし、通常はWSDLが生成され(例えば、Zend\Soap\AutoDiscoverによって)、URIを簡単に動的に構成することができます。

+1

... php.iniで 'xdebug.remote_autostart = 1'を設定するだけです。 - xdebugは" debug me "パラメータ/ cookieに関係なく_every単一のrequest_をデバッグしようとします。欠点 - SOAPだけでなくすべての要求に影響を与えます。 – LazyOne

+0

私はXdebugの動作を変更したくありませんでした。しかし、それに問題がない誰かのために、確かに、それはうまくいくでしょうし、より良い/より単純な解決策でもあります。 – automatix

関連する問題