2012-10-25 11 views
6

Próbuję użyć Behat do testowania BDD. Kiedy pracuję nad Jenkinsem, chciałbym, żeby Behat otworzył kompilację PHP na serwerze WWW, a następnie zamknął ją po uruchomieniu testów. Jak to zrobić?Jak uruchomić serwer PHP wbudowany przed uruchomieniem testu i zamknąć go po uruchomieniu testu

Zasadniczo trzeba uruchomić:

php -S localhost:8000 

W moich testów BDD próbowałem:

/** 
* @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); 
} 

Ale wtedy, gdy uruchomiony Behat utknie bez żadnego komunikatu.

+0

Czy jesteś w stanie uruchomić go ręcznie z maszyny, której używa Jenkins? – Amey

+0

try return false –

+0

Kontekst Behat nie jest właściwym miejscem do uruchomienia serwera. Nie próbowałbyś uruchomić Apache w ten sposób, prawda? –

Odpowiedz

3

Rozwiązałem to samodzielnie. Stworzyłem dwie metody. Pierwszy sprawdzam przed uruchomieniem testów BDD, a drugi po przeprowadzeniu testów:

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

Po prostu uruchom serwer jako część procesu kompilacji. Utwórz zadania ant, które uruchomią serwer przed uruchomieniem behat i zabiją go po zakończeniu działania.

Z powodzeniem używam tego podejścia do uruchamiania i zatrzymywania serwera selenowego.

Powiązane problemy