2012-10-25 44 views
6

我正在嘗試使用Behat進行BDD測試。在Jenkins上運行構建時,我希望Behat在運行測試後打開PHP構建的Web服務器,然後關閉它。怎麼做?如何在運行測試之前啓動內置web服務器的PHP並在測試運行後關閉它

基本上我需要運行:

php -S localhost:8000 

在我的測試中BDD我想:

/** 
* @Given /^I call "([^"]*)" with email and password$/ 
*/ 
public function iCallWithPostData($uri) 
{ 
    echo exec('php -S localhost:8000'); 
    $client = new Guzzle\Service\Client(); 
    $request = $client->post('http://localhost:8000' . $uri, array(), '{"email":"a","password":"a"}')->send(); 
    $this->response = $request->getBody(true); 
} 

但隨後運行時,它貝哈特被卡住,沒有任何消息。

+0

您能夠從Jenkins運行的機器上手動運行它嗎? – Amey

+0

嘗試返回false –

+0

Behat上下文不適合啓動服務器。你不會嘗試以這種方式啓動apache,對吧? –

回答

3

自己解決了這個問題。我已經創建了兩種方法。我在運行我的BDD測試之前打電話給第一個,在我運行測試之後打電話給第二個:

private function _startDevelopmentServer($pidfile) 
{ 
    $cmd = 'cd ../../public && php -S 127.0.0.1:8027 index.php'; 
    $outputfile = '/dev/null'; 
    shell_exec(sprintf("%s > %s 2>&1 & echo $! >> %s", $cmd, $outputfile, $pidfile)); 
    sleep(1); 
} 

private function _killDevelopmentServer($pidfile) 
{ 
    if (file_exists($pidfile)) { 
     $pids = file($pidfile); 
     foreach ($pids as $pid) { 
      shell_exec('kill -9 ' . $pid); 
     } 
     unlink($pidfile); 
    } 
} 
4

只需將服務器作爲構建過程的一部分啓動即可。創建一個ant任務,在behat運行之前啓動服務器,一旦完成,就會終止它。

我已經成功地使用這種方法來啓動和停止硒服務器。

相關問題