壞SoapClient的連接我們正在建立一個SOAP服務器的工作進行測試時,從拋出錯誤和異常防止PHP,我在貝哈特爲它創造自動化測試具體工作。我遇到的問題是我試圖測試到SOAP服務器的連接的身份驗證,特別是嘗試編寫測試,以確保在未提供用戶名和密碼時無法連接。在貝哈特
不過,我每次運行而沒有加入HTTP認證(和故意禁用WSDL緩存)測試時間我得到拋出了一個錯誤跟蹤遍佈控制檯屏幕一個PHP警告。
這是一個PHP的警告,上面寫着:
PHP Warning: SoapClient::SoapClient(http://cti.local/api/v1/companies/d1/soap?wsdl): failed to open stream: HTTP request failed! HTTP/1.1 401 Unauthorized
我想能夠抑制誤差,只要確保宣告新的客戶端,當它返回NULL或負值。爲此,我嘗試在「new」關鍵字前添加「@」符號,並將該調用封裝在不引發異常的try/catch語句中。但那不行。我也嘗試在行首添加「@」符號無濟於事。
使用PHP的內置SOAP客戶端類時。在我遇到這個問題之前,這似乎是一個非常棒的方式。那麼,在耗盡了我所能找到的所有選項後,我嘗試設置Zend SOAP Client並使用它。只是發現它似乎擴展了PHP的內置SoapClient類。所以這也不起作用。
不幸的是,我們正在使用HTTP認證的API的所有調用,包括到WSDL。目前,我正在本地運行已檢出的API副本(因爲我們尚未在環境中對其進行設置)。我知道,當我把適當的身份驗證,它工作正常。但是我想確保自動化的Behat測試可以成功地測試並返回測試傳遞的消息,以便驗證連接身份驗證失敗。
樣品連接呼叫的:
/**
* SOAP connection initiation.
*
* @param string $soapURL
* @param string $options (optional, no implemented yet)
*
* @Given /^I connect to a soap service at "([^"]*)"$/
*/
public function iConnectToASoapServiceAt($soapURL) {
$this->soapURL = $soapURL;
try {
$this->client = @new Zend\Soap\Client($soapURL, $this->options);
$this->soapFunctions = $this->client->getFunctions();
}
catch (\Exception $e) {
#For testing when it fails we cannot actually throw an error here.
#throw new Exception("Error connecting to SOAP server.");
}
}
/**
* @Given /^soap returns an error$/
*/
public function soapReturnsAnError() {
if ($this->client !== NULL && $this->soapFunctions !== NULL) {
throw new Exception("SOAP connection did not fail as expected.");
}
}
有沒有人有什麼想法?我需要能夠以自動的方式測試成功的連接和不成功的連接,不會錯誤並殺死PHP調用。
我竟然發現這是一個需要多管齊下。首先,我必須做你的建議(保存當前水平,在問題代碼之前設置爲0,然後在完成時設置回到先前的水平)。我也必須將它包裝在try/catch中。然後,我必須確保xdebug在此期間被禁用。最後,在某些情況下,爲了達到良好的效果,我甚至必須設置自己的錯誤處理程序,這在大多數錯誤情況下基本上什麼都不做。 – pthurmond