2012-10-25 1 views
6

BDD 테스트를 위해 Behat을 사용하려고합니다. Jenkins에서 빌드를 실행할 때 Behat이 웹 서버에서 PHP 빌드를 연 다음 테스트를 실행 한 다음 닫으려고합니다. 그렇게하는 방법?테스트를 실행하기 전에 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); 
} 

그러나 어떤 메시지없이 내동댕이 Behat 실행하는 경우.

+0

Jenkins가 실행중인 시스템에서 수동으로 실행할 수 있습니까? – Amey

+0

try false false –

+0

Behat 컨텍스트가 서버를 시작할 적절한 장소가 아닙니다. 이 방법으로 아파치를 시작하려고하지 않을 것입니다, 그렇죠? –

답변

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

빌드 프로세스의 일부로 서버를 시작하기 만하면됩니다. behat가 실행되기 전에 서버를 시작할 Ant 태스크를 작성하고 일단 behat가 완료되면이를 종료합니다.

이 방법을 사용하여 셀렌 서버를 시작하고 중지하는 데 성공했습니다.